| Autor |
Beitrag |
Fetz
Hält's aus hier
Beiträge: 14
|
Verfasst: Sa 19.04.08 09:21
Hallo,
ich habe Icons (*.ico) mit einer Auflösung 20 x 20 Pixel in eine Resourcendatei gepackt. Wenn ich die Icons in einem TImage-Control mit width = 20 und height = 20 anzeigen lasse, sind sie zu groß. Es ist nur etwa ein Viertel des Icons sichtbar.
Wenn ich im Objektinspector ein Icon bei der Eigenschaft Picture lade, stimmt dagegen alles.
Mein Aufruf aus der Resource lautet:
Delphi-Quelltext 1:
| MainForm.img_Result.Picture.Icon.Handle := LoadIcon(HInstance,'button_green'); |
In der rc-Datei sieht es so aus:
Quelltext 1:
| button_green Icon "img/button_green.ico" |
Die TImage-Eigenschaften center und stretch scheinen für Icons keine Auswirkungen zu haben.
Kann mir jemand einen Tipp geben, was zu tun ist?
Danke und Gruß, Fetz
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Sa 19.04.08 09:49
Hallo,
versuch es mal damit, vielleicht klappt es so besser:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure LoadIconToImage; var Stream: TResourceStream; begin Stream := TResourceStream.Create(hInstance, 'button_green', RT_ICON); try Image1.Picture.Icon.LoadFromStream(Stream); finally Stream.Free; end; end; |
|
|
Fetz 
Hält's aus hier
Beiträge: 14
|
Verfasst: Sa 19.04.08 10:13
Hallo Yogu,
herzlichen Dank für die Hilfe.
Ich habe jetzt Deinen Procedure-Vorschlag über meine Procedure gesetzt und für meinen Fall angepasst
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure LoadIconToImage(); var Stream: TResourceStream; begin Stream := TResourceStream.Create(HInstance, 'button_green', RT_ICON); try MainForm.img_Result.Picture.Icon.LoadFromStream(Stream); finally Stream.Free; end; end; |
Meine im ersten Beitrag genannte Codezeile habe ich ersetzt durch:
Delphi-Quelltext
Leider kommt in Zeile 4 Deines Vorschlags jetzt die Fehlermeldung "Ressource button_green wurde nicht gefunden"
Gruß, Fetz
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Sa 19.04.08 10:17
Hast du die Ressource wirklich als "button_green" in der Ressourcendatei deines Projektes gespeichert?
Du könntest auch mal
Delphi-Quelltext 1:
| Stream := TResourceStream.Create(hInstance, 'button_green', RT_ICON); |
durch
Delphi-Quelltext 1:
| Stream := TResourceStream.Create(hInstance, 'button_green', RT_GROUP_ICON); |
ersetzen. So ganz den Unterschied kenne ich da nicht.
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 19.04.08 10:18
Naja, RT_ICON ist bei dir ja auch nicht der Typ in deinem Ressourcenskript. Du musst da schon das selbe angeben wie im Skript, bei dir also 'Icon'  .
// EDIT:
@ Yogu:
Das was da steht ist einfach nur eine Zeichenkette, die exakt das angibt, was als Typ im Ressourcenskript steht. Darin steht ja zuerst die ID, dann der Typ und dann die Datei für die Ressource. RT_ICON ist nur eine Konstante, die die entsprechende Zeichenkette (hier MakeIntResource(3) (oder 4?)) beinhaltet. 
Zuletzt bearbeitet von jaenicke am Sa 19.04.08 10:26, insgesamt 2-mal bearbeitet
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Sa 19.04.08 10:25
|
|
Fetz 
Hält's aus hier
Beiträge: 14
|
Verfasst: Sa 19.04.08 10:35
Hallo zusammen,
leider ändert sich die Fehlermeldung nicht. Die entsprechende Zeile sieht jetzt so aus:
Delphi-Quelltext 1:
| Stream := TResourceStream.Create(HInstance, 'button_green', 'Icon'); |
| Zitat: | | Hast du die Ressource wirklich als "button_green" in der Ressourcendatei deines Projektes gespeichert? |
Also ich arbeite heute zum ersten Mal mit einer Resourcendatei. Und ich habe das "Gefühl", dass ich es richtig gemacht habe. Sonst müsste es ja bereits bei meinem erstgenannten Code zu einem Fehler kommen...? Wenn ich den neuen Code auskommentiere und den alten wieder aktiviere, wird auch der grüne Button aus der Resource angezeigt - allerdings zu groß
Gruß, Fetz
|
|
Fetz 
Hält's aus hier
Beiträge: 14
|
Verfasst: Sa 19.04.08 14:59
Hallo zusammen,
Ich habe jetzt eine Variante genommen, mit der ich sicher keinen Schönheitspreis gewinnen werde, aber mit der es einfach schön aussieht. Und zwar habe ich für jede mögliche Situation genau ein TImage-Control eingebaut (insgesamt 3 Stück). Jedes habe ich auf width = 20 und height = 20 gesetzt. Bei Visible habe ich false genommen. In der Picture-Eigenschaft im Objektinspektor habe ich die entsprechenden Icon-Grafiken hochgeladen (z.B. button_green.ico).
Mein Aufruf für den dynamischen Wechsel des sichtbaren TImage-Controls lautet jetzt:
Delphi-Quelltext 1:
| MainForm.img_Result.Picture := MainForm.img_button_green.Picture; |
(wobei img_button_green das TImage-Control mit dem Icon button_green.ico ist)
Und damit habe ich einen runden z.T. transparenten grünen LED-Button mit 20x20 Pixel auf der Oberfläche und kann auf die Resourcendatei verzichten. Wenn es eine technisch bessere Lösung gibt, wären Hinweise für mich und für Leute, die später per Suchfunktion auf dieses Thema stoßen, trotzdem ganz hilfreich.
Vielen Dank für Eure Hilfe.
Gruß, Fetz
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Sa 19.04.08 19:44
Das ist eine sehr zuverlässige Variante, wie ich mit einigen Jahren Erfahrung bestätigen kann. Ich bin sehr oft zu Faul, um für einfache Bilder den großen Aufwand und Ärger mit der Ressourcendatei auf mich zu nehmen 
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 19.04.08 20:51
Dann kannst du auch eine TImageList nehmen, was den Vorteil hat, dass du eine beliebige Anzahl an Bildern nutzen kannst und keine visuellen Komponenten "missbrauchst"  . Die Benutzung ist da ja fast identisch.
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Sa 19.04.08 21:13
jaenicke hat folgendes geschrieben: | | Dann kannst du auch eine TImageList nehmen |
Ich leider nicht. Ich verwende nur bei Menüs, TreeViews und ListViews Bitmaps. Sonst sind bei mir alle Bilder PNGs - mit Alpha-Kanal.
|
|
Hidden
      
Beiträge: 2242
Erhaltene Danke: 55
Win10
VS Code, Delphi 2010 Prof.
|
Verfasst: Sa 19.04.08 21:36
Yogu hat folgendes geschrieben: | Das ist eine sehr zuverlässige Variante, wie ich mit einigen Jahren Erfahrung bestätigen kann. Ich bin sehr oft zu Faul, um für einfache Bilder den großen Aufwand und Ärger mit der Ressourcendatei auf mich zu nehmen  |
Schreib doch einmal eine eigene Unit dazu^^
_________________ Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
|
|