Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,315

    [delphi] chiudere form creata a runtime

    Ciao a tutti, ho questa situazione:

    ho un frame (FrameDiRicerca) e dentro di esso ho vari pannelli (TPanel)
    in un panel di questi ho inserito un secondo TFrame nel quale c'e' un TButton.

    in un certo punto della mia applicazione creo a runtime un TForm e, sempre a runtime, ci inserisco il mio FrameDiRicerca. poi effettuo lo showmodal del form creato.

    io dovrei chiudere il form creato premendo il Tbutton presente nel pannello del FramediRicerca.

    codice:
    var
      myForm: TForm;
      myFrame: TFrameQueryBiglietti;
    begin
      PostMessageAbilitato:=False;
      PostMessageId:=0;
      myForm := TForm.Create(nil);
      myFrame:= TFrameQueryBiglietti.Create(self);
      try
        myForm.WindowState:=wsNormal;
        myForm.Position:=poDesktopCenter;
        myForm.Caption:='Query Biglietti';
        myFrame.Parent:= myForm;
    
        if myForm.Showmodal = mrOk then
         begin
           ShowMessage(inttostr(PostMessageId));
         end;
    
      finally
        PostMessageAbilitato:=True;
        myFrame.Free;
        myForm.Free;
      end;
    come devo fare per chiudere myForm?

    grazie

  2. #2
    Prova con myForm.ModalResult:= mrCancel;

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,315
    Quote Originariamente inviata da denis76 Visualizza il messaggio
    Prova con myForm.ModalResult:= mrCancel;
    ciao,

    il tbutton è dentro il TFrameQueryBiglietti.
    Tale frame lo utilizzo anche in altre form...e in tale TFrameQueryBiglietti (myFrame) non è presente la variabile myForm.

    io ho provato anche cosi:

    TForm(FindComponent(NomeForm)).ModalResult:=mrOk;

    dove nomeform e' preventivamente assegnata a nomeform:=myForm.name (la form che devo chiudere).

    con questo codice il programma viene compilato, ma in esecuzione va in errore.

    qualche altro suggerimento?

    grazie

  4. #4
    Ciao, io non uso delphi ma il c++, ma le vcl sono le stesse.
    Non puoi creare una variabile TForm al programma principale a cui assegnerai l'indirizzo della finestra che crei ? e poi usare Close per chiuderla ?
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,315
    Quote Originariamente inviata da Samuele_70 Visualizza il messaggio
    Ciao, io non uso delphi ma il c++, ma le vcl sono le stesse.
    Non puoi creare una variabile TForm al programma principale a cui assegnerai l'indirizzo della finestra che crei ? e poi usare Close per chiuderla ?
    ciao,

    grazie Samuele!!! ho fatto le prove e sembra proprio che funziona bene.
    riesco a chiudere la form...

    grazie!

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,301
    Una soluzione "pulita" potrebbe essere quella di creare un evento nel Frame che usi per la ricerca, che consenta a elementi esterni (controlli grafici o altro) di venire informati quando si effettua l'azione che dovrebbe comportare nel caso in esame la chiusura del Form che ospita l'interfaccia (ma un altro controllo potrebbe "reagire" diversamente).

    In questo modo, non si va a creare una dipendenza tra il controllo che contiene il pezzo di interfaccia e il Form in cui viene inserito, né si obbliga il Frame a conoscere l'entità dell'oggetto che si iscrive all'evento per essere notificato e comportarsi di conseguenza, in questo caso con una chiusura da parte del Form "ospite".

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

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

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,315
    Quote Originariamente inviata da alka Visualizza il messaggio
    Una soluzione "pulita" potrebbe essere quella di creare un evento nel Frame che usi per la ricerca, che consenta a elementi esterni (controlli grafici o altro) di venire informati quando si effettua l'azione che dovrebbe comportare nel caso in esame la chiusura del Form che ospita l'interfaccia (ma un altro controllo potrebbe "reagire" diversamente).

    In questo modo, non si va a creare una dipendenza tra il controllo che contiene il pezzo di interfaccia e il Form in cui viene inserito, né si obbliga il Frame a conoscere l'entità dell'oggetto che si iscrive all'evento per essere notificato e comportarsi di conseguenza, in questo caso con una chiusura da parte del Form "ospite".

    Ciao!
    Ciao Marco,

    scusami, non mi è molto chiara questa soluzione che suggerisci.

    io uso quest tecnica:
    1) prima della creazione del form che visualizzero' ShowModal setto una variabile globale: FinestraModal:=True
    2) creo il MyForm e dentro ci metto il mio FrameDiRicerca
    3) visualuzzo MyForm.Showmodal
    ...
    nel FrameDiRicerca c'e' un pulsante che che a secondo del valore di FinestraModal si comporta diversamente:
    FinestraModal= True....chiusura finestra (MyForm.ModalResoult:=MrOk) e conseguente assegnazione FinestraModal:=False
    FinestraModal= False....passaggio ad altro frame del menu principale

    La soluzione che suggerisci è ancora più "pulita" ?

    grazie

  8. #8
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,301
    Diciamo che qualsiasi soluzione che preveda l'uso di una variabile globale tende a essere sempre "meno pulita", perché chiunque può modificarne il valore.

    Detto questo, per poter precisare, cosa non ti è chiaro nello specifico della soluzione che ho proposto?
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  9. #9
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,315
    dici di creare un evento nel FramediRicerca...

    ho questa situazione:

    codice:
    MyForm
    |
    |__FramediRicerca
        |
        |__FrameGrigliaRisultatiRicerca
            |
            |__Pulsante selezione
    l'evento per la chiusura del MyForm è nel FrameGrigliaRisultatiRicerca, premendo questo pulsante ho scritto questo codece:
    codice:
    procedure TFrameGrigliaQueryBiglietti.cxGrid1DBBandedTableViewQueryBigliettiIDPropertiesButtonClick(
      Sender: TObject; AButtonIndex: Integer);
    begin
         WM_Id:=DM.IBQueryBigliettiID.AsString;
         if FinestraModal then myForm.ModalResult:=mrOk;
         if FinestraModal then Abort;
         PostMessage(Application.MainForm.Handle, WM_PAGECALL, Integer( TFrameBiglietteria ), 0);
    end;
    come devo fare per rendere tale soluzione 'pulita'?

    grazie

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.