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/)
-   -   Delphi VST -> Stateimages durch handle auf ShellIcon? (https://www.delphipraxis.net/120552-vst-stateimages-durch-handle-auf-shellicon.html)

richard_boderich 12. Sep 2008 15:12


VST -> Stateimages durch handle auf ShellIcon?
 
Hallo zusammen!

Ich wollte mal Fragen, ob es eine möglichkeit gibt, beim VST die Image bzw. Stateimage nicht durch eine Imagelist zuzuweisen, sondern durch ein handle
auf das entsprechende Shellicon. Würde mir auch reichen, wenn ich das über ein zwischengeschaltetes TImage erreichen koennte.

stOrM 13. Sep 2008 17:49

Re: VST -> Stateimages durch handle auf ShellIcon?
 
Hmm bin mir nicht sicher ob es das ist was du suchst, aber ich hab das mal so in etwa gemacht:


Delphi-Quellcode:
function GetIconIndex(Name: string; Flags: Cardinal): Integer;
// Returns the index of the system icon for the given file object.
var
  SFI : TSHFileInfo;
  Tmp        : String;
  ResPath    : String;
begin
 Tmp := lowercase(trim(Name));
 ResPath := VBSplit('.exe', Tmp, 0);
 ResPath := ResPath + '.exe';
 KillChars(ResPath, ['"', ',']);

  if SHGetFileInfo(PChar(ResPath), 0, SFI, SizeOf(TSHFileInfo), Flags) = 0 then
    Result := -1
  else
    Result := SFI.iIcon;
end;

procedure TForm1.vRegGetImageIndex(Sender: TBaseVirtualTree;
  Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex;
  var Ghosted: Boolean; var ImageIndex: Integer);
  var Data : PRegObjectData;
begin
  if Column = 0 then
  begin
    Data := Sender.GetNodeData(Node);
    case Kind of
      ikNormal,
      ikSelected:
        begin
          if Sender.Expanded[Node] then
            ImageIndex := -1
          else
            ImageIndex := GetIconIndex(Data.ImagePath, SHGFI_SYSICONINDEX or SHGFI_LARGEICON);
        end;

usw...
Grüße
s!

richard_boderich 15. Sep 2008 09:55

Re: VST -> Stateimages durch handle auf ShellIcon?
 
Hallo stOrM

kannst du mir vielleicht sagen, was in der property Data.Imagepath gespeichert ist bzw. wozu diese benötigt wird.
Ich möchte eigentlich nur Laufwerke im VST auflisten, und dazu natürlich die Entsprechenden Shellicons für Festplatte, CDrom
usw. anzeigen.

//Edit Ich habe jetz selber eine SHGetFileInfo funktion implementiert und diese Liefert mir sogar den SysIconIndex zurück.
Mein Problem ist wie krieg ich das Icon in den VST. bzw. Wie biege ich die VST Imagelist auf die Shelliconlist für die ich den iconindex habe um?

stOrM 15. Sep 2008 14:01

Re: VST -> Stateimages durch handle auf ShellIcon?
 
Hmm hoffentlich ist das richtig, ich geh grad die alten sourcen durch von mir:

Delphi-Quellcode:
procedure TForm1.LoadImageLists;
  var
    sfi : TSHFileInfo;
    SysIL : uint;
    LargeImages, SmallImages : TImageList;
begin
  LargeImages := TImageList.Create(Form1);
  ConvertToHighColor(LargeImages);
  SysIL := SHGetFileInfo('', 0, SFI, SizeOf(SFI), SHGFI_SYSICONINDEX or SHGFI_LARGEICON);
 if SysIL <> 0 then
 begin
   LargeImages.Handle := SysIL;
   LargeImages.ShareImages := TRUE;
   end
    else
      ShowMessage('Error: ImageList has not Handle');

  SmallImages := TImageList.Create(Form1);
  ConvertToHighColor(SmallImages);
  SysIL := SHGetFileInfo('', 0, SFI, SizeOf(SFI), SHGFI_SYSICONINDEX or SHGFI_SMALLICON);
  if SysIL <> 0 then
   begin
     SmallImages.Handle := SysIL;
     SmallImages.ShareImages := TRUE;
 end
  else
    ShowMessage('Error: ImageList has not Handle');
    svLog.StateImages := SmallImages;
end;
Dann halt noch die 2 Imagelisten mit dem VST im OI verknüpfen...

Delphi-Quellcode:
  SystemImages.Handle := SHGetFileInfo('', 0, SFI, SizeOf(SFI), SHGFI_SYSICONINDEX or SHGFI_SMALLICON);
  SystemImages.ShareImages := True;
Ansonsten empfehle ich Dir, schau mal im DrawTreeDemo von Mike Lischke rein, da macht er sowas ähnliches, was du suchst...

Gruß
s!

richard_boderich 15. Sep 2008 22:16

Re: VST -> Stateimages durch handle auf ShellIcon?
 
@Storm

Ich habe es mit einigem Rumgefrickel und deinem Codebeispiel hinbekommen. Herzlichen Dank noch mal an dich. :)

stOrM 15. Sep 2008 22:21

Re: VST -> Stateimages durch handle auf ShellIcon?
 
Kein Thema schön wenn ich auch mal helfen konnte :-)


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