AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Event wird nicht gefeuert- eigene Komponente

Ein Thema von cherry · begonnen am 28. Mai 2009 · letzter Beitrag vom 28. Mai 2009
 
Benutzerbild von cherry
cherry

Registriert seit: 14. Nov 2005
561 Beiträge
 
RAD-Studio 2009 Ent
 
#1

Event wird nicht gefeuert- eigene Komponente

  Alt 28. Mai 2009, 11:03
hi ...

also ich weiss nicht woran es liegt, aber das OnClick Ereignis geht net:

Delphi-Quellcode:
{------------------------------------------------------------------------------}
{  Borland Delphi Visual Component Library                                     }
{                                                                              }
{  SoftScrollingText.pas - EnemyleftSoftScrollingText                          }                    
{                                                                              }
{  Mit dieser Komponente kannst du z.B. im Info-Teil deines Programms          }
{  Informationen Preis geben. Das interessante daran, du kannst den Text wie   }
{  ein Filmabspann laufen lassen. ssText1.scroll := true !                     }
{  Dein Text kann ein und oder Ausgeblendet werden, benutze dazu die           }
{  Farbverläufe.                                                               }
{                                                                              }
{                                                                              }
{  OpenSource:                                                                 }
{                                                                              }
{  Diese Komponente kann beliebig und frei eingesetzt werden.                  }
{  Sie unterliegt keiner rechtlichen Bestimmung.                               }
{  Auch kannst du die Komponente beliebig anpassen oder weiter entwickeln.     }
{                                                                              }
{  Unter ReleaseNotes kannst du deinen Namen hinschreiben und erklären         }
{  was du gemacht hast. ES WERDEN KEINE NAMEN GELÖSCHT. Es wäre nett, wenn     }
{  du nach deinen Änderungen die Komponente wieder öffentlich zur Verfügung    }
{  stellst und die relevanten Personen darüber informierst.                    }                                                        
{                                                                              }
{------------------------------------------------------------------------------}
///////////////////////////////////////////////////////////////////////////////
// SOFTSCROLLINGTEXT (OS) 2009, Enemyleft [email]enemyleft@gmail.com[/email]
///////////////////////////////////////////////////////////////////////////////
// ReleaseNotes:
//
// > v1.0.0 27.05.09 - Enemyleft > Fertiges **RELEASE 1.0**
//
// RELEASE 1.0 Features By Enemyleft
// ---------------------------------
// . SoftScrollingText
// . blend- in/-out properties
// . horizontal gradient
// . vertical gradient
// . many color propertys
//
///////////////////////////////////////////////////////////////////////////////

unit SSText;

interface

uses
  SysUtils, Classes, Controls, ExtCtrls, Windows, Dialogs, Messages, GraphUtil,
  Graphics, Math, GR32, GR32_Image;

type
  gradient = (grNone, grToptoBottom, grLefttoRight);
  BlendMode = (bmNone, bmIn, bmOut);

  TSSText = class(TCustomControl)
  private
    { Private-Deklarationen }

    tx: Integer;
    ty: Integer;
    ScrollTimer: TTimer;
    TextWidth: Integer;

    FTextPosFromLeft: Integer;
    FTextBeginHight: Integer;

    FColor1: TColor;
    FColor2: TColor;
    FPanelColorTop1: TColor;
    FPanelColorTop2: TColor;
    FPanelColorBottom1: TColor;
    FPanelColorBottom2: TColor;
    FPanelColorRight1: TColor;
    FPanelColorRight2: TColor;
    FPanelColorLeft1: TColor;
    FPanelColorLeft2: TColor;
    FGradient: gradient;
    FShowPanelTop: Boolean;
    FShowPanelLeft: Boolean;
    FShowPanelRight: Boolean;
    FShowPanelBottom: Boolean;

    FCaption: TCaption;
    FBorder: Boolean;
    FBorderColor: TColor;

    FLines: TStrings;
    FScroll: Boolean;
    FSpeedx: Integer;
    FSpeedy: Integer;
    FSpReversex: Boolean;
    FSpReversey: Boolean;

    pb: TPaintBox32;
    bmp32: TBitmap32;

    procedure SetTextPosFromLeft(Value: Integer);
    procedure SetTextBeginHight(Value: Integer);
    procedure SetColor1(Value: TColor);
    procedure SetColor2(Value: TColor);
    procedure SetPanelColorTop1(Value: TColor);
    procedure SetPanelColorTop2(Value: TColor);
    procedure SetPanelColorBottom1(Value: TColor);
    procedure SetPanelColorBottom2(Value: TColor);
    procedure SetPanelColorRight1(Value: TColor);
    procedure SetPanelColorRight2(Value: TColor);
    procedure SetPanelColorLeft1(Value: TColor);
    procedure SetPanelColorLeft2(Value: TColor);
    procedure SetGradient(Value: gradient);
    procedure SetShowPanelTop(Value: Boolean);
    procedure SetShowPanelLeft(Value: Boolean);
    procedure SetShowPanelRight(Value: Boolean);
    procedure SetShowPanelBottom(Value: Boolean);
    procedure SetCaption(Value: TCaption);
    procedure SetBorder(Value: Boolean);
    procedure SetBorderColor(Value: TColor);
    procedure SetLines(Value: TStrings);
    procedure SetSpeedx(Value: Integer);
    procedure SetSpeedy(Value: Integer);
    procedure SetSpReversex(Value: Boolean);
    procedure SetSpReversey(Value: Boolean);
    procedure SetScroll(Value: Boolean);
    procedure TimerAction(Sender: TObject);
    procedure PaintText;

  protected
    { Protected-Deklarationen }

    procedure SetTextWidth;
    procedure DrawGradientV(bmp32: TBitMap32; Color1, Color2: TColor; Rect: TRect; Alpha: Integer; Blend: blendmode);
    procedure DrawGradientH(bmp32: TBitMap32; Color1, Color2: TColor; Rect: TRect; Alpha: Integer; Blend: blendmode);
    procedure CMTextChanged(var Message: TMessage); message CM_TEXTCHANGED;
    procedure Paint; override;

  public
    { Public-Deklarationen }

    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    
  published
    { Published-Deklarationen }
    property TextPosL: Integer read FTextPosFromLeft write SetTextPosFromLeft;
    property TextPosT: Integer read FTextBeginHight write SetTextBeginHight;
    property Color1: TColor read FColor1 write SetColor1;
    property Color2: TColor read FColor2 write SetColor2;
    property PanelColorTop1: TColor read FPanelColorTop1 write SetPanelColorTop1;
    property PanelColorTop2: TColor read FPanelColorTop2 write SetPanelColorTop2;
    property PanelColorBottom1: TColor read FPanelColorBottom1 write SetPanelColorBottom1;
    property PanelColorBottom2: TColor read FPanelColorBottom2 write SetPanelColorBottom2;
    property PanelColorRight1: TColor read FPanelColorRight1 write SetPanelColorRight1;
    property PanelColorRight2: TColor read FPanelColorRight2 write SetPanelColorRight2;
    property PanelColorLeft1: TColor read FPanelColorLeft1 write SetPanelColorLeft1;
    property PanelColorLeft2: TColor read FPanelColorLeft2 write SetPanelColorLeft2;
    property Gradient: gradient read FGradient write SetGradient;
    property ShowPanelTop: Boolean read FShowPanelTop write SetShowPanelTop;
    property ShowPanelLeft: Boolean read FShowPanelLeft write SetShowPanelLeft;
    property ShowPanelRight: Boolean read FShowPanelRight write SetShowPanelRight;
    property ShowPanelBottom: Boolean read FShowPanelBottom write SetShowPanelBottom;
    property Caption: TCaption read FCaption write SetCaption;
    property Lines: TStrings read FLines write SetLines;
    property Speedx: Integer read FSpeedx write SetSpeedx;
    property Speedy: Integer read FSpeedy write SetSpeedy;
    property SpReversex: Boolean read FSpReversex write SetSpReversex;
    property SpReversey: Boolean read FSpReversey write SetSpReversey;
    property Scroll: Boolean read FScroll write SetScroll;
    property ShowBorder: Boolean read FBorder write SetBorder;
    property BorderColor: TColor read FBorderColor write SetBorderColor;

    property Font;
    property Anchors;
    property Action;
    property Align;
    property BiDiMode;
    property DragCursor;
    property DragKind;
    property DragMode;
    property ParentBiDiMode;
    property ParentShowHint;
    property PopupMenu;
    property ShowHint;
    property TabOrder;
    property TabStop;
    property Visible;

    property OnClick;

  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('enemyleft', [TSSText]);
end;

