Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi EnumChildWindows gibt unterschiedliche Reihenfolge zurück (https://www.delphipraxis.net/79207-enumchildwindows-gibt-unterschiedliche-reihenfolge-zurueck.html)

hitzi 18. Okt 2006 08:22


EnumChildWindows gibt unterschiedliche Reihenfolge zurück
 
Hallo,

ich hab ein kleines Programm geschrieben, was das Rendern mehrerer Tile mit Terragen vereinfacht. Es simuliert dabei einfach die Usereingaben. Das funktioniert auch einwandfrei, nur ein User hat damit Probleme. Bei ihm funktionieren zwei Renderdurchgänge, doch beim dritten werden plötzlich - ohne das Terragen geschlossen wurde - teilweise neue Handles für die Controls und noch schlimmer eine andere Reihenfolge der Controls von EnumChildWindows zurückgegeben.

Syntax: Handly; Classe; ControlID

Beispiele - siehe weiter unten in einem weiteren Beitrag von mir.

Das Windowhandle vom Hauptfenster ist in beiden Fällen gleich. Wieso wird eine andere Reihenfolge und neue Handles zurückgegeben, ohne dass das Programm geschlossen wurde? Bei anderen Usern und auch bei mir tritt dieser Effekt nicht auf und es werden bei jedem Durchlauf immer die gleichen Handles und die gleiche Reihenfolge zurückgegeben.

Hier noch die die EnumProc:
Delphi-Quellcode:
function EnumProc(wnd: HWND; Lines: TStrings): BOOL; stdcall;
var buf : array[0..255] of char;
begin
  Result := True;
  GetClassName(wnd, buf, SizeOf(buf) - 1);
  Lines.Add(Format('%d,%s,%d', [wnd, buf, GetDlgCtrlID(wnd)])); //Lines ist eine TStringlist
end;
Danke schonmal ...

kolbaschedder 18. Okt 2006 08:32

Re: EnumChildWindows gibt unterschiedliche Reihenfolge zurüc
 
Als erstes würde ich mal die Versionen von Terragen und dem Betriebssystem miteinander vergleichen. Vielleicht hat der betroffene User ne andere terragenversion. Möglicherweise hat er auch ein Multiprozessorsystem (oder nen Core Duo Prozessor). Falls Terragen Multithreaded programmiert ist, instanziiert es vielleicht ein zweites Fenster.

MfG

Kolbaschedder

hitzi 18. Okt 2006 08:36

Re: EnumChildWindows gibt unterschiedliche Reihenfolge zurüc
 
Aber dann müßte es doch von Anfang an nicht funktionieren, aber zwei Renderdurchgänge laufen immer ohne Probleme. Die oben gezeigten Logs sind vom Problemrechner.
Kann ein anderes Programm(Virus/Rootkit) die Handles/Reihenfolge ändern?

kolbaschedder 18. Okt 2006 08:54

Re: EnumChildWindows gibt unterschiedliche Reihenfolge zurüc
 
bei den ersten beiden Durchgängen hast du das hier :

131736; ToolbarWndClass; 0;
131724; ToolbarWindow32; 0;
131732; MDIClient; 3244;
66680; ThunderRT6FormDC; 32769;

beim dritten Durchgang kommt dann :

131736; ToolbarWndClass; 0;
131724; ToolbarWindow32; 0;
131732; MDIClient; 3244;
...
Hier einige Zeilen
...
66680; ThunderRT6FormDC; 32769;

bei der msdn findet sich folgendes :

Zitat:

Remarks

If a child window has created child windows of its own, EnumChildWindows enumerates those windows as well.

A child window that is moved or repositioned in the Z order during the enumeration process will be properly enumerated. The function does not enumerate a child window that is destroyed before being enumerated or that is created during the enumeration process.
sieht also so aus, als ob ein neues Childwindow erzeugt wird. das alte ist aber noch da, nur eben weiter hinten in deiner Liste

hitzi 18. Okt 2006 09:13

Re: EnumChildWindows gibt unterschiedliche Reihenfolge zurüc
 
Hey, du hast Recht. Wieso ist mir das nicht aufgefallen?
Also muss die Ursache noch etwas weiter vorn im Durchlauf liegen, wo evt. ein Fenster nicht richtig geschlossen wird.

Danke! :)

kolbaschedder 18. Okt 2006 09:16

Re: EnumChildWindows gibt unterschiedliche Reihenfolge zurüc
 
Ja so geht's manchmal :-))

Christian Seehase 18. Okt 2006 17:44

Re: EnumChildWindows gibt unterschiedliche Reihenfolge zurüc
 
Moin Hitzi,

hänge Deine Logs bitte mal als Datei(en) an.
Danke.

hitzi 18. Okt 2006 18:04

Re: EnumChildWindows gibt unterschiedliche Reihenfolge zurüc
 
Liste der Anhänge anzeigen (Anzahl: 2)
Wieso?

Aber egal ... siehe Anhang :)

Christian Seehase 18. Okt 2006 19:35

Re: EnumChildWindows gibt unterschiedliche Reihenfolge zurüc
 
Moin Hitzi,

die waren als Ersatz für diese überlangen Beiträge gedacht..., was Du per editieren bewerkstelligen kannst ;-)

hitzi 18. Okt 2006 20:49

Re: EnumChildWindows gibt unterschiedliche Reihenfolge zurüc
 
Die Überlänge ist mir nicht aufgefallen, da bei mir die Codesegmente immer eingeklappt sind.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:42 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