AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls VirtualStringTree - SHGetFileInfo hängt Programm auf / Canvas erlaubt kein Zeichnen
Thema durchsuchen
Ansicht
Themen-Optionen

VirtualStringTree - SHGetFileInfo hängt Programm auf / Canvas erlaubt kein Zeichnen

Ein Thema von DieDolly · begonnen am 9. Dez 2020 · letzter Beitrag vom 13. Dez 2020
Antwort Antwort
Seite 2 von 6     12 34     Letzte »    
venice2
(Gast)

n/a Beiträge
 
#11

AW: SHGetFileInfo hängt Programm auf / Canvas erlaubt kein Zeichnen / VirtualStringTr

  Alt 10. Dez 2020, 16:56
Deinen Code verstehe ich nicht. Ich mache nichts anderes. Ich lade das Icon und weise den ImageIndex zu.
Ich habe den Code jetzt ausgelagert und komplett von der VST-Unit abgekoppelt. Trotzdem kommen Fehlermeldungen. Bis vor 10.3.3 war das alles gar kein Problem bin ich der Meinung.
Du musst alle in das Imagelist addieren die du benötigst sonst löst du jedesmal beim addieren eines neuen Icon ein repaint aus.
Das ist sehr un-konstruktiv jedesmal eine neue ImageListe zu erstellen für 1 Icon! sorry
Einmalig und fertig.

Das ist dein Problem.
Und wie gesagt das Handle des Icon löschen.

DestroyIcon(Info.HIcon);

Geändert von venice2 (10. Dez 2020 um 16:58 Uhr)
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#12

AW: SHGetFileInfo hängt Programm auf / Canvas erlaubt kein Zeichnen / VirtualStringTr

  Alt 10. Dez 2020, 17:00
Ungefähr so?

FormCreate
Delphi-Quellcode:
 SmallImages := TImageList.Create(Self);
 SystemImageList := SHGetFileInfo('', 0, Info, SizeOf(TSHFileInfo), SHGFI_USEFILEATTRIBUTES or SHGFI_ICON or SHGFI_SYSICONINDEX or SHGFI_SMALLICON);

 SmallImages.Handle := SystemImageList;
 SmallImages.ShareImages := True;
 VST.Images := SmallImages;
InitNode
Delphi-Quellcode:
 SHGetFileInfo(PChar(FileName), FILE_ATTRIBUTE_NORMAL, Info, SizeOf(TSHFileInfo), SHGFI_USEFILEATTRIBUTES or SHGFI_SYSICONINDEX or SHGFI_ICON or SHGFI_SMALLICON);
 ImageList_AddIcon(SmallImages.Handle, Info.iIcon);
 DestroyIcon(Info.iIcon); // Mit dieser Zeile sehe ich dann keine Icons
Ach das funktioniert doch eh nicht. Deinen Code verstehe ich nicht und auch keine Ahnung wo der hin soll, welche Variablentypen das sind, wie ich das am Ende anzeige usw.

Geändert von DieDolly (10. Dez 2020 um 17:05 Uhr)
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#13

AW: SHGetFileInfo hängt Programm auf / Canvas erlaubt kein Zeichnen / VirtualStringTr

  Alt 10. Dez 2020, 17:07
Ungefähr so?

FormCreate
Delphi-Quellcode:
 SmallImages := TImageList.Create(Self);
 SystemImageList := SHGetFileInfo('', 0, Info, SizeOf(TSHFileInfo), SHGFI_USEFILEATTRIBUTES or SHGFI_ICON or SHGFI_SYSICONINDEX or SHGFI_SMALLICON);

 SmallImages.Handle := SystemImageList;
 SmallImages.ShareImages := True;
 VST.Images := SmallImages;
InitNode
Delphi-Quellcode:
 SHGetFileInfo(PChar(FileName), FILE_ATTRIBUTE_NORMAL, Info, SizeOf(TSHFileInfo), SHGFI_USEFILEATTRIBUTES or SHGFI_SYSICONINDEX or SHGFI_ICON or SHGFI_SMALLICON);
 ImageList_AddIcon(SmallImages.Handle, Info.iIcon);
 DestroyIcon(Info.iIcon); // Mit dieser Zeile sehe ich dann keine Icons
Ach das funktioniert doch eh nicht. Deinen Code verstehe ich nicht und auch keine Ahnung wo der hin soll, welche Variablentypen das sind, wie ich das am Ende anzeige usw.
sorry dann läuft bei dir was falsch.
Das ImageList wird zerstört oder sonst was.
Ist aber auch möglich das es in 10.4 einfach nicht mehr korrekt funktioniert.
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#14

AW: SHGetFileInfo hängt Programm auf / Canvas erlaubt kein Zeichnen / VirtualStringTr

  Alt 10. Dez 2020, 17:08
Ich verstehe deine Aussage aber auch nicht
Zitat:
Das ist sehr un-konstruktiv jedesmal eine neue ImageListe zu erstellen für 1 Icon! sorry
Das mache ich doch gar nicht.

Und außerdem. Woher will das VST wissen, welchen Index es für welches Node braucht? Dafür muss ich doch zwangsweise in jedem Node 1x GetSHFileInfo aufrufen.

Zitat:
Das ImageList wird zerstört oder sonst was.
Ich zerstöre da nix. Diese komischen Probleme kommen erst bei mehreren Tausend Einträgen.

Hier nochjmal zusammengefasst wie ich es immer gemacht habe und wie es auch eigentlich immer funktioniert hat

FormCreate
Delphi-Quellcode:
 SmallImages := TImageList.Create(Self);
 SystemImageList := SHGetFileInfo('', 0, Info, SizeOf(TSHFileInfo), SHGFI_USEFILEATTRIBUTES or SHGFI_ICON or SHGFI_SYSICONINDEX or SHGFI_SMALLICON);

 SmallImages.Handle := SystemImageList;
 SmallImages.ShareImages := True;
 VST.Images := SmallImages;
InitNode
Delphi-Quellcode:
 SHGetFileInfo(PChar(FileName), FILE_ATTRIBUTE_NORMAL, Info, SizeOf(TSHFileInfo), SHGFI_USEFILEATTRIBUTES or SHGFI_SYSICONINDEX or SHGFI_ICON or SHGFI_SMALLICON);
 MeinNode-generisch.MeinIconIndex := Info.iIcon; // jetzt weiß der Datensatz unter dem Node, welcher IconIndex das Icon braucht.
VSTGetImageIndex
Delphi-Quellcode:
 if Kind in [ikNormal, ikSelected] then
  ImageIndex := MeinNode-generisch.MeinIconIndex;
ich glaube die ImageList benutze ich nicht einmal.

Geändert von DieDolly (10. Dez 2020 um 17:12 Uhr)
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#15

AW: SHGetFileInfo hängt Programm auf / Canvas erlaubt kein Zeichnen / VirtualStringTr

  Alt 10. Dez 2020, 17:21
Zitat:
Das mache ich doch gar nicht.
Ich habe es so verstanden.
Zitat:
Ich rufe SHGetFileInfo in InitNode auf. Das heißt es wird nur ein Icon geladen
Delphi-Quellcode:
 SHGetFileInfo(PChar(FileName), FILE_ATTRIBUTE_NORMAL, Info, SizeOf(TSHFileInfo), SHGFI_USEFILEATTRIBUTES or SHGFI_SYSICONINDEX or SHGFI_ICON or SHGFI_SMALLICON);
 MeinNode-generisch.MeinIconIndex := Info.iIcon; // jetzt weiß der Datensatz unter dem Node, welcher IconIndex das Icon braucht.
Zitat:
ich glaube die ImageList benutze ich nicht einmal.
jetzt weiß der Datensatz unter dem Node, welcher IconIndex das Icon braucht.
Das ist kein Index aus der ImageList sondern dein HIcon.
Und du lädst jedesmal ein neues Icon anstatt die ImageListe zu verwenden wo dann alle schon enthalten sind.


da ist so einiges faul.

Der richtige weg ist.
Die ImageList einmalig mit allen Icons zu füllen.
Und bei InitNode den entsprechenden index aus der ImageList (Hicon) der Node zuzuweisen.

Geändert von venice2 (10. Dez 2020 um 17:37 Uhr)
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#16

AW: VirtualStringTree - SHGetFileInfo hängt Programm auf / Canvas erlaubt kein Zeichn

  Alt 10. Dez 2020, 17:25