constructor TSSText.Create(AOwner: TComponent);
begin
 inherited Create(AOwner);

 DoubleBuffered := true; // Ohne DoubleBuffer würde das ganz schön flackern!
 Width := 200;
 Height := 100;

 FColor1 := clBtnFace;
 FColor2 := clBtnFace;
 FPanelColorTop1 := clBtnFace;
 FPanelColorTop2 := clBtnFace;
 FPanelColorBottom1 := clBtnFace;
 FPanelColorBottom2 := clBtnFace;
 FPanelColorRight1 := clBtnFace;
 FPanelColorRight2 := clBtnFace;
 FPanelColorLeft1 := clBtnFace;
 FPanelColorLeft2 := clBtnFace;
 FGradient := grNone;
 FShowPanelTop := True;
 FShowPanelLeft := False;
 FShowPanelRight := False;
 FShowPanelBottom := True;
 FBorder := False;
 FBorderColor := clWindowText;

 FLines := TStringList.Create;
 FLines.Add('#enemyleft');
 TextWidth := 100;

 FTextPosFromLeft := 10;
 FTextBeginHight := 20;
 tx := FTextBeginHight;
 ty := FTextPosFromLeft;
 FScroll := False;
 FSpeedx := 1;
 FSpeedy := 0;
 FSpReversex := False;
 FSpReversey := False;

 ScrollTimer := TTimer.Create(Self);
 ScrollTimer.Interval := 100;
 ScrollTimer.OnTimer := TimerAction;
 ScrollTimer.Enabled := FScroll;

 pb := TPaintBox32.Create(Self);
 pb.Parent := Self;
 pb.Width := Width;
 pb.Height := Height;

 bmp32 := TBitmap32.Create;
 bmp32.Width := pb.Width;
 bmp32.Height := pb.Height;
end;

destructor TSSText.Destroy;
begin
 inherited Destroy;
end;

procedure TSSText.DrawGradientV(bmp32: TBitMap32; Color1, Color2: TColor; Rect: TRect; Alpha: Integer; Blend: blendmode);
var
 i, R, G, B: Integer;
 blender: Integer;
 col32: TColor32;
begin

 blender := 255 div (Rect.Right - Rect.Left);

 Color1 := ColorToRGB(Color1);
 Color2 := ColorToRGB(Color2);

 for i := 0 to (Rect.Right - Rect.Left) - 1 do
 begin

  R := GetRValue(Color1) - (((GetRValue(Color1) - GetRValue(Color2)) * I) DIV (Rect.Right - Rect.Left));
  G := GetGValue(Color1) - (((GetGValue(Color1) - GetGValue(Color2)) * I) DIV (Rect.Right - Rect.Left));
  B := GetBValue(Color1) - (((GetBValue(Color1) - GetBValue(Color2)) * I) DIV (Rect.Right - Rect.Left));

  col32 := Color32(R,G,B,Alpha);
  bmp32.LineAs(Rect.Left + I, Rect.Top, Rect.Left + I, Rect.Bottom, col32);

  if Blend = bmIn then
  begin
    Alpha := Alpha - blender;
    if Alpha < 0 then
      Alpha := 0;
  end
  else if Blend = bmOut then
  begin
    Alpha := Alpha + blender;
    if Alpha > 255 then
      Alpha := 255;
  end;
 end;
end;

procedure TSSText.DrawGradientH(bmp32: TBitMap32; Color1, Color2: TColor; Rect: TRect; Alpha: Integer; Blend: blendmode);
var
 i, R, G, B: Integer;
 blender: Integer;
 col32: TColor32;
begin

 blender := 255 div (Rect.Bottom - Rect.Top);

 Color1 := ColorToRGB(Color1);
 Color2 := ColorToRGB(Color2);

 for i := 0 to (Rect.Bottom - Rect.Top) - 1 do
 begin

  R := GetRValue(Color1) - (((GetRValue(Color1) - GetRValue(Color2)) * I) DIV (Rect.Bottom - Rect.Top));
  G := GetGValue(Color1) - (((GetGValue(Color1) - GetGValue(Color2)) * I) DIV (Rect.Bottom - Rect.Top));
  B := GetBValue(Color1) - (((GetBValue(Color1) - GetBValue(Color2)) * I) DIV (Rect.Bottom - Rect.Top));

  col32 := Color32(R,G,B,Alpha);
  bmp32.LineAs(Rect.Left, Rect.Top + I, Rect.Right, Rect.Top + I, col32);

  if Blend = bmIn then
  begin
    Alpha := Alpha - blender;
    if Alpha < 0 then
      Alpha := 0;
  end
  else if Blend = bmOut then
  begin
    Alpha := Alpha + blender;
    if Alpha > 255 then
      Alpha := 255;
  end;
 end;
end;

