Italian community of Lazarus and Free Pascal

Programmazione => Generale => Topic aperto da: petrusic - Aprile 09, 2024, 07:36:40 pm

Titolo: [Risolto] pannello con stringgrid e due pulsanti si attiva, ma sparisce subito
Inserito da: petrusic - Aprile 09, 2024, 07:36:40 pm
Ho una Form in cui compillo una stringGrid da mostrare alla fine.
La Form diversi compoonenti, di cui la maggior parte sono distribuiti dentro quattro pannelli.
Nello strutturare l'insieme dei componenti, ho disegnato i vari componenti in momenti successivi.
L'ultimo componente disegnatoi è una StringGrdid. Essa viene resa visibile da codice dopo la sua compilazione. Per lasciarla alla vista ho inserito due pulsanti con la proprietà TabStop = True.

Ebbene, il pannello con la StringGrid compare per qualche istante e poi scompare, perchè viene eseguita automaticamente la procedura Click[/i che contiene l'istruzione  Close del  primo dei due pulsanti (TabOrder = 0).
Codice: [Seleziona]
procedure TForm9.BPulsNoAmmortClick(Sender: TObject);
begin
  Close;
end;               
]

Con l'istruzione Close, si chiude la Form ed il controllo ritorna alla chiamante.

E' la prima volta che mi succede una cosa del genere e non capisco perchè la proprietà TabStop NON funziona.
Titolo: Re:pannello con stringgrid e due pulsanti si attiva, ma sparisce subito
Inserito da: DragoRosso - Aprile 09, 2024, 10:10:21 pm
Non ho compreso bene.

Comunque: la TABSTOP non impedisce al controllo di essere utilizzato, istruisce solo l'interfaccia ad usare o meno il tasto TAB su quell'elemento .... ovvero se premendo il tasto TAB posso o meno accedere al componente.
Nulla ha a che fare con eventi o chiusure.

In ogni caso, se devi visualizzare o meno un componente grafico usa la sua proprietà "VISIBLE". Se il componente è un contenitore (come ad esempio un pannello) tutto ciò che è contenuto viene nascosto se la "VISIBLE" del contenitore è "FALSE".
Titolo: Re:pannello con stringgrid e due pulsanti si attiva, ma sparisce subito
Inserito da: petrusic - Aprile 10, 2024, 04:58:28 pm
In ogni caso, se devi visualizzare o meno un componente grafico usa la sua proprietà "VISIBLE". Se il componente è un contenitore (come ad esempio un pannello) tutto ciò che è contenuto viene nascosto se la "VISIBLE" del contenitore è "FALSE".
No, il problema non è quello.

Io vorrei che , dopo la visualizzazione del Panel3 dentro cui si trova, compilata la StringGrid da controllare, il programma si fermazze in attesa della successiva scelkta dell'utente..

Nel Panel3, oltre la StringGrid sono presenti altri due pulsanti di cui il primo ha la proprietà TabStop= True e la proprietà TabOrder= 0. É il pulsante a cui cedo il focus:
Codice: [Seleziona]
  Form9.Panel3.Visible:= True;
  Sleep(200);     // Attendi 200 millesecondi (= 1/5 di secondo)
  Application.ProcessMessages;
  Form9.BPulsNoAmmort.SetFocus;           

Diversamente da quanto da me atteso, l'esecuzione del programma va avanti, come se fosse stato dato il click sul pulsante. Viene perciò scatenato l'evento BPulsNoStampClick,  a torto, secondo me, e viene eseguito il codice contenuto nella procedura relativa:
Codice: [Seleziona]
procedure TForm9.BPulsNoAmmortClick(Sender: TObject);
begin
  WriteLn('procedure TForm9.BPulsNoAmmortClick');
  Close;
end;


La mia domanda, allora è: Come faccio a fermare l'esecuzione del programma subito dopo la presentazione alla vista del Panel3 con la StringGrid da leggere e controllare, prima di scegliere come proseguire?

Spero di essermi spiegato meglio ora.
Titolo: Re:pannello con stringgrid e due pulsanti si attiva, ma sparisce subito
Inserito da: nomorelogic - Aprile 10, 2024, 05:53:55 pm
la form con Panel3 e la StringGrid può diventare modale?

Oppure potresti mettere la stringgrid da controllare in una form modale lanciata per l'occasione?
Titolo: Re:pannello con stringgrid e due pulsanti si attiva, ma sparisce subito
Inserito da: petrusic - Aprile 11, 2024, 10:01:41 am
la form con Panel3 e la StringGrid può diventare modale?
Panel3 fa parte della Form9 che viene avviata  come modale. Al momento dell'avvio viene esposto il Panel1,

Citazione da: nomorelogic
Oppure potresti mettere la stringgrid da controllare in una form modale lanciata per l'occasione?
Avevo fatto così inizialmente, ma poi ho preferito mantenere la StringGrid nella Form9, per via di un'array che viene caricato nella Form9, ma che va esposto in visione nella StringGrid del Panel3.

Temo però che dovrò fare marcia indietro, accettando il tuo ultimo suggerimento perchè gli inconvenienti non viaggiano mai da soli, infatti ho anche difficoltà a posizionare il Panel3, a partire dal vertice superiore sinistro della Form9.  :o

Titolo: Re:pannello con stringgrid e due pulsanti si attiva, ma sparisce subito
Inserito da: nomorelogic - Aprile 11, 2024, 11:22:48 am
se come ho capito la StringGrid è un riepilogo dell'operazione effettuata
e da questa dipende la conferma o meno del tutto
dovresti proprio metterla in un form modale per un fatto di chiarezza operativa nei confronti dell'utente
Titolo: Re:pannello con stringgrid e due pulsanti si attiva, ma sparisce subito
Inserito da: petrusic - Aprile 11, 2024, 03:38:22 pm
se come ho capito la StringGrid è un riepilogo dell'operazione effettuata
e da questa dipende la conferma o meno del tutto
dovresti proprio metterla in un form modale per un fatto di chiarezza operativa nei confronti dell'utente

Mmmmmm  ::)

Si, ho pensato come fare per ridurre al minimo il passaggio di dati dalla Form9 (chiamante) alla successiva.Showmodal.
Farò come mi consigli, ritornando così alla mia prima soluzione, e sanare finalmente tutte le anomalie incontrate in quest'ultima settimana.

Mi faccio sentire a fine modifica . . .
 ;)
Titolo: Re:pannello con stringgrid e due pulsanti si attiva, ma sparisce subito
Inserito da: petrusic - Aprile 18, 2024, 04:44:57 pm
Ho finito ora di trasferire in una nuova Form la StringGrid.  Così facendo non ho incontrato più problemi di visualizzazione della StringGrid ed il programma resta in attesa della scelta utente per proseguire nel suo lavoro.
 :)