Wieso "so einiges"?
Ich würde es ja verbessern aber ich verstehe deinen Code nicht, weil da für mich der Kontext fehlt.
Ich habe das eben aber mal mit der ImageList versucht. Egal ob ein Icon schon da drin ist oder nicht, es werden in InitNode immer weiter Icons in die Liste gepackt.
Ich kapiere mittlerweile überhaupt nix mehr und besonders nicht, warum die ImageList angeblich so gut sein soll. Woher soll die denn beim Hinzufügen neuer Icons wissen, ob das schon da drin ist oder nicht? Und auch wenn, das ist ja nicht einmal mein Problem. ich muss für JEDEN Node GetSHFileInfo aufrufen, um überhaupt herauszubekommen, welches Icon dahintersteckt. Wie soll mir da eine ImageList helfen?

Du redest hier im Prinzip mit einem Anfänger!

Hast du keinen normalen Code statt den aufd Seite 1 mit SetLength, ItemsInfo und so?
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#17

AW: VirtualStringTree - SHGetFileInfo hängt Programm auf / Canvas erlaubt kein Zeichn

  Alt 10. Dez 2020, 17:29
Wieso "so einiges"?
Ich würde es ja verbessern aber ich verstehe deinen Code nicht, weil da für mich der Kontext fehlt.
Ich habe das eben aber mal mit der ImageList versucht. Egal ob ein Icon schon da drin ist oder nicht, es werden in InitNode immer weiter Icons in die Liste gepackt.
Ich kapiere mittlerweile überhaupt nix mehr und besonders nicht, warum die ImageList angeblich so gut sein soll. Woher soll die denn beim Hinzufügen neuer Icons wissen, ob das schon da drin ist oder nicht? Und auch wenn, das ist ja nicht einmal mein Problem. ich muss für JEDEN Node GetSHFileInfo aufrufen, um überhaupt herauszubekommen, welches Icon dahintersteckt. Wie soll mir da eine ImageList helfen?

Du redest hier im Prinzip mit einem Anfänger!

Hast du keinen normalen Code statt den aufd Seite 1 mit SetLength, ItemsInfo und so?
so ist eine ImageList aufgebaut..
Nur zur Veranschaulichung es geht um die Bilder..

https://www.freetutes.com/learn-vb6-...esson4/p3.html
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#18

AW: VirtualStringTree - SHGetFileInfo hängt Programm auf / Canvas erlaubt kein Zeichn

  Alt 10. Dez 2020, 17:34
Verstehe ich alles nicht. Ich habe es im Prinzip so gemacht wie hier aus #7
https://www.delphipraxis.net/611374-post7.html

Geändert von DieDolly (10. Dez 2020 um 23:01 Uhr)
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#19

AW: VirtualStringTree - SHGetFileInfo hängt Programm auf / Canvas erlaubt kein Zeichn

  Alt 10. Dez 2020, 17:42
Nun ja du rufst in jeder InitNode SHGetFileInfo auf das ist ein Overhead oder?
Warum? Frage ich mich.
Das meine ich mit Un-Konstruktiv.

https://www.youtube.com/watch?v=2fb2Ex1Pxmk

Geändert von venice2 (10. Dez 2020 um 17:50 Uhr)
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#20

AW: VirtualStringTree - SHGetFileInfo hängt Programm auf / Canvas erlaubt kein Zeichn

  Alt 10. Dez 2020, 17:42
Dazu meine Gegenfrage
Zitat:
Und wenn ich nicht einmal GetSHFileInfo für jeden Node aufrufen darf, verstehe ich auch nicht, wie ich sonst an das Icon kommen soll.
Hier in #7 wird es ja auch in jeden GetImageIndex aufgerufen und scheinbar funktioniert es.
https://www.delphipraxis.net/611374-post7.html

Oder ist das alles schon wieder so ein unbekannter Delphi-Fehler?

Hier ist auch ein Beispiel wo SHGetFileInfo ständig aufgerufen wird ohne irgendwas mit Destroy oder so
https://www.delphipraxis.net/1099656-post4.html

Geändert von DieDolly (10. Dez 2020 um 17:51 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 6     12 34     Letzte »    


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 16:50 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