![]() |
mehrfach erstelltes form differenzieren
ich versuche vergeblich (auch mit hilfe von dem forum hier und g00gle) seit einigen vielen stunden herauszufinden, wie ich ein chatfenster, das ein bestimmtes zur laufzeit erstelltese form ist, wiederfinden soll und wenns noch nicht erstellt wurde, dann nun neu erstellen kann.
ich hab schon ~20 varianten durchprobiert und nix geht. das ist die letzte version, in der ich die UIN in der caption drin hab und nun die versuche die caption der gefundenen msgforms mit meiner uin zu vergleichen.
Code:
procedure TMainForm.SendMessage1Click(Sender: TObject);
var i: Integer; // msgwin: TComponent; begin SetCapture(Userlist.Handle); if Userlist.Selected = nil then Exit; for i := 0 to application.ComponentCount-1 do begin if application.Components[i] is Tmsgform then begin if tmsgform(application.Components[i]).Caption = Userlist.Selected.SubItems[UL_INDEX_NICK] then begin tmsgform(application.Components[i]).Memo2.SetFocus; end else begin with TMsgForm.Create(Self) do begin FDest := Userlist.Selected.Caption; FName := Userlist.Selected.SubItems[UL_INDEX_NICK]; //Caption := Format('%s (%s)', [Userlist.Selected.SubItems[UL_INDEX_NICK], Userlist.Selected.Caption]); Caption := Userlist.Selected.SubItems[UL_INDEX_NICK]; Show; end; end; end; end; { schau ob ein solches fenster schon erstellt wurde wenn ja, dann lass dort weiter schreiben wenn nicht, dann erstelle neues um dort zu schreiben. } end; hat endlich wer irgendne funkende loesung? ich koennt ja HWND vom fenster fuer jeden user speichern und dann so irgenwie, wenn man mir erklaert wie das geht mit enumchildwindows() weiss ich nix anzufangen mit findcomponent hat nix gefunkt und die findwindow methode will ich vermeiden, wobei ichs mit der jetzt probieren werde, es zumindest versuchen werde zu probieren :P thanks fuer loesungsvorschlaege. |
Re: mehrfach erstelltes form differenzieren
Ich glaub ungefähr so:
Delphi-Quellcode:
Aber beim schließen des Hauptfensters treten lauter Fehler auf! Weiß jemand warum?
var
Form2s: array of TForm2; procedure TForm1.Button1Click(Sender: TObject); var i: longint; begin i := 1; if Length(Form2s) > 0 then for i := 0 to Length(Form2s) do begin if Form2s[i] <> nil then begin if Form2s[i].Caption = Edit1.Text then begin Form2s[i].Show; break; end; end; end; if i = Length(Form2s) + 1 then begin SetLength(Form2s, Length(Form2s) + 1); Form2s[Length(Form2s)] := TForm2.Create(Form1); Form2s[Length(Form2s)].Caption := Edit1.Text; Form2s[Length(Form2s)].Show; end; end; |
Re: mehrfach erstelltes form differenzieren
Erstmal würde ich zum beispiel die ganzen Chatfenster in einem Dynamischen Array verwalten. Wenn du dann im Array einen record machst, kannst du auch noch weitere Daten zu einem Form speichern.
Zum Beispiel:
Delphi-Quellcode:
Jetzt musst du nur noch vernünftig das Array pflegen, heisst beim erstellen eines Fensters da eintragen und beim Schliessen eines Fenster dort wieder rausschmeissen.
type
TChatWindowInfo = record Form: TForm; User: String; end; ChatWindows : Array of TChatWindowInfo; |
Re: mehrfach erstelltes form differenzieren
cool, die letzte methode klingt super, jetzt schua ich nur mal, wie das mit den arrays funkt, hab se noch nie gebraucht :P
|
Re: mehrfach erstelltes form differenzieren
also, wenn ich jetzt mein HWND vom fenster gespeichert hab
gibts ne funktion, mit der ich sowas machen kann? fenster(HWND).memo2.text := 'blah'; also, wenn ich den hwnd kenn. |
Re: mehrfach erstelltes form differenzieren
with TForm(Pointer(StrToInt(<saved_string>))) as Tmsgform do begin memo2.text := 'blah'; end;
es funkt!!! :) danke an alle helfenden. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:34 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