AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi wm_gettext gibt MANCHMAL(!) leeren buffer zurück...*heul*
Thema durchsuchen
Ansicht
Themen-Optionen

wm_gettext gibt MANCHMAL(!) leeren buffer zurück...*heul*

Ein Thema von prinz_inzide · begonnen am 28. Jan 2005 · letzter Beitrag vom 10. Feb 2005
Antwort Antwort
prinz_inzide

Registriert seit: 24. Jan 2005
64 Beiträge
 
#1

wm_gettext gibt MANCHMAL(!) leeren buffer zurück...*heul*

  Alt 28. Jan 2005, 07:00
hi all!

ich hab jetzt mein programm soweit,dass es per timer immer dafür sorgt, dass alle icq-fenster (vorübergehend) in einer listbox dargestellt werden, um überrpüfen zu können ob er auch alle fenster findet.. macht er! klappt perfekt.

so, jetzt kommts:
dann hab ich nen 2. timer, der immer das hier macht:
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
var
i:integer;
begin
if (form1.ListBox1.Items.Count>0) then
begin
  for i:=0 to form1.ListBox1.Items.Count do
  begin
    ein_fenster_checken(form1.ListBox1.Items.strings[i]);
  end;
end;
end;
(hab die schleife auch schon mit "for i:=0 to form1.ListBox1.Items.Count-1 do" versucht, bring aber das selbe ergebnis und zwar einfunktionierendes, hab mal zu testzwecken eine msgbox in die schleife eingebaut, hat alle fenster angezeigt...

Delphi-Quellcode:
function ein_fenster_checken(name:string):string;
var
fenster,memo: hwnd;
buffer: array[0..1024] of char;
i,position: integer;
eingetragen:boolean;
begin
fenster:=findwindow(nil,pchar(name));
if (fenster<>0) then
begin
  memo:= getdlgitem(fenster, 7001); //7001 ist das feld wo der nachrichtenverlauf drin steht
  if (memo<>0) then
  begin
    SendMessage(memo, wm_gettext, sizeof(buffer), Integer(@buffer));
    showmessage(string(buffer));// hab ich nur zu testzwecken drin
    if (string(buffer)<>'') then
    begin
      for i:=0 to high(uin) do
      begin
        if (uin[i].name=name) then //wenn schon vorhanden im array
        begin
          showmessage('user betreits angelegt');
        end;
        if (eingetragen=false) then
        begin
          showmessage('user wurde neu angelegt');
          setlength(uin,length(uin)+1);
          uin[high(uin)].name:=name;
        end;
      end;
    end;
  end;
end else
form1.ListBox1.Items.Delete(form1.ListBox1.Items.IndexOf(name));
das problem ist die zeile oben, wo er den buffer anzeigen soll:
wenn ich einen user im icq anklicke sodass sein fenster aufgeht und er z.b. eine N/A-message gesetzt hat, welche durch icq5 beim öffnen des user-fensters sofort angezeigt wird, bekomme ich die auch problemlos angezeigt (in meiner showmessage) anders, wenn ich mit ihm gechattet habe, das chat fenster von ihm geschlossen habe un des dann wieder auf mache (text steht dann ja noch drin) kommt eine leere msgbox!! wenn ich dem jenigen dann schreibe bekomm (weilsja per timer immer wieder gemacht wird) den kompletten nachrichtenverlauf...

könnt ihr euch das erklären??

bitte umn hilfe!
  Mit Zitat antworten Zitat
Assarbad
(Gast)

n/a Beiträge
 
#2

Re: wm_gettext gibt MANCHMAL(!) leeren buffer zurück...*heul

  Alt 10. Feb 2005, 10:54
Fenster sind durch keinerlei Konvention verpflichtet den Windows-Mechanismus zu benutzen um Text anzuzeigen. Beispiel TLabel.
  Mit Zitat antworten Zitat
Benutzerbild von mael
mael

Registriert seit: 13. Jan 2005
391 Beiträge
 
Delphi XE3 Professional
 
#3

Re: wm_gettext gibt MANCHMAL(!) leeren buffer zurück...*heul

  Alt 10. Feb 2005, 11:39
Zitat von Assarbad:
Fenster sind durch keinerlei Konvention verpflichtet den Windows-Mechanismus zu benutzen um Text anzuzeigen. Beispiel TLabel.
Zumal TLabel gar kein Fenster ist


Hast Du schon geprüft ob memo immer ein gültiges Handle ist? Eventuell wird durch das Verstecken/Anzeigen das Handle verändert womöglich sogar die Control-ID(7001).
  Mit Zitat antworten Zitat
Assarbad
(Gast)

n/a Beiträge
 
#4

Re: wm_gettext gibt MANCHMAL(!) leeren buffer zurück...*heul

  Alt 10. Feb 2005, 12:23
Zitat von mael:
Zitat von Assarbad:
Fenster sind durch keinerlei Konvention verpflichtet den Windows-Mechanismus zu benutzen um Text anzuzeigen. Beispiel TLabel.
Zumal TLabel gar kein Fenster ist
Das sollte es aussagen. Wenn du über ein TLabel hoverst, bekommst du nur das Handle des enthaltenden Fensters, da TLabels nur durch OnPaint() et. al. gezeichnet werden.

Zitat von mael:
Hast Du schon geprüft ob memo immer ein gültiges Handle ist? Eventuell wird durch das Verstecken/Anzeigen das Handle verändert womöglich sogar die Control-ID(7001).
Dann wäre es aber Schließen vs. Neuerstellen. Ich kann zumindest sagen, daß ein normales Verstecken hier nix ändert.
  Mit Zitat antworten Zitat
Antwort Antwort


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 18:38 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