Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   ChildWindow nicht gefunden? Wieso? (https://www.delphipraxis.net/146400-childwindow-nicht-gefunden-wieso.html)

SimStar001 19. Jan 2010 09:10


ChildWindow nicht gefunden? Wieso?
 
Hallo, ich habe ein kleines Problem,
und zwar kann ich das Handle für eine ListBox nicht finden.

Hier mal mein Code:

Delphi-Quellcode:
Function Find_IvAc_WindowHandle : HWND;
Var
  NextHandle: HWND;
  WinTitle, WinClass: Array[0..255] of Char;
  Const ClassName = 'Afx:00400000:0';
        WindowTitle = 'IvAc';
begin
  Result := 0;
  NextHandle := GetWindow(Application.Handle, GW_HWNDFIRST); // erstes Fenster ermitteln
  while NextHandle > 0 do // falls Fenster gefunden
  begin
    // Fenster Titel, Klassennamen ermitteln
    GetWindowText(NextHandle, WinTitle, SizeOf(WinTitle));
    GetClassName(NextHandle, WinClass, SizeOf(WinClass));
    // Überprüfung, ob Anfang der Strings übereinstimmen

    if (Copy(WinTitle, 1, Length(WindowTitle)) = WindowTitle) and
    (Copy(WinClass, 1, Length(ClassName)) = ClassName) then
    begin
      // Fenster gefunden, abbrechen
      Result := NextHandle;
      Break;
    end
    else
      NextHandle := GetWindow(NextHandle, GW_HWNDNEXT); // nächstes Fenster ermitteln
  end;
end;


Function Find_IvAc_HandoffBox(IvAc_Handle :HWND):HWND;
var wndChild : HWND;
begin
  wndChild := 0;
  if IvAc_Handle > 0 then
    wndChild := FindWindowEx(ivAc_Handle, 0, 'ListBox', nil);
  result := wndChild;
end;

Ich bekomme nun bei der Funktion Find_IvAc_HandoffBox immer null als ergebnis zurück!
Wieso das? Mit WinSpy wurde das Handle ja auch ermittelt.
Was mache cih falsch?

LG Marco!

AnyKey 19. Jan 2010 10:14

Re: ChildWindow nicht gefunden? Wieso?
 
Hi,

ich weiß jetzt nicht ob das was ich dir sage das ist was du suchst, aber normalerweise kommst du an eine Komponente die auf einem Child liegt so ran:

Delphi-Quellcode:
var Child : TChild; //-> TChild = T'Name des Childs'
begin
//... was du sonst noch so machst
// Main = Name des Main Forms
// Das if assigned prüft ob das gerade gezeigte Child den Focus hat, also ob es gerade angewählt ist.
  if Assigned(Main.ActiveMDIChild) then
  begin
    Child := Main.ActiveMDIChild as TChild;
    Child.ListBox1.Items.Add('beispiel');
  end;
end;
So solltest du an deine Listbox ran kommen, ob das jetzt das ist was du willst weiß ich wie gesagt nicht. Du kannst das auch so umschreiben dass du alle Childs durchgehen kannst (denk ich zumindest) aber für ein gerade angezeigtes funktioniert das so.

Gruß
AnyKey

SimStar001 19. Jan 2010 10:30

Re: ChildWindow nicht gefunden? Wieso?
 
Also ich habs jetzt einfach mal so gemacht...
Delphi-Quellcode:
function Get_HandoffBox_Handle : HWND;
Var
  NextHandle: HWND;
  WinTitle, WinClass: Array[0..255] of Char;
  wndChild : HWND;
  Const ClassName = '#32770';
        WindowTitle = '';
begin
  Result := 0;
  NextHandle := GetWindow(Application.Handle, GW_HWNDFIRST); // erstes Fenster ermitteln
  while NextHandle > 0 do // falls Fenster gefunden
  begin
    // Fenster Titel, Klassennamen ermitteln
    GetWindowText(NextHandle, WinTitle, SizeOf(WinTitle));
    GetClassName(NextHandle, WinClass, SizeOf(WinClass));
    // Überprüfung, ob Anfang der Strings übereinstimmen

    if (Copy(WinTitle, 1, Length(WindowTitle)) = WindowTitle) and
    (Copy(WinClass, 1, Length(ClassName)) = ClassName) then
    begin
      // Fenster gefunden, abbrechen
      Result := NextHandle;
      // ermitteln ob Listbox und Button
      wndChild := FindWindowEx(Result, 0, 'ListBox', nil);
      if wndChild <> 0 then
        begin
        Result := wndChild;
        break;
        end;

      NextHandle := GetWindow(NextHandle, GW_HWNDNEXT);
    end
    else
      NextHandle := GetWindow(NextHandle, GW_HWNDNEXT); // nächstes Fenster ermitteln
  end;
end;

Es funktioniert auch, setzt allerdings vorraus, dass das fenster auf dem die Box liegt vorher geöffnet wurde...

AnyKey 19. Jan 2010 10:42

Re: ChildWindow nicht gefunden? Wieso?
 
Ja das sagte ich ja ;)

Das Child muss schon existieren, geöffnet und aktiv sein.

Hoffe das hat dir trotzdem weitergeholfen :-D

Gruß
AnyKey


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