Effectivement, le problème est un peu plus complexe et voici ma réponse commentée :
procedure TForm1.btnFindClassClick(Sender: TObject); var FormClass : TFormClass; Existing: boolean; i: integer; begin //Rechercher si la classe existe à l'aide de GetClass qui //a l'avantage de ne pas déclencher d'exception //s'il ne parvient pas à trouver la classe, contrairement //à FindClass FormClass := TFormClass(GetClass(Label1.Caption)); //Si le classe est enregistrée if FormClass <> nil then begin Existing := False; //Rechercher la première fenêtre de la classe for i := 0 to Screen.FormCount - 1 do if Screen.Forms[i] is FormClass then begin //Montrer la fenêtre Screen.Forms[i].Show; //Restaurer ses dimensions ShowWindow(Screen.Forms[i].Handle, SW_Restore); Existing := True; break; end; //S'il n'y a pas de fenêtre visible de ce type if not Existing then //alors, il faut en créer une with FormClass.Create(Self) do Show; end; end;
|
Et, de plus, pour ne pas référencer, dans l'unité qui contient ce code, toutes les unités que l'on est susceptible d'appeler, il faudra faire appel à la function
RegisterClass dans chaque unité que l'on veut pouvoir appeler. Comme la classe appelée doit être connue dès le départ, il est préférable de mettre l'appel à RegisterClass dans une section Initialization.
Exemple, dans Unit2 qui contient Form2 de type TForm2 :
Unit2
type TForm2 = Class(TForm); end; var Form2: TForm2; implementation
// etc
initialization RegisterClass(TForm2);
end.
|
En résumé, si Label1.Caption (dans Form1) est égal à TForm2, alors, le code recherchera s'il existe une classe de ce nom. Si la classe est trouvée, alors on recherche si une fiche de ce type existe en mémoire et, si oui, on l'affiche et si non, on la crée.
Ce code fait appel à la notion de référence de classe (ici TFormClass).
Quand je vois que tu écris Label1.Caption.Show, je ne suis pas sûr que cette notion te soit familière.
Alors, un petit tour dans l'aide en ligne sur le Pascal Objet (voir "références de classe") t'aidera à comprendre la démarche employée ici, pas évidente au premier abord.
May Delphi be with you-------------------------------
Réponse au message :
-------------------------------
> Merci pour ton aide mais c pas tout a fait ça mon prob.
>
> Je me réexplique

:
>
> Je vais essayer d'etre plus clair:
>
> Disons que j'ai une string s'appelant NomForm
>
> NomForm:=Ma_page;
>
> je veut donc savoir comment ouvrir la Form Ma_page mais sans faire appel a la fonction Ma_page.show car la valeur de NomForm change constament suivant la Form active
>
> Je veut donc savoir comment ouvrir la form dont le nom est contenu dans NomForm
>
> Merci
>
>
>
>
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > Pas sur d avoir vraiment compris ton probleme
> > mais si jai bien compris ....
> >
> >
> >
> > procedure TForm1.FormActivate(Sender: TObject); > > begin > > form1.Caption := label1.Caption ; > > end; > > |
> >
> >
> >
> > -------------------------------
> > Réponse au message :
> > -------------------------------
> >
> > > Bonjour,
> > >
> > >
> > > J'aimerai ouvrir une form portant le nom contenu dans mon TLabel.
> > >
> > >
> > > J'ai essayé Label1.Caption.Show mais biensur ça ne marche pas car delphi ne sait pas que je veut indiquer par Label1.Caption, le nom d'une form.
> > >
> > > J'aimerai donc savoir ce qu'il faut que je fasse?
> > >
> > > Merci bcp
> > >
> >
>