Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Laufschrift ohne sofort wieder den Anfang zu sehen (https://www.delphipraxis.net/37803-laufschrift-ohne-sofort-wieder-den-anfang-zu-sehen.html)

Helmi 10. Jan 2005 19:37


Laufschrift ohne sofort wieder den Anfang zu sehen
 
Hallo,

Sorry dass ich schon wieder eine Laufschrift-Frage stellen muss, aber ich möchte gerne eine Laufschrift programmieren, die den Text von rechts nach links anzeigt.
Aber wenn das Ende des Textes kommt, dann soll nicht gleich wieder der erste Buchstabe des Strings zu sehen sein, sondern erst wieder, wenn der komplette String einmal durchgelaufen ist.

Weiss jemand wie man das programmieren könnte?

Aenogym 10. Jan 2005 19:42

Re: Laufschrift ohne sofort wieder den Anfang zu sehen
 
hi,

also spontan so:

Delphi-Quellcode:
//einen timer und ein label aufs form setzen

//folgendes im timer:
if label1.left > (label1.width)* -1 then
  label1.left := label1.left - 1
else
  label1.left := form1.clientwidth;
sollte klappen wie ein normales HTML-marquee.

Aenogym

Helmi 10. Jan 2005 19:44

Re: Laufschrift ohne sofort wieder den Anfang zu sehen
 
Hallo,

danke - aber ich hab vergessen zu erwähnen, dass der Text in einer Statusbar ist und dort kann ich das nicht mit left machen, es müssten also die Buchstaben bewegt werden.

Aenogym 10. Jan 2005 19:46

Re: Laufschrift ohne sofort wieder den Anfang zu sehen
 
könntest ja versuchen, es im canvas mit TextOut zu zeichnen. und eben die X-koordinate wie die left-property benutzen.

Aenogym

Helmi 10. Jan 2005 19:51

Re: Laufschrift ohne sofort wieder den Anfang zu sehen
 
hättest du da vielleicht ein kleines Beispielchen?

*liebguck* :angel2:

gsh 10. Jan 2005 19:53

Re: Laufschrift ohne sofort wieder den Anfang zu sehen
 
Ich kenn mich zwar nicht so gut mit laufstrings aus aber ich mir ist spotan eingefallen des man einfach ein paar leerzeichen am schluss dazu macht. des kann man dann auch noch verbessern in dem man abfragt wie breit ein leerzeichen ist und dann sich die breite vom Fenster nimmt und soviele leerzeichen hinzufügt wie notwendig. :thumb:

gsh

Aenogym 10. Jan 2005 19:55

Re: Laufschrift ohne sofort wieder den Anfang zu sehen
 
hi,

jo hab mal schnell nen kleines beispielchen gezimmert. problem ist nur, dass die statusbar "überzeichnet" wird. also dadrunter ist zum beispiel der grip weg und so..... musst mal noch etwas verbessern :thumb:

edit: update: jetzt gehts ;)

Delphi-Quellcode:
//x im public bereich des forms als integer deklarieren
//timer-intervall auf 20 oder so
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  statusbar1.repaint;

  if x > statusbar1.canvas.TextWidth('hallo')*-1 then
  begin
    statusbar1.Canvas.TextOut(x, 2, 'hallo');
    dec(x);
  end
  else
    x := statusbar1.ClientWidth;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  statusbar1.Canvas.Font.Color := clBlue;
  statusbar1.canvas.Brush.Style := bsclear;
  statusbar1.Canvas.Font.Size := 12;
end;
Aenogym

Helmi 10. Jan 2005 20:11

Re: Laufschrift ohne sofort wieder den Anfang zu sehen
 
Hallo,

ich bin jetzt mal ganz frech: Dein Beispiel ist ganz nett und geht auch, nur sollte halt die Statusbar ned übermalt werden und der Text soll nur in einem Statusbar-Feld laufen

Aenogym 10. Jan 2005 20:15

Re: Laufschrift ohne sofort wieder den Anfang zu sehen
 
ja update. übermalt wird nichtmehr und das mit dem feld kannst du slebst amchen. musst lediglich die koordinaten einschränken.

das traue ich dir zu ;)

Aenogym

Helmi 10. Jan 2005 20:18

Re: Laufschrift ohne sofort wieder den Anfang zu sehen
 
Zitat:

Zitat von Aenogym
das traue ich dir zu ;)

Endlich jemand der an mich glaubt :oops: :wink:

Helmi 10. Jan 2005 21:07

Re: Laufschrift ohne sofort wieder den Anfang zu sehen
 
Hallo Aenogym,

ich habe mir erlaubt :mrgreen: deinen Code zu verbessern und diesen nur in einem StatusBar-Feld anzeigen zu lassen:

Code:
//Timer1.Interval auf 20 ms
//Statusbar mit 3 Feldern

private
  x, i: Integer;
  S: String;
  r: TRect;

{ ... }

uses CommCtrl;

