Ich habe in einer Komponente ein Bitmap liegen, welchem ich aus unterschiedlichen Quellen den Inhalt irgendeines Bildes geben wollte.
Zum Test übergeb ich dort jeweils das Standard-Icon der Form (hab daran nichts verändert)
und das Icon der Anwendung.
Delphi-Quellcode:
Action.Image := Self.Icon;
Action.Image := Application.Icon;
Intern wird dann dieses gemacht.
Delphi-Quellcode:
Procedure TInsightAction.AssignImage(Value: TGraphic);
Begin
If Assigned(Value) Then Begin
If not Assigned(FImage) Then Begin
FImage := TBitmap.Create;
FImage.Width := 16;
FImage.Height := 16;
End;
With FImage.Canvas do Begin
Brush.Color := cl3DLight;
FillRect(Rect(0, 0, 16, 16));
//Draw(0, 0, Value);
StretchDraw(Rect(0, 0, 15, 15), Value);
End;
try Value.SaveToFile('a.ico'); except end;
FImage.SaveToFile('a.bmp');
End Else FreeAndNil(FImage);
DoChanged;
End;
Das Problem ist nur, daß überhaupt nichts stimmt.
Bei Form.Icon wird garnichts gezeichnet und es tritt auch kein Fehler in StretchDraw oder Draw auf.
SaveToFile wirft aber diese
Exception:
Zitat:
---------------------------
Benachrichtigung über Debugger-
Exception
---------------------------
Im Projekt Project1.exe ist eine
Exception der Klasse EInvalidGraphic mit der Meldung 'Ungültiges Symbol' aufgetreten.
---------------------------
Anhalten Fortsetzen Hilfe
---------------------------
Wärend beim Applications-Icon das Speichern funktioniert, es wird auch gezeichnet, aber immer nur in Originalgröße.
Es ist das 32x32-Standardicon von Delphi und selbst wenn ich dieses mach
Delphi-Quellcode:
StretchDraw(Rect(0, 0, 5, 5), Value);
^^^^
werden immer die obersten 16x16 Pixel über das gesamte Bitmap gezeichnet.
[add]
Auf dem angehängten Bild sind 2 Bereiche markiert.
im Unteren liegt das Application.Icon
und im Oberen sollte 3 Mal das Form.Icon liegen.
> oben sieht man nichts
> unten sieht das Bild immer gleich aus, egal ob .Draw oder ob StretchDraw mit sonstwelchen Bildausmaßen verwendet wird.
Delphi-Quellcode:
StretchDraw(Rect(0, 0, 15, 15), Value);
^^^^ Position
^^^^^^ Ausmaße
Nur wenn ich die Position ändere, dann verschiebt sich das Bild.