![]() |
Problem mit Fenster Handle
Hab ein kleines Problem beim proggen eines Chat Clients.
Mein Programm ist so aufgebaut, dass ich in einem array Daten über die einzelnen User speichere, unter anderem auch, ob bereits ein Chat Fenster für diesen User offen ist. Wenn ich z.B. ein Fenster öffne, speicher ich das so ab:
Delphi-Quellcode:
Wenn ich nun von selbigem User eine nachricht erhalte wird sie mir leider nicht angezeigt.
User[i].Fenster := true;
User[i].Handle := FindWindow('#32770',PChar(User[i].Nick)); Die Procedure sieht wie folgt aus:
Delphi-Quellcode:
Da ich die Nachrichten aber nur nicht bekomme, wenn das Fenster schon offen ist, muss der Fehler im unteren Teil nach dem else sein.
procedure TForm1.ICQClient1MessageRecv(Sender: TObject; Msg, UIN: String);
var Min1, zeit: String; DateTime: TDateTime; Hour, Min, Sec, Msec, i: Word; begin DateTime := now; DecodeTime(DateTime, Hour, Min, Sec, Msec); Min1 := IntToStr(Min); if Length(Min1) = 1 then Min1 := '0' + Min1; zeit := IntToStr(Hour)+':'+Min1; for i := 1 to LastUser do begin if User[i].Nummer = StrToInt(UIN) then begin if User[i].Fenster = false then begin with TMessages.Create(nil) do begin Self.IconList.GetIcon(User[i].Status, Image1.Picture.Icon); Self.AdvIconList.GetIcon(0, Icon); Caption := User[i].Nick; Nummer.Text := UIN; Nick.Text := User[i].Nick; Text.Font.Color := clred; Text.Font.Size := 10; Text.Lines.Add(User[i].Nick+' ('+zeit+'):'); Text.Font.Color := clblack; Text.Font.Size := 8; Text.Lines.Add(Msg); Show; User[i].Fenster := true; User[i].Handle := FindWindow('#32770',PChar(User[i].Nick)); end; end else begin with TForm(Pointer(User[i].Handle)) as TMessages do begin Text.Font.Color := clred; Text.Font.Size := 10; Text.Lines.Add(User[i].Nick+' ('+zeit+'):'); Text.Font.Color := clblack; Text.Font.Size := 8; Text.Lines.Add(Msg); Show; end; end; Sound.FileName := ProgDir+'\Message.wav'; Sound.Open; Sound.Play; break; end; end; end; Kann mir jemand sagen, was da falsch ist? |
Re: Problem mit Fenster Handle
irgendwas stimmt da nicht.
bei
Delphi-Quellcode:
gibst du an das die Fensterklasse "#32770" heißt.
FindWindow('#32770',PChar(User[i].Nick));
Und dann castest du das handle auf TForm
Delphi-Quellcode:
und das wieder zu TMessage.
TForm(Pointer(User[i].Handle))
Meinst du nicht das du da irgendwas verhaust? Warum speicherst du anstelle des Handles nicht einfach die Instanz des Fensters, dann brauchst du es später nicht suchen |
Re: Problem mit Fenster Handle
Zitat:
Zitat:
Übrigens: Fensterhandles gibt's in Win32. Gehört also auch in diese Sparte. |
Re: Problem mit Fenster Handle
das der Classname "#32770" sein kann weiß ich. Das ganze hing mit dem folgenden zusammen. Mir war eben unklar wie der Classname "#32770" sein kann wenn von TForm abgeleitet ist, dann müsste der Classname ja TForm sein bzw der Name der abgeleiteten Klasse.
|
Re: Problem mit Fenster Handle
Zitat:
@-=IOI=-: Formuliere doch bitte mal ein Ziel und dann sagst du uns erst "was du hast". Es interessiert nicht en detail was du schon gemacht hast, sondern die Zielstellung interessiert. Erst dann können wir zu dem Codeschnipsel auch einen Kontext "erahnen"! Die Zielstellung der Funktion, wohlgemerkt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:17 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