Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Problem mit Fenster Handle (https://www.delphipraxis.net/50500-problem-mit-fenster-handle.html)

-=IOI=- 26. Jul 2005 19:44


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:
User[i].Fenster := true;
User[i].Handle := FindWindow('#32770',PChar(User[i].Nick));
Wenn ich nun von selbigem User eine nachricht erhalte wird sie mir leider nicht angezeigt.
Die Procedure sieht wie folgt aus:

Delphi-Quellcode:
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;
Da ich die Nachrichten aber nur nicht bekomme, wenn das Fenster schon offen ist, muss der Fehler im unteren Teil nach dem else sein.

Kann mir jemand sagen, was da falsch ist?

SirThornberry 26. Jul 2005 20:46

Re: Problem mit Fenster Handle
 
irgendwas stimmt da nicht.
bei
Delphi-Quellcode:
FindWindow('#32770',PChar(User[i].Nick));
gibst du an das die Fensterklasse "#32770" heißt.
Und dann castest du das handle auf TForm
Delphi-Quellcode:
TForm(Pointer(User[i].Handle))
und das wieder zu TMessage.
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

Olli 27. Jul 2005 11:33

Re: Problem mit Fenster Handle
 
Zitat:

Zitat von SirThornberry
gibst du an das die Fensterklasse "#32770" heißt.

Da ist nix dran auszusetzen: ms-help://MS.PSDK.1033/winui/winui/windowsuserinterface/windowing/windowclasses/aboutwindow.htm
  • ComboLBox The class for the list box contained in a combo box.
  • DDEMLEvent Windows NT/Windows 2000/Windows XP: The class for Dynamic Data Exchange Management Library (DDEML) events.
  • Message Windows 2000/Windows XP: The class for a message-only window.
  • #32768 The class for a menu.
  • #32769 The class for the desktop window.
  • #32770 The class for a dialog box.
  • #32771 The class for the task switch window.
  • #32772 Windows NT/Windows 2000/Windows XP: The class for icon titles.
Zitat:

Zitat von SirThornberry
Und dann castest du das handle auf TForm

Das ist allerdings Quark, da hast du vollkommen recht.

Übrigens: Fensterhandles gibt's in Win32. Gehört also auch in diese Sparte.

SirThornberry 27. Jul 2005 18:33

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.

Olli 27. Jul 2005 20:56

Re: Problem mit Fenster Handle
 
Zitat:

Zitat von SirThornberry
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.

Okay, dann sorry. Ich dachte, daß du das nicht wußtest. Klang so für mich.

@-=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 01:28 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