AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Problem beim Fenster finden!

Ein Thema von -=IOI=- · begonnen am 11. Jul 2005 · letzter Beitrag vom 11. Jul 2005
Antwort Antwort
-=IOI=-

Registriert seit: 5. Mär 2005
54 Beiträge
 
#1

Problem beim Fenster finden!

  Alt 11. Jul 2005, 21:59
Hallo alle zusammen.

Bin gerade dabei ein ICQ-Clone zu proggen und bin nun auf folgendes Problem gestoßen:

Mit folgender Prozedur öffne ich ein neues Nachrichtenfenster, wenn ich eine Nachricht erhalte:

Delphi-Quellcode:
procedure TForm1.ICQClient1MessageRecv(Sender: TObject; Msg, UIN: String);
var
  i: Integer;
  ListItem: TListItem;
  FNick, min1: String;
  DateTime: TDateTime;
  Hour, Min, Sec, Msec: Word;
begin
  DateTime := now;
  DecodeTime(DateTime, Hour, Min, Sec, Msec);
  Min1 := IntToStr(Min);
  if Length(Min1) = 1 then Min1 := '0' + Min1;
  with TMessage.Create(nil) do
  begin
    FNick := UIN;
    if ListView1.Items.Count > 0 then
      for i := 0 to ListView1.Items.Count - 1 do
        if ListView1.Items.Item[i].Caption = UIN then
        begin
          ListItem := ListView1.Items.Item[i];
          Self.IconList.GetIcon(StrToInt(ListItem.SubItems[LV_INDEX_STATUS]), Image1.Picture.Icon);
        end;
    Self.AdvIconList.GetIcon(0, Self.Icon);
    if ListView1.Items.Count > 0 then
      for i := 0 to ListView1.Items.Count - 1 do
        if ListView1.Items.Item[i].Caption = UIN then
        begin
          ListItem := ListView1.Items.Item[i];
          FNick := ListItem.SubItems[LV_INDEX_NICK]; //Nick
          Break;
        end;
    Caption := FNick;
    Nick.Text := FNick;
    Nummer.Text := UIN;
    Text.Font.Color := clred;
    Text.Font.Size := 10;
    Text.Lines.Add(FNick+' ('+IntToStr(Hour)+':'+min1+'):');
    Text.Font.Color := clblack;
    Text.Font.Size := 8;
    Text.Lines.Add(Msg);
    Text.Lines.Add('');
    Show;
  end;
end;
Nun kommt es ja aber nicht selten vor, dass man von einem User bereits eine Nachricht erhalten hat und somit schon ein Fenster offen ist.

Wie kann ich nun also herausfinden, ob von dem User schon ein Fenster offen ist (gebe jedem Fenster den Nickname des Users als Titel)? Und falls ja, wie kann ich dann eine neu erhaltene Nachricht an das Memo mit dem Namen Text des geöffneten Fenster weiterleiten (die Nachricht liegt in einer variablen vom Typ String).

PS: Jedes Fenster hat 2 Memo-Felder, müsste also irgendwie über den Namen laufen.

Gruß Flo
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Problem beim Fenster finden!

  Alt 11. Jul 2005, 22:04
speicher einfach alle fenster die du öffnest in einer Liste. Und wenn du ein Fenster öffnest kannst du ja dem TForm auch ein Property geben welches festhält von welchem User das Fenster ist. Und wenn da wieder eine message kommst brauchst du nur die Liste durchgehen und überprüfst ob in der Liste schon ein Fenster von UserX ist.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#3

Re: Problem beim Fenster finden!

  Alt 11. Jul 2005, 22:07
Mit folgendem Code kann man (zumindest bei mir) das ICQ-Messagefenster finden:
Delphi-Quellcode:
var
  wnd: HWND;
begin
  wnd := FindWindow('#32770','');
  if wnd <> 0 then
  begin
   // Fenster vorhanden
  end;
end.
Und das Memo für die Nachricht entsprechend so:
Delphi-Quellcode:
var
  wnd: HWND;
begin
  wnd := FindWindow('#32770','');
  wnd := FindWindowEx(wnd, 0, 'RichEdit20A', nil);
  if wnd <> 0 then
  begin
   // Femster vorhanden
  end;
end.
Generated by WinSpy

aso - du öffnest die fenster selber und willst wissen, welches du schon offen hast ... dann einfach eine property UIN oder so, und beim erhalten alle vorhandenen durchgehen und testen, ggf. Nachricht einfügen. Und wenn keines da ist, einfach ein neues erzeugen - Also siehe SirT

Ich bin einfach zu langsam

Und dann ist der Code auch noch falsch

Ich sollte ins Bett ...
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Problem beim Fenster finden!

  Alt 11. Jul 2005, 22:10
wnd := FindWindow('#32770',''); Damit findest du alle Fenster die mit dem Ressourceneditir von VC erstellt wurden, da sie standardmäßig die Fensterklasse #32770 bekommen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
-=IOI=-

Registriert seit: 5. Mär 2005
54 Beiträge
 
#5

Re: Problem beim Fenster finden!

  Alt 11. Jul 2005, 22:16
Ok, das mit dem Fenster finden werde ich dank der Tips hier hinbekommen.

Nur wie mache ich es dann, dass er mir die Nachricht bei bereits geöffnetem Fenster in das Memo Feld schreibt?
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:32 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