![]() |
OpenFileDialog subclassing
Ich subclasse den Openfiledialog.
Wenn ich nun den Ordner bzw. Pfad ändere addieren sich die tooltips_class32 diese werden dann nach dem schließen des Dialogs nicht mehr entfernt. Es liegt daran weil ich die Message DESTROY nicht weiterleite. Das Problem.
Delphi-Quellcode:
Beim beenden wird die Subclass beendet wenn ich nun die Message weiterlaufen lasse also
WM_DESTROY:
begin SysListUnSubClass(WinHandle); // Muss beendet werden sbHookedScroolBar := nil; hSysList := 0; Result := 1; Exit; end;
Delphi-Quellcode:
Dann kracht es weil
WM_DESTROY:
begin SysListUnSubClass(WinHandle); sbHookedScroolBar := nil; hSysList := 0; end;
Delphi-Quellcode:
Result := CallWindowProc(FPrevSysListProc, WinHandle, Msg, wp, lp);
der Pointer FPrevSysListProc dann nicht mehr gültig ist. Beim wechsel auf einen anderen Folder wird das ListLiew zerstört deshalb muss ich das alte Subclassing beenden und hier neu zuweisen weil sich das Handle des ListView geändert hat.
Delphi-Quellcode:
solange wie ich die Message WM_DESTROY mit 1 zurückgebe ist alles in Ordnung nur dann werden mir immer neue tooltips_class32 addiert die sich dann beim beenden nicht löschen.
CDN_FOLDERCHANGE:
begin if OpenDialog.UseSkin then begin if (hSysList = 0) then begin hDefview := FindWindowEx(DlgHandle, 0, 'SHELLDLL_Defview', nil); hSysList := FindWindowEx(hDefview, 0, 'SysListView32', nil); if hSysList <> 0 then begin SysListSubClass(hSysList); // neu if not Assigned(sbHookedScroolBar) then OpenDialog.HookedScroolBar; if hHeader = 0 then begin hHeader := ListView_GetHeader(hSysList); HeaderSubClass(hHeader); end; end; end; SetFocus(SKDialogHandle); end; Result := 1; Exit; end; Wo ist mein Denkfehler so das ich das beheben kann? Ich muss also das Subclassing an anderer stelle beenden nur wo. Habe es mit WM_LBUTTONDOWN in der TOOLBAR Proc versucht nur wie komme ich an die ID der jeweiligen Button die ich klicke? |
AW: OpenFileDialog subclassing
Irgendwie kommen hier keine Rückmeldungen mehr bei meinen Beiträgen. Nun gut habe es selbst gelöst
Delphi-Quellcode:
var
bSysList: BOOL;
Delphi-Quellcode:
WM_DESTROY:
bSysList := True;
Delphi-Quellcode:
jetzt werden alle tooltips_class32 freigegeben.
CDN_FOLDERCHANGE:
begin if OpenDialog.UseSkin then begin if bSysList then begin SysListUnSubClass(hSysList); CTRL_HookedScroolBarDestroy; sbHookedScroolBar := nil; hSysList := 0; hDefview := FindWindowEx(DlgHandle, 0, 'SHELLDLL_Defview', nil); hSysList := FindWindowEx(hDefview, 0, 'SysListView32', nil); if hSysList <> 0 then begin SysListSubClass(hSysList); if not Assigned(sbHookedScroolBar) then OpenDialog.HookedScroolBar; if hHeader = 0 then begin hHeader := ListView_GetHeader(hSysList); HeaderSubClass(hHeader); end; bSysList := false; end; end; SetFocus(SKDialogHandle); end; Result := 1; Exit; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz