Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Anzeigen eines bestimmten Forms (https://www.delphipraxis.net/46874-anzeigen-eines-bestimmten-forms.html)

Susanne 2. Jun 2005 08:50


Anzeigen eines bestimmten Forms
 
Hallo,

ich habe eine ListBox auf meiner Hauptform und wähle dann einen Eintrag davon aus.
dann hole ich mir den gewählten index mit
Delphi-Quellcode:
index:= listbox1.ItemIndex;
und mit dem index hole ich mir den namen des eintrages
Delphi-Quellcode:
name:= listbox1.Items.ValueFromIndex[0];
und dann möchte ich die Form aufrufen, normalerweise ja mit
Delphi-Quellcode:
Form7.ShowModal;
Problem: Wie kann ich diesen Aufruf ausführen, wenn der Name der Form in der Variablen name steht? Und ich möchte auch noch den Wert einer der Variablen dieser Form setzen.

Hat da einer vielleicht eine Idee?

Sharky 2. Jun 2005 09:02

Re: Anzeigen eines bestimmten Forms
 
Hai Susanne,

kannst Du das ganze nicht einfach mit einem Case-Of Block lösen?
Oder ein Array of TForm.

nailor 2. Jun 2005 09:10

Re: Anzeigen eines bestimmten Forms
 
ich würde auch zu einem array of TForm raten. alternativ geht auch FindComponent(), aber das mag ich persönlich nicht so.

Susanne 2. Jun 2005 09:23

Re: Anzeigen eines bestimmten Forms
 
es ist nur so, dass ich dort verschiedene Listen einlese und anzeige, deshalb dachte ich, dass das so ganz gut wäre, wie ich mir das dachte und mir sonst auch nichts eingefallen ist, wie ich es besser machen könnte.

nailor 2. Jun 2005 09:24

Re: Anzeigen eines bestimmten Forms
 
wie gesagt, FindComponent() nutzen, damit kann man Objekte nach Namen suchen

marabu 2. Jun 2005 09:41

Re: Anzeigen eines bestimmten Forms
 
Hallo Susanne,

ohne Kommentar zu deinem Vorhaben hier eine technische Lösung für das Arbeiten mit Forms unter Benutzerkontrolle, wobei die Forms erst dann instanziiert werden, wenn sie gebraucht werden. Die automatische Instanziierung in den Projektoptionen abschalten und folgenden Code (angepasst an deine Verhältnisse) in die Form-Units einfügen:

Delphi-Quellcode:
...
initialization
  RegisterClass(TForm2);
finalization
  UnregisterClass(TForm2);
end.
Im Hauptformular (dem mit der Listbox) kannst du dann so vorgehen:
Delphi-Quellcode:
var
  fName: string;
  fClass: TFormClass;
  f: TForm;
begin
  fName := 'Form2';
  fClass := TFormClass(Classes.GetClass('T' + fName));
  if Assigned(fClass) then begin
    Application.CreateForm(fClass, f);
    f.ShowModal;
    f.Free;
  end else
    ShowMessage('oops!')
end;
Grüße vom marabu

barf00s 2. Jun 2005 09:48

Re: Anzeigen eines bestimmten Forms
 
Delphi-Quellcode:
uses
  Contnrs;

var
  xFormList: TObjectList;


begin
  xFormList := TObjectList.Create;
  xFormList.Add(myErstelltesForm);
  ...
end;


function GetForm(xList: TObjectList; const sFormName: string): TForm;
var
  iIndex: integer;

begin
  Result := nil;
  for iIndex := 0 to xList.Count - 1 do
    if TForm(xList[iIndex]).Name = sFormName then begin
      Result := TForm(xList[iIndex]);
      Exit;
    end;
end;

var
  xTermin: TTermin; // 

begin
  xTermin := GetForm(xFormulare, 'frmTermin');
  if Assigned(xTermin) then begin
    xTermin.Button := 'Fenster'; // button? nich button.caption?
    xTermin.ShowModal;
  end;
end;
oder sowas in der art :)

Susanne 2. Jun 2005 10:35

Re: Anzeigen eines bestimmten Forms
 
wie mache ich das denn mit FindComponent? Ich komme damit irgendwie nicht zurande.

Also ich mit auf meiner Form3 und habe dort die Listbox mit dem Inhalt und in index ist der gewählte eintrag aus der listbox.

Delphi-Quellcode:
case index of
   0: begin
         Stempel:= listbox1.Items.Strings[0];    //Stempel:= 'Termin'

         //TTermin(FindComponent(Stempel)).Button:= 'Fenster';
         //TTermin(FindComponent(Stempel)).ShowModal;
      end;
wenn ich nun TTermin angebe dann funktioniert das, aber das kann doch je nach ausgewählten Stempel variieren, wie kann ich das denn variable davor setzen? Oder steh ich nur irgendwie auf meiner Leitung?

Muetze1 2. Jun 2005 10:39

Re: Anzeigen eines bestimmten Forms
 
Moin!

1. FindComponent() ist eine Methode der Form und findet daher auch nur Elemente der Form und nicht andere Forms...
2. Schau dir mal TScreen an bzw. die globale Instanz Screen aus der Unit Forms an. Diese bietet dir als Eigenschaft Forms[] und FormCount...

MfG
Muetze1


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:55 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz