Einzelnen Beitrag anzeigen

TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#1

Was steht unter XE6 in Vcl.ComCtrls.TToolBarStyleHook.ApplyImageList?

  Alt 21. Aug 2014, 13:31
Hallo Gemeinde,

ich wollte den Threadtitel schon in "Waaas für Praktikanten arbeiten bei Emba?" benennen, fand es dann aber doch zu unsachlich.

Meine Kollegen arbeiten mit den C++Builder XE3 an einem VCL-Formular mit aktiviertem VCL Style unter 64-Bit.
Bei Verwendung des Stylings und einer TToolBar kam es unter bestimmten Umständen zu obskuren Access Violations, hier ein CallStack-Beispiel:
Code:
:00007FF956748A23 ; C:\WINDOWS\WinSxS\amd64_microsoft.windows.common-controls_6595b64144ccf1df_5.82.9600.16384_none_34a8918f959016ea\COMCTL32.DLL
:00007FF95674C948 ; C:\WINDOWS\WinSxS\amd64_microsoft.windows.common-controls_6595b64144ccf1df_5.82.9600.16384_none_34a8918f959016ea\COMCTL32.DLL
:0000000000a81178 ; Vcl::Imglist::TCustomImageList::SetNewDimensions(unsigned long long)
:0000000000a81294 ; Vcl::Imglist::TCustomImageList::SetHandle(unsigned long long)
:0000000000b8bb0e ; Vcl::Comctrls::TToolBarStyleHook::ApplyImageList()
:0000000000b8be52 ; Vcl::Comctrls::TToolBarStyleHook::Paint(Vcl::Graphics::TCanvas*)
:0000000000a59bf5 ; Vcl::Themes::TStyleHook::WMPaint(Winapi::Messages::TMessage&)
:0000000000cddaa1 ; System::TObject::Dispatch(void*)
Das sorgte auch dafür, das die Icons in den TToolButtons nicht richtig gesetzt bzw. verschoben dargestellt wurden.

Beim Debuggen des ToolBar-StyleHooks ist mir die folgende Stelle aufgefallen:

Delphi-Quellcode:
procedure TToolBarStyleHook.ApplyImageList;
var
  H: Cardinal; // <--- Was zum Kuckkuck ist das?
begin
  H := SendMessage(Handle, TB_GETIMAGELIST, 0, 0);
  if (H <> 0) and (FImages = nil) then
  begin
    FImages := TImageList.Create(nil);
    FImages.ShareImages := True;
    FImages.Handle := H;
  end;
end;
Warum wird hier ein fester Cardinal verwendet, anstatt ein HImageList?
Das kann ja wohl nicht wahr sein...

Ist das in XE6 gefixt?
Unter XE5 (beim Kollegen geschaut) ist der falsche Datentyp noch da.
  Mit Zitat antworten Zitat