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 create form wiederfinden problem (https://www.delphipraxis.net/60645-create-form-wiederfinden-problem.html)

G G 10. Jan 2006 14:58


create form wiederfinden problem
 
hallo nehmen wir folgendes an:


Code:
var      
  myForm: TForm2;      
begin      
  myForm := TForm2.Create(Self);      

   myForm.Show;      
end;
und mit dem in form2


Code:
type      
  tform2 = class(TForm)...      
  .      
  .      
  protected      
     procedure CreateParams(var Params: TCreateParams); override;      
  end;      


implementation      

procedure TForm2.CreateParams(var Params: TCreateParams);      
begin      
  inherited CreateParams(Params);      
  Params.Style := (Params.Style or WS_THICKFRAME);      
  Params.WndParent := GetDesktopWindow;      
end;
der ganz obere code wird ausgelöst wenn ich auf einer listbox ein item anklicke.
So, so weit so schön, aber nun will ich dass ich durch Params.caption den titel des jejeiligen fenster bestimmen kann. Da will ich abe rnun drin stehen haben was ich in der listbox angeklickt habe, gibts da irgdend ne schnelle methode dafür?

und nun meine 2te frage.
wenn nun jedes fenster sienen eigenen caption hat, wie kann ich nun schauen ob ein fenster schon offen ist oder ob dieses nochnich erstellt wurde, und falls das fenster shcon offen ist genau dieses dnan wieder nach oben bringen. ICh hab da keien ahnung wie man so einzelne fenster irgdnwie verwalten kann.Wenn mir da jemand code zeigt oder so wär ich sehr dankbar.

jede hilfe bringt mich wieter auch wnens nicht gleich zu allen fragen ist.Vielen vielen dank euch

tomsel 10. Jan 2006 16:06

Re: create form wiederfinden problem
 
Zitat:

So, so weit so schön, aber nun will ich dass ich durch Params.caption den titel des jejeiligen fenster bestimmen kann. Da will ich abe rnun drin stehen haben was ich in der listbox angeklickt habe, gibts da irgdend ne schnelle methode dafür?
Delphi-Quellcode:
form2.Caption := 'Die Caption, die ich haben will';

Zitat:

wenn nun jedes fenster sienen eigenen caption hat, wie kann ich nun schauen ob ein fenster schon offen ist oder ob dieses nochnich erstellt wurde, und falls das fenster shcon offen ist genau dieses dnan wieder nach oben bringen.
Initialisiere alle deine form1, form2, .., formX - Variablen zu Beginn mit NIL.
Wenn eines der Forms wieder freigegeben wurde, setze die entsprechende Variable ebenfalls wieder auf NIL.

Dann hast du immer die Kontrolle über die erzeugten und nicht erzeugten Forms, indem du die Variablen auf NIL überprüfst. Beispiel:

Delphi-Quellcode:
begin
...
form1 := nil;
form2 := nil;
...
if form1 = nil then begin
  form1 := tform1.Create(Application);
  form1.Caption := listbox1.items[listbox1.itemindex]
end else
  form1.BringToFront;
...
end;
Falls nicht jedes Form einer eigenen Variablen zugeordnet werden soll, sollte form1, form2 u.s.w. durch ein dynamisches Array ersetzt werden.

G G 10. Jan 2006 20:52

Re: create form wiederfinden problem
 
ah dien code hat mcih in ein paar sahcen sehr weitergebracht, aber ich glaub mein hauptproblem hab ich vll ncih so genau erklärt. Also es handelt sich nich so wie du denkst um mehrere forms1,2,3,4 usw sondern nur um ein mainform form1 und ein 2tes form form2 welches öfters geöffnet wird. Dies sieht im moment so aus:


Delphi-Quellcode:
function tform1.openwindow(id: string):string;
   var
    myForm: TForm2;
begin
           myForm:= TForm2.Create(application);

   myForm.Show;
        // showmessage(  listbox1.items[listbox1.itemindex]) ;
          myform.Caption := listbox1.items[listbox1.itemindex];
myform.Memo1.Lines.Add('hallo'+listbox1.items[listbox1.itemindex]);

  end;
nun kann z.B annehmen dass jedes caption nur einmal vorkommt. Mithilfe von diesem möchte ich halt chekcen ob dass fenster schon exestiert, z.B alle "kopien" von tform2 durchchecken und schauen ob irgdnwo caption = 'blahblahblah' ist.

also wär mein wunsch , irgdnwie es möglcih zu machen, alle jemals erstellten und ncoh offenen "myform" durchzucheken?
nur ich seh da keienn weg dass die nummeriesiert sind doer so, und mti nem handle oder so komm ich grad auch ncih viel weiter.

danke

sniper_w 10. Jan 2006 21:16

Re: create form wiederfinden problem
 
Mit einem TObjectList Objekt kannst du alle TForm2 "merken" und später auch durchlaufen und deren Caption´s überprüfen. So in etwa:
Delphi-Quellcode:
uses ....,Contnrs ;
//....
  private
    { Private declarations }
  public
    { Public declarations }
    MyFormList: TObjectList;
    function FormExists( const myCaption: string):boolean;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  NewForm: TForm1;
begin
  NewForm := TForm1.Create( Application );
  MyFormList.Add( NewForm );
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  MyFormList := TObjectList.Create( True );
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  MyFormList.Free;
end;

function TForm1.FormExists(const myCaption: string): boolean;
var
  i:Integer;
begin
  Result := False;
  for i:=0 to MyFormList.Count-1 do
  begin
    if myCaption = TForm1(MyFormList.Items[i]).Caption then
    begin
      Result := True;
      Exit;
    end;
  end;
end;

tomsel 10. Jan 2006 21:21

Re: create form wiederfinden problem
 
kannste damit was anfangen:

Delphi-Quellcode:
function TForm1.SucheCaption(aCaption:string):tform;
var i:integer;
begin
        result := nil;
   for i:=0 to pred(application.Componentcount) do
      if application.Components[i] is tform2 then
         if tform(application.Components[i]).Caption = aCaption then
                            result := tform(application.Components[i])
end;
Die funktion sollte ein ergebnis <> nil liefern, wenn ein Form vom Typ tform2 mit der gesuchten Caption existiert. Das Ergebnis ist dann der Verweis auf das gefundene Fenster.

tomsel 10. Jan 2006 21:25

Re: create form wiederfinden problem
 
Zitat:

Mit einem TObjectList Objekt kannst du alle TForm2 "merken"
Ja, oder auch so.
Aber da er die Forms mit Application als Owner instantiiert, hat er diese Liste ja bereits zur Verfügung mit Application.Components.

tomsel 10. Jan 2006 21:28

Re: create form wiederfinden problem
 
@gg
So viele Buchstabendreher auf einem Haufen hab ich ja selbst noch nicht hingekriegt :mrgreen:
Was ist los? Zu tief in's Glas geguckt?

tomsel 10. Jan 2006 21:42

Re: create form wiederfinden problem
 
würde nicht auch dieses gehen:

Delphi-Quellcode:
function tform1.openwindow(id: string):string;
var
  myForm: TForm2;
begin
  if listbox1.Objects[listbox1.itemindex] = nil then begin

    myForm:= TForm2.Create(application);
    myForm.Show;
    myform.Caption := listbox1.items[listbox1.itemindex];

    listbox1.Objects[listbox1.itemindex] := tobject(myform); // <------------------------!!

    myform.Memo1.Lines.Add('hallo'+listbox1.items[listbox1.itemindex]);

  end else begin

    myform := tform2(listbox1.Objects[listbox1.itemindex]);
    myform.bringtofront;

  end;

end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:12 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