{ ... }

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  StatusBar1.Perform(SB_GETRECT, 1, integer(@r));

  r.Right := r.Right - 1; //-1 wegen dem rechten Rand
  r.Left := r.Left + 1;   //+1 wegen dem linken Rand

  StatusBar1.Repaint;

  If (x > (StatusBar1.canvas.TextWidth(S) - r.Left) * -1) then
    begin
      i := StatusBar1.Canvas.Font.Size div 2; //Die Hälfte der Schrifthöhe berechnen

      StatusBar1.Canvas.FillRect(r);
      StatusBar1.Canvas.TextRect(r, x, ((r.Bottom - r.Top) div 2) - i, S);
      dec(x);
    end
  else
    x := r.Right - r.Left; //Right - Left = Breite des Feldes
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
//  statusbar1.Canvas.Font.Color := clBlue;
  StatusBar1.canvas.Brush.Style := bsclear;
//  statusbar1.Canvas.Font.Size := 12;

  S := 'Ich bin ein armer Delphi-Programmierer;
end;

Aenogym 10. Jan 2005 21:20

Re: Laufschrift ohne sofort wieder den Anfang zu sehen
 
bei deiner zeile
Delphi-Quellcode:
  else
    x := r.Right - r.Left; //Right - Left = Breite des Feldes
würde ich das - r.left; wegnehmen- ich finde das sieht schöner aus. sonst fängt der text nämlich mitten im feld wieder an ;)

ich füge das mal der code library hinzu :D

Aenogym

Helmi 10. Jan 2005 21:23

Re: Laufschrift ohne sofort wieder den Anfang zu sehen
 
Zitat:

Zitat von Aenogym
bei deiner zeile
Delphi-Quellcode:
  else
    x := r.Right - r.Left; //Right - Left = Breite des Feldes
würde ich das - r.left; wegnehmen- ich finde das sieht schöner aus. sonst fängt der text nämlich mitten im feld wieder an ;)

Also ich sehe keinen Unterschied zwischen
Code:
  x := r.Right - r.Left;
und:
Code:
  x := r.Right;
.

Zitat:

Zitat von Aenogym
ich füge das mal der code library hinzu :D
Aenogym

Welch eine Ehre :angel2: :mrgreen: :angel2:

Aenogym 10. Jan 2005 21:29

Re: Laufschrift ohne sofort wieder den Anfang zu sehen
 
Zitat:

Zitat von Helmi
Also ich sehe keinen Unterschied zwischen
Code:
  x := r.Right - r.Left;
und:
Code:
  x := r.Right;

also bei deiner zeile fängt der text ein stückchen zu weit links an, also mitten im feld. mach dien feld mal größer (width=200), dann glaube ich, sieht man es besser.

Aenogym

Helmi 10. Jan 2005 21:33

Re: Laufschrift ohne sofort wieder den Anfang zu sehen
 
Hallo,

das kann ich nun nicht bestätigen.

ich habe 3 Felder: Größe Feld 1 = 222; Größe Feld 2 = 500; Größe Feld 3 = 50
(Die Größen hab ich schon mal verkleinert und vergrößert)

Jedesmal beginnt - so wie es sein soll - der Text ganz rechts, also am Ende des Feldes.

[edit] Du hast vollkommen recht! - war ein Fehler von mir!

es muss:
Code:
x := r.Right;
heissen.

I`m so sorry!
[/edit]

Aenogym 10. Jan 2005 21:42

Re: Laufschrift ohne sofort wieder den Anfang zu sehen
 
Zitat:

Zitat von Helmi
Hallo,

das kann ich nun nicht bestätigen.

ich habe 3 Felder: Größe Feld 1 = 222; Größe Feld 2 = 500; Größe Feld 3 = 50
(Die Größen hab ich schon mal verkleinert und vergrößert)

Jedesmal beginnt - so wie es sein soll - der Text ganz rechts, also am Ende des Feldes.

[edit] Du hast vollkommen recht! - war ein Fehler von mir!

es muss:
Code:
x := r.Right;
heissen.

I`m so sorry!
[/edit]

ich les mir die größenangaben durch, mach sie nach usw. probier aus. wundere mich schon....
und dann seh ich, dass da nochwas steht :wall:
aber nungut. das wird langsam off-topic. schluss jetzt :mrgreen:

Aenogym

donderdritte 16. Sep 2005 22:25

Re: Laufschrift ohne sofort wieder den Anfang zu sehen
 
danke erstmal an Aenogym durch den quelltext bin ich näher an die lösung einer informatik hausaufgabe gekommen

könnt ihr mir aber noch verraten ob es auch möglich ist das die schrift nach rechts läuft und von links wieder kommt, da dies der bestandteil der aufgabe ist ich es aber mit umstellen des codes nicht hinkriege.
es wäre außerdem gut wenn der text direkt wieder herauskommt und nicht mit einer kleinen pause, aber das obere ist eigentlich noch wichtiger

danke im voraus


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:48 Uhr.

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