Ouvrir la form portant le nom contenu dans un TLabel

cs_darkduck Messages postés 138 Date d'inscription vendredi 28 février 2003 Statut Membre Dernière intervention 29 février 2008 - 23 août 2003 à 03:18
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 - 23 août 2003 à 15:36
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

3 réponses

hepho Messages postés 12 Date d'inscription samedi 15 juin 2002 Statut Membre Dernière intervention 30 août 2007
23 août 2003 à 10:58
Pas sur d avoir vraiment compris ton probleme
mais si jai bien compris ....

procedure TForm1.FormActivate(Sender: TObject);
begin
form1.Caption := label1.Caption ;
end;
0
cs_darkduck Messages postés 138 Date d'inscription vendredi 28 février 2003 Statut Membre Dernière intervention 29 février 2008 1
23 août 2003 à 12:47
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
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
23 août 2003 à 15:36
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
0
Rejoignez-nous