PDA

Visualizza la versione completa : [Delphi] Cambiare la caption di una form già aperta


kate71
27-10-2003, 15:56
Salve !

E' possibile cambiare la Caption di un form
quando la form è già aperta?
Provo a spiegarmi meglio...
Il programma si apriva con fmMain e fmSelCli ..
selezionando il codice da una comboBox in fmSelCli ottenevo il "NomeCliente", chiudevo la form fmSelCli e la var "NomeCliente" appariva nella caption di fmMain.

Questa era ed è tutt'ora la procedura che uso.
Inizialmente funzionava(vedi codice qui sotto) :

procedure TfmMain.FormActivate(Sender: TObject);
begin
Application.CreateForm(TfmSelCli, fmSelCli);
try
fmSelCli.ShowModal;
if fmSelCli.ModalResult = mrOK then
begin
fmMain.Caption := 'Cliente '+ NomeCliente;
fmSelCli.Free;
end;
except
on E: Exception do
begin
Beep;
ShowMessage('Errore su apertura Selezione
Cliente');
end;
end;
end;

..da quando ho aggiunto la Form di Login(la prima a comparire)
che consente l'accesso e l'apertura del programma
(e quindi di fmMain e fmSelCli)... la caption della fmMain non cambia più!
per quale motivo?

Grazie!
Kate71 :ciauz:

alka
27-10-2003, 18:01
E' sempre possibile modificare la Caption di una form, anche quando questa è nascosta.

Pertanto, il problema è da imputarsi ad un percorso errato che esegue il programma, diverso da quello che ti aspetti, che non esegue la modifica alla Caption.

Esegui il programma passo per passo, mettendo eventualmente dei "breakpoint" sulle istruzioni che hai riportato per accertarti che, sulla conferma del cliente, la selezione sia corretta.

kate71
27-10-2003, 18:09
L'ho fatto e il valore della variabile è esatto,
ma non lo scrive sulla caption della form!!
Dato che non è la prima volta che ci provo..
ero giunta alla conclusione che essendo stata
creata la form...la caption non potesse più
essere cambiata !!

Non riesco proprio a capire come mai!! :confused:

alka
27-10-2003, 18:13
Non devi controllare il nome di alcuna variabile, ma solo se l'istruzione


fmMain.Caption := 'Cliente '+ NomeCliente;

viene effettivamente eseguita.

kate71
27-10-2003, 18:20
non ho capito cosa intendi con se
"viene effettivamente eseguita l'istruzione"
ma ho risolto in questo modo:
fmMain.Caption := 'Cliente '+ NomeCliente;
diventa
Caption := 'Cliente '+ NomeCliente;
dato che avviene nella fmMain stessa!!
forse era per questo motivo?

Ti ringrazio!!!
Kate71

alka
27-10-2003, 18:24
Se il motivo è quello oppure no, dipende da come è strutturata la tua applicazione.

Generalmente, è sbagliato fare riferimento ad una precisa variabile all'interno del codice di un form, scrivendo ad esempio in un metodo TMainForm.DoSomething qualcosa del tipo MainForm.Caption, poichè il codice della classe, che è identico e funziona allo stesso modo per tutte le istanze (copie) che vengono create, opera direttamente su una sola di queste, cioè quella rappresentata dalla variabile MainForm, in questo caso.

Nei casi più generali, tuttavia, trattandosi di una form che viene creata una sola volta (mi riferisco alla form principale), il problema non si pone.

Ciao! :ciauz:

Loading