Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Laufschrift an Panelgröße anpassen (https://www.delphipraxis.net/77986-laufschrift-panelgroesse-anpassen.html)

Namenloser 28. Sep 2006 13:14

Re: Laufschrift an Panelgröße anpassen
 
Delphi-Quellcode:
const MyText='Ich wandere von rechts nach links ;-) ';
      StepWidth=2;
var x,x2:Integer;
    TextWidth:Integer;

procedure TForm1.FormCreate(Sender: TObject);
begin
   x:=ClientWidth;
   x2:=clientwidth+clientwidth; //Edit: sieht besser aus, weil der text dann von rechts startet
   TextWidth:=Canvas.TextWidth(MyText)
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
   Dec(x, StepWidth);
   Dec(x2, StepWidth);
   Refresh;
   Canvas.TextOut(x, 0, MyText);
   Canvas.TextOut(x2, 0, MyText);
   If x<0 then x2:=ClientWidth+x;
   If x2<0 then x:=ClientWidth+x2;
end;
funzt :-D
(eleganter gings nicht...)

newuser01 28. Sep 2006 13:21

Re: Laufschrift an Panelgröße anpassen
 
Ja funzt :-D aber sind die Bindestriche zwischen den kommenden Text beabsichtigt oder ein Efekt ? :-D

Namenloser 28. Sep 2006 13:22

Re: Laufschrift an Panelgröße anpassen
 
Welche Bindestriche? o.O
bei mir sind da keine...

newuser01 28. Sep 2006 13:25

Re: Laufschrift an Panelgröße anpassen
 
Hat sich erledigt wenn man Step auf 1 setzt ist der Bindestrichefekt weg :-D hatte vorher Step auf 2 und Timer-interval auf 50 da kam dieser Efekt

newuser01 28. Sep 2006 13:27

Re: Laufschrift an Panelgröße anpassen
 
und noch vielen DANK an allen beteiligten für die wieder mal schnelle Hilfe !!! TOP

Namenloser 28. Sep 2006 13:39

Re: Laufschrift an Panelgröße anpassen
 
Kanns sein, dass du das Refresh rausgenommen hast?

newuser01 28. Sep 2006 14:16

Re: Laufschrift an Panelgröße anpassen
 
Ich hab es jetzt so im OnCreate und im Timer

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
 x1 := PaintBox.Width;
 x2 := PaintBox.Width + PaintBox.Width;
 TextWidth:= PaintBox.Canvas.TextWidth(sLaufSchrift);
end;

Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
var
begin
Dec(x1, StepWidth);
Dec(x2, StepWidth);
Refresh;
PaintBox.Canvas.TextOut(x1, 0, sLaufSchrift);
PaintBox.Canvas.TextOut(x2, 0, sLaufSchrift);
if x1 < 0 then x2 := PaintBox.Width + x1;
if x2 < 0 then x1 := PaintBox.Width + x2;
end;
Ich hab allerdings festgestellt der sogenannte Bindestrichefekt :-D ist kein Bindestrich sondern immer das letzte Zeichen von sLaufSchrift was warum auch immer weiter gezeichnet wird egal ob Step 1 oder 2 u.s.w ist bekomm ich auch nicht weg :mrgreen: außer ich ersetze "Refresh" durch "PaintBox.Refresh" dann geht es, flackert aber dann nur unschön rum :-D

newuser01 28. Sep 2006 15:09

Re: Laufschrift an Panelgröße anpassen
 
Ich habe das Problem erstmal gelöst in dem ich dem Text der in "sLaufSchrift" steht ein Leerzeichen angehangen habe. Zumindest wird jetzt nicht immer der letzte Buchstabe weiter gezeichnet :mrgreen:

Delphi-Quellcode:
var
sLaufSchrift:String;

sLaufSchrift := sArtist + '-' + sTitle + ' ';
Ich sollte vielleicht noch erwähnen das "sLaufSchrift" nicht als const-variable Deklariert ist sondern normal als globale Stringvariable

Namenloser 28. Sep 2006 15:25

Re: Laufschrift an Panelgröße anpassen
 
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
var buffer: TBitmap;
begin
  buffer := TBitmap.Create;
  buffer.width := paintbox.width;
  buffer.height := paintbox.height;
  Dec(x1, StepWidth);
  Dec(x2, StepWidth);
  buffer.Canvas.TextOut(x1, 0, sLaufSchrift);
  buffer.Canvas.TextOut(x2, 0, sLaufSchrift);
  if x1 < 0 then x2 := PaintBox.Width + x1;
  if x2 < 0 then x1 := PaintBox.Width + x2;
  bitblt(paintbox.canvas.handle,0,0,paintbox.width,paintbox.height,buffer.canvas.handle,0,0,srccopy);
  buffer.free;
end;
die hintergrundfarbe lässt sich ja mit FillRect und brush.color einstellen.

Wäre etwas besser als die Methode mit dem Leerzeichen am Ende. Außerdem würd ich mir überlegen, eine Klasse oder einen record für dier Laufschrift anzulegen.

So in der Art:
Delphi-Quellcode:
TLaufschrift = record
  x1,x2: integer;
  stepwidth: integer;
  sLaufschrift: string:
end;

[...]

var
Laufschrift: Tlaufschrift;
etc...

newuser01 28. Sep 2006 16:02

Re: Laufschrift an Panelgröße anpassen
 
DANKE ! funktioniert


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:41 Uhr.
Seite 2 von 3     12 3      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz