Entwickler-Ecke

Multimedia / Grafik - transparente Textausgabe


toms - Mo 06.10.03 10:06
Titel: transparente Textausgabe
Hi!

Wenn ich Text auf ein TImage ausgebe, wird der Bildhintergrund weiss. Wie kann ich ihn transparent behalten? Folgender Code funktioniert nicht:

Delphi-Quelltext
1:
2:
3:
4:
5:
 
Image1.Canvas.Pen.Color := clBlack; 
 // SetBkMode(Image1.Canvas.Handle, TRANSPARENT); 
 // Image1.Canvas.Brush.Style := bsClear; 
 Image1.Canvas.TextOut(2, 3, 'Test');


Moderiert von user profile iconTino: Code- durch Delphi-Tags ersetzt.


maximus - Mo 06.10.03 10:39

îch glaube so:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
Image1.Canvas.brush.style := bsClear; // <-- hintergrund style setzen

Image1.Canvas.Pen.Color := clBlack; 
// SetBkMode(Image1.Canvas.Handle, TRANSPARENT); 
// Image1.Canvas.Brush.Style := bsClear; 
Image1.Canvas.TextOut(2, 3, 'Test');


viel spass


smiegel - Mo 06.10.03 12:00

Hallo,

am einfachsten geht es, wenn Du die Eigenschaft Transparent des Image-Objekts auf True setzt.


maximus - Mo 06.10.03 14:55

Er will ja das die der schrift-hintergrund tranzparent ist...und nicht das bil, wo die schrift draufgemahlt wird :wink:


smiegel - Mo 06.10.03 15:04

Hallo,

@maximus:

toms hat folgendes geschrieben:
Wenn ich Text auf ein TImage ausgebe, wird der Bildhintergrund weiss


Genau das wird durch meinen Tipp vermieden. Falls Du es nicht glaubst, kannst Du es ja ausprobieren.


maximus - Mo 06.10.03 16:42

Mal angenommen er hat ein bild mit seiner grinsenden fresse drauf...*ähem*...und er möchte auf seine stirn 'Superman' schreiben, dann würdest du mit 'transparent' nix eirreichen...vielleicht, dass seine stirn durchsichtig ist und in dem durchsichtigen rechteck 'Superman' steht.

was soll das denn bitte bringen :?: ...die vorgeschlagene lösung funktioniert auf jedenfall


toms - Mo 06.10.03 18:08

Danke für die Antworten. Jedoch funktioniert keine!

Die Hintergrundfarbe des Canvas bleibt immer noch weiss,
egal ob ich den Brush.Style verstelle oder die SetBkMode() verwende,
oder das Bild auf transparent stelle.
Habe auch schon alle Vorschläge vor dem Posten durchprobiert.

Noch andere Ideen?


MSCH - Mo 06.10.03 18:49

Verzichte auf die VCL Routinen, die sind in diesem Falle imho grütze. Bei mir funktioniert es via setBKMode() und DrawText() er API.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
with Sender.Canvas do begin
          SetBkMode(Handle,TRANSPARENT);
          SetTextColor(Handle,clWhite);
          DrawText(Handle,@s1[1],length(s1),NameRect,dt_left);
          SetTextColor(Handle,clBlack);
          DrawText(Handle,@S2[1],length(S2),Rect,dt_left);
        end;
grez
msch


toms - Mo 06.10.03 19:04

thx für den Code aber der Test war auch negativ.
Habe aber unterdessen die Lösung (durch probieren) selber gefunden ,
kann aber nicht ganz nachvollziehen, warum so.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
  with Image1 do
  begin
    Transparent := True;
    // Canvas.Brush.Color setzen, sonst geht's nicht.
    // Egal was für eine Farbe, es nimmt die Farbe nicht an,
    // sondern das Image bleibt so transparent.
    Canvas.Brush.Color := 1; 
    Canvas.FillRect(ClientRect);
    Canvas.TextOut(10,10,'So klappt''s!');
  end;