Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Canvas transparente linien zeichnen ?! (https://www.delphipraxis.net/134225-canvas-transparente-linien-zeichnen.html)

turboPASCAL 19. Mai 2009 10:01

Re: Canvas transparente linien zeichnen ?!
 
Guck dir das mal an -> http://www.delphipraxis.net/internal...=485973#485973

Luckie 19. Mai 2009 10:14

Re: Canvas transparente linien zeichnen ?!
 
Zitat:

Zitat von cherry
Wie kann ich also transparente linien zeichen?

Hast du mal überlegt, was du da willst bzw. geschrieben hast? Ich formuliere es mal etwas anders:
Zitat:

Wie kann ich eine durchsichtige Linie zeichnen?
Und das dies unsinnig ist, dürte klar sein. Dewesegen verstehe ich nicht so ganz, was du eigentlich willst. :gruebel:

cherry 19. Mai 2009 10:36

Re: Canvas transparente linien zeichnen ?!
 
Zitat:

Zitat von turboPASCAL

Genau, das wär eine Lösung.
Nur wollte ich das ganze halt ohne Bilder machen, da man die Farbe eigentlich einstellen können sollte.

Zitat:

Zitat von Luckie
... Dewesegen verstehe ich nicht so ganz, was du eigentlich willst. :gruebel:

Ich weiss, dass ich wohl ein bisschen für Verwirrung gesorgt habe. Deshalb habe ich ja auch ein Bild eingefügt wo man sehen kann was ich will. (siehe 2 Beiträge weiter oben.)

cherry 20. Mai 2009 15:22

Re: Canvas transparente linien zeichnen ?!
 
hat mir denn niemand einen tipp...
denn irgendwie habe ich mühe die Farben zu berechnen. Hier der Wichtigste Ausschnitt...
(Versuch die Schrift auszublenden...[alternativ]) <- siehe Bild weiter oben. Der ganze Code ist ebenfalls weiter oben gepostet.

Delphi-Quellcode:
procedure TSSText.TimerAction(Sender: TObject);
begin
  if tx <= 0 - Canvas.TextHeight(FLines.Strings[0]) * FLines.Count then
    tx := height;
  tx := tx - 1 - FSpeed;
  Repaint;
end;

procedure TSSText.PaintText;
var
  R,G,B,I: Integer;
  txt: String;
begin
  if FLines.Count > 0 then
  begin
    Canvas.Brush.Style := bsClear;

    for I := 0 to FLines.Count -1 do
    begin
      if tx + Canvas.TextHeight(FLines.Strings[I]) * I < 50 then
      begin
      R := Round(GetRValue(Color1) + ((GetRValue(Canvas.Font.Color) - GetRValue(Color1)) *
        I / (50-1)));
      G := Round(GetGValue(Color1) + ((GetGValue(Canvas.Font.Color) - GetGValue(Color1)) *
        I / (50-1)));
      B := Round(GetBValue(Color1) + ((GetBValue(Canvas.Font.Color) - GetBValue(Color1)) *
        I / (50-1)));
        Canvas.Font.Color := RGB(R,G,B);
      end
      else
        Canvas.Font.Color := clFontOld;
      Canvas.TextOut(10, tx + Canvas.TextHeight(FLines.Strings[0]) * I, FLines.Strings[I]);
    end;

    Canvas.Brush.Style := bsSolid;
  end;
end;

procedure TSSText.Paint;
var
  Rect: TRect;
  R, G, B, I, Y: Integer;
begin

  Width := Width;
  Height := Height;

  // Rechteck
  Canvas.Brush.Color := ColorToRGB(FColor1);
  Canvas.Rectangle(0,0,Width,height);

  // übergabeparameter Rect bereitstellen,
  // wenn Verlauf ausgewählt
  if (FGradient <> grNone) then
  begin
   Rect.Left := 0;
   Rect.Top := 0;
   Rect.Right := Width;
   Rect.Bottom := height;
  end;

  // Verlauf herstellen
  if (FGradient = grTopToBottom) then
   DrawGradientH(Canvas, FColor1, FColor2, Rect)
  else if (FGradient = grLeftToRight) then
   DrawGradientV(Canvas, FColor1, FColor2, Rect);

  PaintText;

  // Rand Zeichnen
  if (FBorder) then
  begin
   Canvas.Pen.Color := ColorToRGB(FBorderColor);
   Canvas.Brush.Style := bsClear;
   Canvas.Rectangle(0,0,Width,height);
   Canvas.Rectangle(width,0,Width,height);
  end;

end;

Pfoto 20. Mai 2009 17:18

Re: Canvas transparente linien zeichnen ?!
 
Hallo cherry,

ich benutze u.a. folgendes Komponenten-Pack:
http://www.pegtop.de/delphi/componen...creenshots.htm

Dort gibt es einige Komponenten, mit denen auch sehr komplexe
Farbverläufe erstellt werden. Der Code sieht zwar heftig aus (für mich
als "Pseudo-Programmierer"), aber vielleicht kannst du was daraus lernen.

Er verwendet keine zusätzlichen Libs wie Graphics32 o.ä., sondern erstellt die
Transparenzen von Grund auf mit eigenen Routinen.

Gruß
Jürgen

cherry 26. Mai 2009 13:35

Re: Canvas transparente linien zeichnen ?!
 
Liste der Anhänge anzeigen (Anzahl: 2)
hy there...

So. Ich hab mich jetzt doch für GR32 und GR32_Image entschieden.
Eigentlich funktioniert fast alles wie es soll, nur ein Problem hab ich noch...

Die Komponente hat 3 Farbverläufe. Der erste bildet den Hintergrund der Komponente.
Die Zwei anderen bedecken jeweils 30px oben und unten und sind transparent. Diese dienen dem Ausblenden der Schrift.

Problem:
Mein Problem betrifft der letzte Farbverlauf, er wird nicht immer richtig dargestellt, --> siehe Bild. Dies ist abhänig von der Höhe der Komponente, soviel ist sicher. Warum das aber so passiert?! - Ich finds nicht heraus. Anbei die aktuellste Version des Codes...

Vielen Dank schon mal.

cherry 26. Mai 2009 15:40

Re: Canvas transparente linien zeichnen ?!
 
habs herausgefunden...
lag an der schleiffe für den Ferlauf, ich hab da falsche Werte gebraucht.
Funzt alles wies soll...
werde später das Resultat noch hochladen..


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:20 Uhr.
Seite 2 von 2     12   

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