+ - Icon auslesen
-
Nabend zusammen,
ich wollte mich mal erkundigen ob jemand weiss in welcher Datei das + und das - Icon steht. Damit meine ich das Icon das vom Treeview genutzt wird für offen beziehungsweise geschlossener Knoten. Würde das Icon gerne für andere Sachen verwenden, habe aber in dem Wust des C++ Builders nicht herausgefunden woher er diese Icons wirklich hat. Würde mich freuen wenn das jemand wüsste und mir eventuell auch sagen könnte wie man drankommt. (Aber im Prinzip dürfte wahrscheinlich auch das wo schon reichen)Vielen dank schonmal im Voraus
stuempi
Ps: tut mir leid wenns den Post schonmal gab aber hab kein Glück beim suchen gehabt.
-
Die TreeView-Komponente ist Bestandteil der Win-API (schließlich wird sie ja vom Explorer benutzt!), d.h. dies hat nichts mit der VCL zu tun.
Ich würde mal auf die Shell32.dll tippen, da dort auch die meisten geläufigen Symbole und Bitmaps drin sind, oder aber in der comctl32.dll direkt (in der die TreeView-Komponente implementiert ist).
Laß dich mal besser ins Win-API Forum verschieben, denn dafür benötigst du dann eine Funktion zum Auslesen der Resourcen.
-
Dieser Thread wurde von Moderator/in akari aus dem Forum VCL (C++ Builder) in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Was für ein + und - Zeichen!? Drückt euch doch mal verständlich aus.
-
http://www.vbaccelerator.com/home/vb/Code/Controls/TreeView/TreeView_Shell_Sample/shellTreeView.png
sowas meint der
-
Hi genau solche Icons meine ich,
tschuldigung wenn ich ursprünglich im falschen Thread war. Hab das spontan selbst nicht in die Win Api eingeordnet.
Jedoch ist mir nicht bekannt dass diese Icons in der Shell32.dll zu finden sind.
Beziehungsweise ich habe es nochmal ausprobiert und das Icon bisher nicht finden können. Und wie ich die comctl32.dll wirklich auslesen kann weiss ich nicht. Wäre dankbar für jeden Tipp und jede Idee.schonmal danke im Voraus
stuempi
-
warum machst du nicht einfach 'nen Screenshot und schneidest das Icon aus? (Bildbearbeitungsprogramm)
-
Ja das wäre natürlich die einfachste Methode, aber man will ja auch mal was neues lernen und WinApi ist jetzt mir noch nicht so vertraut, da kann man ja mal nach einer sinnvollen Lösung suchen. Ausserdem wäre das ja irgendwie schummeln

Aber stimmt schon im Notfall ist das sicherlich eine Alternative.stuempi
-
In diesem Tutorial wird gezeigt wie man API Aufrufe loggt: http://www.kalmbach-software.de/screencasts/UsingAPILogger/
Damit könnte man es doch bestimmt rausbekommen.
-
Hi,
der Begriff "+ - Icon" ist hier IMHO ein wenig daneben, da die TreeView-Elemente auch die eigentlichen Icons (neben dem Text) enthalten! Ich nenne sie daher "+/-"-Schaltflächen, denn sie funktionieren ja genau so.dust schrieb:
warum machst du nicht einfach 'nen Screenshot und schneidest das Icon aus? (Bildbearbeitungsprogramm)
Das würde ich vom Prinzip her nur aus Bequemlichkeit machen, professionell ist das nicht.
Warum? Mit jeder neuen Windows-Version ändert sich meistens auch die Optik der integrierten Ressourcen.
Und was passiert eigentlich wenn ein User andere Themes verwendet? Da tanzt man mit so einem einmalig erstellten "Screenshot" ein bißchen aus der Reihe...
Außerdem gibt es speziell für TreeView auch die sog. "Großansicht" mit entsprechend vergrößerten "+/-"-Schaltflächen.
D.h. wenn man statt der "üblichen" Standard-Icon-Größe von 16x16 Pixel nun beispielsweise 32x32 Pixel für TreeView-Icons verwendet, nimmt Windows automatisch andere (und größere) "+/-"-Schaltflächen.Sorry, ich kann aus dem Stegreif keine Lösung für stuempis Problem anbieten, da bisher noch kein Bedarf meinerseits.
Ich würde da vermutlich einen API-Logger anwerfen um herauszufinden wie Windows diese "+/-"-Schaltflächen zeichnet (so wie wwjie vorgeschlagen hat).Martin
-
Where available, you can use DrawThemeBackground to draw them. Check out
TREEVIEW/TVP_GLYPH.Elsewhere, I would draw them by hand (not bitmapped, since they depend on
the size of the tree items). As far as I can tell, the images haven't
changed since Windows 95.
-
Er will ja genau DIESE icons benutzen, wofür schreibt er nicht, nur dass er sie benutzen will ... da ist total schnuppe wie irgendeiner sein Windows verschandelt hat, denn er will DIESES Icon benutzen ... Wenn er natürlich was dynamisches braucht dann nützt ihm das nix, aber das schreibt er ja nicht ...
-
Nachtrag:
Guck Dir mal die "Parts and states" von Microsoft an: http://msdn2.microsoft.com/en-us/library/bb773210.aspxAuszug: Die Parts (also Bestandteile) für TreeView sind TVP_BRANCH, TVP_GLYPH, TVP_HOTGLYPH und TVP_TREEITEM.
Die States für TVP_GLYPH sind GLPS_CLOSED und GLPS_OPENED.
Die States für TVP_HOTGLYPH sind HGLPS_CLOSED und HGLPS_OPENED.
Die States für TVP_TREEITEM sind TREIS_DISABLED, TREIS_HOT, TREIS_NORMAL, TREIS_SELECTED, TREIS_SELECTEDNOTFOCUS und TREIS_HOTSELECTED.Damit könntest Du mit dem Icon-Nachzeichnen vorwärtskommen.
Martin
-
Dust ich möchte nicht unbedingt genau dieses Icon benutzen, sondern das Standard Windows Icon das für etwas zum aufklappen und zuklappen steht. Ich möchte auf meiner Oberfläche nicht verschiedene Symbole dafür benutzen. Im Prinzip baue ich ein panel was sich zusammenfalten lässt und nur ein kurzer Text im zusammengefalteten Modus vorhanden ist. Bisher wird das falten über eine Checkbox erledigt, jedoch würde ich mich da gerne dem windows theme anpassen und das ändern. Werde mal gucken wieweit ich das jetzt hinbekomme.
stuempi
-
void DrawPlusMinus(HDC hdc, int x, int y, int c, HBRUSH hbrSign, HBRUSH hbrBox, HBRUSH hbrBk, BOOL fPlus) { int n; int p = (c * 7) / 10; n = p * 2 + 1; SelectObject(hdc, hbrSign); if (p >= 5) { PatBlt(hdc, x - p, y - 1, n, 3, PATCOPY); if (fPlus) PatBlt(hdc, x - 1, y - p, 3, n, PATCOPY); SelectObject(hdc, hbrBk); p--; n -= 2; } PatBlt(hdc, x - p, y, n, 1, PATCOPY); if (fPlus) PatBlt(hdc, x, y - p, 1, n, PATCOPY); n = c * 2 + 1; SelectObject(hdc, hbrBox); PatBlt(hdc, x - c, y - c, n, 1, PATCOPY); PatBlt(hdc, x - c, y - c, 1, n, PATCOPY); PatBlt(hdc, x - c, y + c, n, 1, PATCOPY); PatBlt(hdc, x + c, y - c, 1, n, PATCOPY); }