AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Wie TIcon gestretcht in ein TBitmap zeichnen?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie TIcon gestretcht in ein TBitmap zeichnen?

Ein Thema von himitsu · begonnen am 1. Mai 2010 · letzter Beitrag vom 5. Mai 2010
Antwort Antwort
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#1

Wie TIcon gestretcht in ein TBitmap zeichnen?

  Alt 1. Mai 2010, 18:33
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.
Miniaturansicht angehängter Grafiken
unbenannt_380.png  
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#2

Re: Wie TIcon gestretcht in ein TBitmap zeichnen?

  Alt 1. Mai 2010, 19:09
Ja, Delphi und die lieben Icons. Da gibt es oft Problemchen.

Versuche einmal: MSDN-Library durchsuchenDrawIconEx
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#3

Re: Wie TIcon gestretcht in ein TBitmap zeichnen?

  Alt 1. Mai 2010, 19:30
Dann muß ich ja erstmal prüfen, ob in dem TGrafic ein Icon steht, welches ja nur geht, wenn das Icon wirklich in einem TIcon drinsteckt.
Und zusätzlich muß ich hoffen, daß es mit anderen Grafiktypen keine weiteren Probleme gibt.

Hab ja gehofft, daß ich nur zu blöd bin und irgendwas falsch mache.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#4

Re: Wie TIcon gestretcht in ein TBitmap zeichnen?

  Alt 5. Mai 2010, 09:30
Ach du meine Güte, der Grund, warum das Standard-Icon einer Form nicht gezeichnet wurde und warum es beim Speichern zu einer Exception kommt, war ja "einfach".

Es gibt in Form.Icon in diesem Fall zwar eine TIcon-Instanz, aber innerhalb Dieser ist kein Icon (MSDN-Library durchsuchenHICON) enthalten.

In meinem Fall konnte ich dieses Problem also nun so lösen:
Delphi-Quellcode:
procedure TInsightAction.AssignImage(Value: TGraphic);
begin
  if (Value is TIcon) and (TIcon(Value).Handle = 0) then
    Value := nil;
  ...
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Wie TIcon gestretcht in ein TBitmap zeichnen?

  Alt 5. Mai 2010, 11:06
Genau so ist es (zumindest war es bei Delphiversionen die ich kenne). Man sieht zwar das Icon beim Form auch wenn keines direkt dem Form zugeweisen ist, aber das hängt damit zusammen das beim erzeugen wohl geprüft wird ob ein spezielles Icon zugewiesen wurde, und wenn dem nicht der Fall ist wird das Iconhandle des Applicationobjektes verwendet.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#6

Re: Wie TIcon gestretcht in ein TBitmap zeichnen?

  Alt 5. Mai 2010, 11:15
Es wäre dann aber besser gewesen, erst garkeine Icon-Instanz zu erzeugen.
Der "übliche" Weg ala Assigned(Form.Icon) ist ja dadurch leider nicht möglich.
$2B or not $2B
  Mit Zitat antworten Zitat
Antwort Antwort


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 15:47 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