AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

OpenFileDialog subclassing

Ein Thema von venice2 · begonnen am 26. Nov 2020 · letzter Beitrag vom 27. Nov 2020
Antwort Antwort
venice2
(Gast)

n/a Beiträge
 
#1

OpenFileDialog subclassing

  Alt 26. Nov 2020, 15:54
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:
    WM_DESTROY:
      begin
        SysListUnSubClass(WinHandle); // Muss beendet werden

        sbHookedScroolBar := nil;
        hSysList := 0;
        Result := 1;
        Exit;
      end;
Beim beenden wird die Subclass beendet wenn ich nun die Message weiterlaufen lasse also

Delphi-Quellcode:
    WM_DESTROY:
      begin
        SysListUnSubClass(WinHandle);

        sbHookedScroolBar := nil;
        hSysList := 0;
      end;
Dann kracht es weil
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:
          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;
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.
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?

Geändert von venice2 ( 1. Dez 2020 um 15:05 Uhr)
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#2

AW: OpenFileDialog subclassing

  Alt 27. Nov 2020, 19:42
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:
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;
jetzt werden alle tooltips_class32 freigegeben.
  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 19:52 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