procedure TSSText.TimerAction(Sender: TObject);
begin
  // move text up / down
  if not FSpReverseX then
  begin
    if tx <= 0 - Canvas.TextHeight(FLines.Strings[0]) * FLines.Count then
      tx := Height;
    tx := tx - FSpeedx
  end
  else
  begin
    if tx >= Height then
      tx := 0 - Canvas.TextHeight(FLines.Strings[0]) * FLines.Count;
    tx := tx + FSpeedx
  end;
  // move text left / right
  if not FSpReverseY then
  begin
    if ty >= Width then
      ty := 0 - TextWidth;
    ty := ty + FSpeedy
  end
  else
  begin
    if ty <= 0 - TextWidth then
      ty := Width;
    ty := ty - FSpeedy
  end;
  // repaint
  Repaint;
end;

procedure TSSText.PaintText;
var
  I: Integer;
begin
  if FLines.Count > 0 then
  begin
    bmp32.Canvas.Font.Assign(Font);
    bmp32.Canvas.Brush.Style := bsClear;
    for I := 0 to FLines.Count -1 do
      bmp32.Canvas.TextOut(ty, tx + bmp32.Canvas.TextHeight(FLines.Strings[0]) * I, FLines.Strings[I]);
  end;
end;

procedure TSSText.Paint;
var
  Rect1,Rect2,Rect3,Rect4,Rect5: TRect;
begin

  pb.width := Width;
  pb.Height := Height;

  bmp32.Width := pb.Width;
  bmp32.Height := pb.Height;

  // übergabeparameter Rect bereitstellen,
  // wenn Verlauf ausgewählt
  if Gradient <> grNone then
  begin
   Rect1.Left := 0;
   Rect1.Top := 0;
   Rect1.Right := Width;
   Rect1.Bottom := height;
   // Verlauf herstellen
   if (FGradient = grTopToBottom) then
     DrawGradientH(bmp32, FColor1, FColor2, Rect1, 255, bmNone)
   else if (FGradient = grLeftToRight) then
     DrawGradientV(bmp32, FColor1, FColor2, Rect1, 255, bmNone)
  end
  else
  begin
   bmp32.Canvas.Pen.Color := FColor1;
   bmp32.Canvas.Brush.Style := bsSolid;
   bmp32.Canvas.Brush.Color := FColor1;
   bmp32.Canvas.Rectangle(0,0,Width,Height);
  end;

  {panel gradient for blending: TOP}
  with Rect2 do
  begin
    Left := 0;
    Top := 0;
    Right := Width;
    Bottom := 51;
  end;
  {panel gradient for blending: BOTTOM}
  with Rect3 do
  begin
    Left := 0;
    Top := Height-51;
    Right := Width;
    Bottom := Height;
  end;
  {panel gradient: LEFT}
  with Rect4 do
  begin
    Left := 0;
    Top := 0;
    Right := 51;
    Bottom := Height;
  end;
  {panel gradient: RIGHT}
  with Rect5 do
  begin
    Left := Width-51;
    Top := 0;
    Right := Width;
    Bottom := Height;
  end;

  PaintText;

  {TOP blending}
  if FShowPanelTop then
    DrawGradientH(bmp32, FPanelColorTop1, FPanelColorTop2, Rect2, 255, bmIn);
  {BOTTOM blending}
  if FShowPanelBottom then
    DrawGradientH(bmp32, FPanelColorBottom1, FPanelColorBottom2, Rect3, 0, bmOut);
  {LEFT panel}
  if FShowPanelLeft then
    DrawGradientV(bmp32, FPanelColorLeft1, FPanelColorLeft2, Rect4, 255, bmIn);
  {RIGHT panel}
  if FShowPanelRight then
    DrawGradientV(bmp32, FPanelColorRight1, FPanelColorRight2, Rect5, 0, bmOut);

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

  pb.Buffer.Assign(bmp32);

end;

procedure TSSText.SetTextWidth;
var
  I: Integer;
begin
  for I := 0 to Lines.Count - 1 do
    if TextWidth < Canvas.TextWidth(FLines.Strings[I]) then
      TextWidth := Canvas.TextWidth(FLines.Strings[I]);
end;

procedure TSSText.SetColor1(Value: TColor);
begin
 if (FColor1 <> Value) then
 begin
  FColor1 := Value;
  RePaint;
 end;
end;

procedure TSSText.SetPanelColorTop1(Value: TColor);
begin
 if (FPanelColorTop1 <> Value) then
 begin
  FPanelColorTop1 := Value;
  RePaint;
 end;
end;

procedure TSSText.SetPanelColorTop2(Value: TColor);
begin
 if (FPanelColorTop2 <> Value) then
 begin
  FPanelColorTop2 := Value;
  RePaint;
 end;
end;

