![]() |
create form wiederfinden problem
hallo nehmen wir folgendes an:
Code:
und mit dem in form2
var
myForm: TForm2; begin myForm := TForm2.Create(Self); myForm.Show; end;
Code:
der ganz obere code wird ausgelöst wenn ich auf einer listbox ein item anklicke.
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; 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 |
Re: create form wiederfinden problem
Zitat:
Delphi-Quellcode:
form2.Caption := 'Die Caption, die ich haben will';
Zitat:
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:
Falls nicht jedes Form einer eigenen Variablen zugeordnet werden soll, sollte form1, form2 u.s.w. durch ein dynamisches Array ersetzt werden.
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; |
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:
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.
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; 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 |
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; |
Re: create form wiederfinden problem
kannste damit was anfangen:
Delphi-Quellcode:
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.
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; |
Re: create form wiederfinden problem
Zitat:
Aber da er die Forms mit Application als Owner instantiiert, hat er diese Liste ja bereits zur Verfügung mit Application.Components. |
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? |
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 01:49 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz