Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [Delphi ]Gestione finestre

    Non ho ancora iniziato coi frames, perciò sto creando una piccola applicazione "di prova":

    Una finestra (Menu) con 2 bottoni: Clienti e Esci
    il secondo lancia un application.terminate e funziona,

    all'evento onClick di Clienti è associato:
    codice:
    procedure TMenu.bClientiClick(Sender: TObject);
    var Clienti: TForm;
    begin
            try
              Clienti := TClienti.Create(Self);
              Clienti.ShowModal;
            finally
            end;
    end;
    Giustamente si apre una finestra modale che tglie il controllo dal menu.

    Come faccio, dalla nuova finestra Clienti a chiudere la finestra (Form?) corrente con un bottone?!?

    ho provato con Clienti.Destroy (Errore), Clienti.free(non succede nulla), clienti.close (errore)..

    Thnx

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    Ciao,
    per chiudere tramite codice una form, che sia modale oppure no, devi utilizzare il metodo Close. Inserisci un pulsante nella nuova form Clienti e definisci il codice dell'evento OnClick semplicemente in questo modo:
    codice:
    procedure TClienti.ExitButtonClick(Sender: TObject);
    begin
      Close;
    end;
    Ti sconsiglio vivamente di utilizzare il metodo Application.Terminate: è un modo leggermente "drastico" per chiudere un'applicazione Delphi. Devi sapere che ogni applicazione Delphi termina quando viene chiusa la finestra indicata come form principale (o MainForm). Nel tuo caso, ti basta inserire il codice riportato sopra nel pulsante Esci della form Menu e il gioco è fatto.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Grazie 1000!!!

    'azz, io cercavo un "genitore" del momento che il comando era lanciato da un pulsante: parent.close, form2.close...

    era solo close!!

    Grazie anche x l'application.terminate: l'avevo trovato sul manuale in linea ed era l'unica cosa che andava.

    Ieri sono passato ai frames (eh, già! tenere 2 finestre, una per il menu, l'altra per il "lavoro" era veramente squallido, ma sto facendo pochi passi per volta)

    Ho comprato "Mastering Delphi", noto come la bibbia di Delphi. c'è veramente tanta roba ma mancano i fondamenti..
    E' vero che insegna a generare dinamicamente n form, però non spiega come chiuderle!!! (Forse il problema è mio...)

    Thnx, arriveranno presto domandine sui frames..

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    Il libro "Mastering Delphi" di Marco Cantù è un testo rivolto principalmente a chi ha già avuto qualche esperienza con Delphi e vuole approfondire dal punto di vista pratico le proprie conoscenze, senza addentrarsi eccessivamente negli aspetti teorici.
    Tuttavia, credo che la parte introduttiva del manuale sia abbastanza discorsiva. Si presuppone che l'utente sia abbastanza smaliziato da individuare i metodi e le proprietà in base all'esigenza per le problematiche non eccessivamente complesse...quindi per i neofiti forse non è proprio l'opera migliore da leggere.
    I testi veramente ottimi, come "Delphi 6 Developer's Guide" di Teixeira/Pacheco, sono purtroppo disponibili solo in lingua inglese e sono molto costosi...le traduzioni in italiano spesso perdono pure qualche capitolo.

    Volevo fare un'aggiunta al tuo caso delle finestre indicandoti perchè si scrive Close senza aggiungere alcuna variabile o riferimento ad un oggetto prima del metodo. Quando crei un nuovo form, non fai altro che creare una nuova classe, un modello di oggetto, partendo da una classe superiore (TForm, in questo caso) che fornisce automaticamente gli elementi fondamentali di una finestra. Quando aggiungi pulsanti e codice al form, non fai altro che completare la nuova classe che hai creato, aggiungendo elementi al modello; a runtime, potresti anche istanziare 30 copie uguali della stessa form. Ciascuna form creata verrà chiusa quando premi il pulsante. L'evento OnClick del pulsante è un semplice nuovo metodo che hai aggiunto alla tua classe modello

    E' sbagliato scrivere nel codice una cosa del tipo
    codice:
    Form2.Close;
    anche se Form2 rappresenta un'istanza di TForm2. Se tu avessi più copie di TForm2, cercherebbero tutte di chiudere la stessa istanza della form invece di chiudere se stesse.

    Scrivere
    codice:
    Close;
    equivale a scrivere
    codice:
    Self.Close;
    Self è una variabile nascosta che viene passata ad ogni metodo e rappresenta l'istanza dell'oggetto corrente. In questo modo, creando più finestre (istanze) di TForm2 a runtime, ciascuna finestra chiuderà se stessa (rappresentata da Self) quando si preme il pulsante.

    Spero di averti maggiormente chiarito le idee sul meccanismo...potrebbero esserti utili nel proseguire il tuo studio su Delphi con qualche problema in meno.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  5. #5

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.