procedure TSSText.SetPanelColorBottom1(Value: TColor);
begin
 if (FPanelColorBottom1 <> Value) then
 begin
  FPanelColorBottom1:= Value;
  RePaint;
 end;
end;

procedure TSSText.SetPanelColorBottom2(Value: TColor);
begin
 if (FPanelColorBottom2 <> Value) then
 begin
  FPanelColorBottom2:= Value;
  RePaint;
 end;
end;
procedure TSSText.SetColor2(Value: TColor);
begin
 if (FColor2 <> Value) then
 begin
  FColor2 := Value;
  RePaint;
 end;
end;

procedure TSSText.SetGradient(Value: gradient);
begin
 if (FGradient <> Value) then
 begin
  FGradient := Value;
  RePaint;
 end;
end;

procedure TSSText.CMTextChanged(var Message: TMessage);
begin
 FCaption := Name;
end;

procedure TSSText.SetCaption(Value: TCaption);
begin
 if (FCaption <> Value) then
 begin
  FCaption := Value;
  RePaint;
 end;
end;

procedure TSSText.SetBorder(Value: Boolean);
begin
 if (FBorder <> Value) then
 begin
  FBorder := Value;
  RePaint;
 end;
end;

procedure TSSText.SetBorderColor(Value: TColor);
begin
 if (FBorderColor <> Value) then
 begin
  FBorderColor := Value;
  RePaint;
 end;
end;

procedure TSSText.SetLines(Value: TStrings);
begin
  if (FLines <> Value) then
  begin
    FLines.Assign(Value);
    SetTextWidth;
    RePaint;
  end;
end;

procedure TSSText.SetSpeedx(Value: Integer);
begin
  if (FSpeedx <> Value) then
    FSpeedx := Value;
end;

procedure TSSText.SetSpeedy(Value: Integer);
begin
  if (FSpeedy <> Value) then
    FSpeedy := Value;
end;

procedure TSSText.SetScroll(Value: Boolean);
begin
  if (FScroll <> Value) then
  begin
    FScroll := Value;
    ScrollTimer.Enabled := FScroll;
  end;
end;

procedure TSSText.SetPanelColorRight1(Value: TColor);
begin
  if (FPanelColorRight1 <> Value) then
  begin
    FPanelColorRight1 := Value;
    Repaint;
  end;
end;

procedure TSSText.SetPanelColorRight2(Value: TColor);
begin
  if (FPanelColorRight2 <> Value) then
  begin
    FPanelColorRight2 := Value;
    Repaint;
  end;
end;

procedure TSSText.SetPanelColorLeft1(Value: TColor);
begin
  if (FPanelColorLeft1 <> Value) then
  begin
    FPanelColorLeft1 := Value;
    Repaint;
  end;
end;

procedure TSSText.SetPanelColorLeft2(Value: TColor);
begin
  if (FPanelColorLeft2 <> Value) then
  begin
    FPanelColorLeft2 := Value;
    Repaint;
  end;
end;

procedure TSSText.SetShowPanelTop(Value: Boolean);
begin
  if (FShowPanelTop <> Value) then
  begin
    FShowPanelTop := Value;
    Repaint;
  end;
end;

procedure TSSText.SetShowPanelLeft(Value: Boolean);
begin
  if (FShowPanelLeft <> Value) then
  begin
    FShowPanelLeft := Value;
    Repaint;
  end;
end;

procedure TSSText.SetShowPanelRight(Value: Boolean);
begin
  if (FShowPanelRight <> Value) then
  begin
    FShowPanelRight := Value;
    Repaint;
  end;
end;

procedure TSSText.SetShowPanelBottom(Value: Boolean);
begin
  if (FShowPanelBottom <> Value) then
  begin
    FShowPanelBottom := Value;
    Repaint;
  end;
end;

procedure TSSText.SetTextPosFromLeft(Value: Integer);
begin
  if (FTextPosFromLeft <> Value) then
  begin
    FTextPosFromLeft := Value;
    Repaint;
  end;
end;

procedure TSSText.SetTextBeginHight(Value: Integer);
begin
  if (FTextBeginHight <> Value) then
  begin
    FTextBeginHight := Value;
    tx := FTextBeginHight;
    Repaint;
  end;
end;

procedure TSSText.SetSpReversex(Value: Boolean);
begin
  if (FSpReverseX <> Value) then
    FSpReverseX := Value;
end;

procedure TSSText.SetSpReversey(Value: Boolean);
begin
  if (FSpReverseY <> Value) then
    FSpReverseY := Value;
end;

end.
Ist das nur mein Gefühl, oder ist die ganze Welt verrückt geworden!?
  Mit Zitat antworten Zitat
 


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:35 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