Entwickler-Ecke

Windows API - OpenDialog subclassen + Handle von Dateiliste


Rool - Mo 19.05.03 17:38
Titel: OpenDialog subclassen + Handle von Dateiliste
Hab jetzt den TOpenDialog 'gesubclasst' und brauch jetzt in der WndProc von Dem Dialog das Handle von der Liste, wo man die Dateien auswählt. Wie bekomme ich das?
Oder gibt es in der WndProc eine Message, wenn der Benutzer mit der rehten Maustaste auf die Liste kickt?


Pascal - Di 20.05.03 22:04

Ich weiß nicht ob ich das richtig verstanden hab', aber das Handle kann man mit der 2.procedure über den Classname und den mit der ersteren procedure herausfinden.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
procedure Tform1.ShowHwndAndClassName(CrPos: TPoint);
var
  hWnd: THandle;
  aName: array [0..255of Char;
begin
  hWnd := WindowFromPoint(CrPos);
  Label1.Caption := 'Handle :  ' + IntToStr(hWnd);

  if Boolean(GetClassName(hWnd, aName, 256)) then
    Label2.Caption := 'ClassName :  ' + string(aName)
  else
Label2.Caption := 'ClassName :  not found';
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Handle: THandle;
begin
  Handle := FindWindow(PChar('syslistview32'),nil);
  end;

In diesem Fall ist als classname 'syslistview32', was bei mir der Klassenname der Auswahlliste ist


Rool - Mi 21.05.03 13:49
Titel: ..
da kann man aber jeden listview finden, der gerade exisitiert...

Hab rausgefunden, dass man mit:


Quelltext
1:
2:
wndDlg := GetParent(Handle); // handle vom dialog.
wndCtrl := GetDlgItem(wndDlg,lst1);  //handle von der Liste

=> Dabei ist lst1 eine in der Unit 'Dlgs' definierte Konstante.

Hab jetzt aber das Problem, dass ich nicht weiss, wann ich dieses Handle abfragen soll. Wenn ich das in
WM_INITDIALOG
mache, kann ich z. B. den Listview verschieben etc. Später aber, wenn ich z. B. darauf zeichnen will, hat das Listview ein anderes Handle. Das ist etwas, was ich überhaupt nicht verstehe!


Pascal - Mi 21.05.03 15:10

Da kenne ich mich leider nicht aus.
Es sei denn der Dialog ist zufällig im Vordergrund und man kennt seine Position. dann könnte man ja einfach mit Windowfrompoint(point(x,y)) arbeiten. Aber das ist wahrscheinlich nicht das was du brauchst


Rool - Do 22.05.03 17:02
Titel: ..
würde natürlich auch gehen, aber das geht ja genauso wenig beim laden des dialogs