Autor Beitrag
Fetz
Hält's aus hier
Beiträge: 14



BeitragVerfasst: 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:
ausblenden Delphi-Quelltext
1:
MainForm.img_Result.Picture.Icon.Handle := LoadIcon(HInstance,'button_green');					

In der rc-Datei sieht es so aus:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Sa 19.04.08 09:49 
Hallo,

versuch es mal damit, vielleicht klappt es so besser:

ausblenden 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 Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: 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
ausblenden 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:
ausblenden Delphi-Quelltext
1:
LoadIconToImage;					


Leider kommt in Zeile 4 Deines Vorschlags jetzt die Fehlermeldung "Ressource button_green wurde nicht gefunden"

Gruß, Fetz
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: 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

ausblenden Delphi-Quelltext
1:
Stream := TResourceStream.Create(hInstance, 'button_green', RT_ICON);					

durch

ausblenden Delphi-Quelltext
1:
Stream := TResourceStream.Create(hInstance, 'button_green', RT_GROUP_ICON);					

ersetzen. So ganz den Unterschied kenne ich da nicht.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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:
@user profile iconYogu:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Sa 19.04.08 10:25 
user profile iconjaenicke hat folgendes geschrieben:
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 beinhaltet. ;-)

Man lernt nie aus :D
Fetz Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Sa 19.04.08 10:35 
Hallo zusammen,

leider ändert sich die Fehlermeldung nicht. Die entsprechende Zeile sieht jetzt so aus:
ausblenden 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ß :nut:

Gruß, Fetz
Fetz Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: 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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Sa 19.04.08 21:13 
user profile iconjaenicke 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: Sa 19.04.08 21:36 
user profile iconYogu 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)