![]() |
Fehler bei Lauftext
Hallo!
Ich programmiere mir gerade einen Lauftext, der von rechts nach links läuft; Dazu verwende ich eine TPanel-,eine TLabel-, und eine TTimer-Komponente; Folgende Source verwende ich, um das ganze umzusetzen:
Delphi-Quellcode:
Mein Problem: Sobald der Timer aktiviert ist, d.h. der Text in dem Label läuft zwar, aber er läuft über den Rand des Labels hinaus, bis an den Rand der Form. Dort bleibt er dann stehen;
procedure TForm1.TextTimer1Timer(Sender: TObject);
begin if Label1.Left = 0 then begin if Label1.Width = 0 then begin label1.left := SongPanel.Width; label1.Width := 145; end else begin label1.Width := label1.Width -1; end; end else begin label1.Left := label1.Left -1; end; end; procedure TForm1.FormCreate(Sender: TObject); begin Texttimer1.Interval := 10; SongPanel.DoubleBuffered := True; end; Weiß vielleicht jemand eine Lösung; Gruss DelphiUser7 |
Re: Fehler bei Lauftext
Hallo!
Wenn Du statt der 145 als label1.width folgendes verwendest, sollte es klappen:
Delphi-Quellcode:
MfG
label1.canvas.TextWidth(label1.caption);
Peter //Edit: und wenn Du folgendes statt Deiner Prozedur als OnTimer nimmst, wird es noch schöner:
Delphi-Quellcode:
if label1.left = -label1.width then
label1.left := SongPanel.width else label1.left := label1.Left -1; |
Re: Fehler bei Lauftext
|
Re: Fehler bei Lauftext
Änder doch einfach den Inhalt des Labels?
Immer den ersten Buchstaben wegnehmen, und dann eben wieder hinten nach ein paar Leezeichen anfügen. War bloß ne Idee, Czapie. |
Re: Fehler bei Lauftext
Hallo Peter Lustig!
Ich habe zwar deine Source benutzt, die du mir aufgeschrieben hast, der Lauftext 'läuft' aber immer noch über die Grenze des Labels hinaus. Bist du dir ganz sicher, dass du dich da nicht geirrt hast? Bitte schau es dir nochmal an. Gruss DelphiUser7 |
Re: Fehler bei Lauftext
Hallo!
Also, wie folgt funktioniert es bei mir (ganz genau, damit wir nicht von zwei unterschiedlichen Sachen reden): 1. ich packe ein Panel auf die Form 2. ich packe ein Label ins das Panel 3. ich packe einen Timer auf die Form 4. der Timer bekommt folgenden Code:
Delphi-Quellcode:
Fertig. Damit klappt es wunderbar.
procedure TForm1.Timer1Timer(Sender: TObject);
begin if label1.left = -label1.width then label1.left := Panel1.width else label1.left := label1.Left -1; end; MfG Peter |
Re: Fehler bei Lauftext
Hallo Peter Lustig!
Damit klappt es zwar wunderbar, aber vielleicht habe ich mich bislang etwas undeutlich ausgedrückt, denn ich meinte eigentlich, dass sich der Ausdehnungsbereich des Labels nur auf das Panel bezieht, d.h. dass das Label zwar läuft, aber immer nur innerhalb des Panels. Und das tut es bei mir nicht! Noch eine Frage: Hast du das Label in der Form erstellt, und dann über einfach über das Panel gezogen, oder hast du das Label direkt im Panel erstellt? Also bei mir funktioniert es überhaupt nur, wenn ich das Label 'separat' erstelle, und es dann auf das Panel ziehe; allerdings tritt dann immer noch der Fehler auf, dass der Lauftext nicht am anderen Ende der Form wieder erscheint, sondern sich am linken Rand der Form auflöst...dort wieder erscheint...auflöst...dort wieder erscheint...; Gruss DelphiUser7 |
Re: Fehler bei Lauftext
Zitat:
Aber selbst nach deiner Vorgehensweise darf sich der Text nicht am linken Rand wiederholen. Da hast du dich wohl beim copy/paste vertan oder falsch abgeschrieben. |
Re: Fehler bei Lauftext
Hallo!
Wieso beim Paste/Copy?? Wenn ich das Label in dem Panel erstelle, bewegt es sich überhaupt nicht! Wie kann das sein??? Bitte um schnelle Antwort! Gruss DelphiUser7 |
Re: Fehler bei Lauftext
Hallo!
Um erst einmal Deine Frage zu beantworten: Ich habe das Label direkt in das Panel "hineingeklickt". Wenn es gar nicht klappt, dann mach es folgendermaßen: 1. packe ein Panel mit Namen "Panel1" auf die Form (wenn es anders lautet, nachfolgenden Quelltext umschreiben). 2. verwende folgenden Code, um ein Label "myLabel" während der Laufzeit zu erzeugen, welches sich nur im Panel bewegt.
Delphi-Quellcode:
Mit diesem Code (und Timer1 auf 10ms eingestellt), sollte es funktionieren. Zumindest hat es das bei mir.
var
Form1: TForm1; myLabel : TLabel; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin myLabel := TLabel.Create(Panel1); myLabel.Parent := Panel1; myLabel.Caption := 'Testtext'; myLabel.AutoSize := True; myLabel.Left := (Panel1.Width - myLabel.Width) div 2; myLabel.Top := (Panel1.Height - myLabel.Height) div 2; end; procedure TForm1.Timer1Timer(Sender: TObject); begin if myLabel.left = -myLabel.width then myLabel.left := Panel1.width else myLabel.left := myLabel.Left -1; end; MfG Peter |
Re: Fehler bei Lauftext
Hallo Peter Lustig!
Wie soll das denn gehen? Ich kann doch nicht erst zur Laufzeit ein Label erzeugen, wenn ich es schon als Variable eingelesen habe, aber nicht erzeugt habe! Und wenn ich es schon vorher erzeuge, bewegt sich das ganze Panel,bzw. es dehnt sich aus, bis ins unendliche!! Bitte um schnelle Antwort! Gruss DelphiUser7 |
Re: Fehler bei Lauftext
Hallo!
Der Code oben funktioniert problemlos! Ich habe ihn in Delphi geschrieben und getestet. Außerdem bin ich gerade noch einmal selbst den Anweisungen in meinem letzten Posting gefolgt und bin auf keine Probleme gestoßen! Seit wann führt es zu Problemen, eine Komponente zur Laufzeit zu erzeugen? Die Variable ist nur eine Referenz auf das Objekt. Wenn das Objekt noch nicht erzeugt ist, dann ist myLabel = nil. Erst mir Create erzeuge ich das Objekt im Speicher und kann damit arbeiten. Und wieso soll sich das Panel bewegen, wenn Du nirgendwo den left-Wert des Panels änderst? Bitte versuche mal den Anweisungen zu folgen und wenn Du auf Probleme stößt, dann poste Deinen Quelltext. So kann mir Dir sehr viel besser helfen! MfG Peter |
Re: Fehler bei Lauftext
Hallo!
Ich glaube, es ist nicht nötig, dass ich meinen Quelltext poste, denn ich habe ihn einfach hier rauskopiert, und die entsprechenden Stellen geändert (Label.Name,Panel.Name,etc...); aber ich kann ihn ja trotzdem mal posten. Außerdem ist mir jetzt etwas aufgefallen: Der Text flimmert zwar, läuft aber nicht. Diese Entdeckung verdanke ich der Tatsache, dass ich die Eigenschaft 'DoubleBuffered' auf 'False' gesetzt habe. Hier noch der Quelltext (von OnFormCreate):
Delphi-Quellcode:
Und von 'TTimer':
procedure TForm1.FormCreate(Sender: TObject);
begin begin Play1.Enabled := False; Pause1.Enabled := False; Stop1.Enabled := False; NextTrack.Enabled := False; LastTrack.Enabled := False; end; TextTimer1.Enabled := True; myLabel := TLabel.Create(SongPanel); myLabel.Parent := SongPanel; myLabel.Caption := 'Testtext'; myLabel.AutoSize := True; myLabel.Left := (SongPanel.Width - myLabel.Width) div 2; myLabel.Top := (SongPanel.Height - myLabel.Height) div 2; end;
Delphi-Quellcode:
Gruss
begin
if myLabel.left = -myLabel.width then myLabel.left := SongPanel.width else myLabel.left := myLabel.Left -1; end; DelphiUser7 |
Re: Fehler bei Lauftext
Hm, komische Sache das. Und Du hast das entsprechende Label auch nur als Variable in der Unit und nicht als Komponente in der Form, oder?
|
Re: Fehler bei Lauftext
Ja. Ich habe mich eben noch mal vergewissert, dass wirklich nur die Variable deklariert wurde, und nicht etwa eine Komponente erstellt wurde.
Gruss DelphiUser7 |
Re: Fehler bei Lauftext
Hallo!
Ich starte jetzt meinen letzten Versuch, ansonsten bin ich da einfach ratlos. Folgendes ist der Quelltext eines funktionierenden Lauftext. Ich habe in einem neuen Projekt ein Panel und einen Timer auf die Form geklickt. Ansonsten nur noch per Quelltext.
Delphi-Quellcode:
Und mit diesem Quelltext läuft der Text im Panel.
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls; type TForm1 = class(TForm) Panel1: TPanel; Timer1: TTimer; procedure FormCreate(Sender: TObject); procedure Timer1Timer(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; myLabel : TLabel; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin myLabel := TLabel.Create(Panel1); myLabel.Parent := Panel1; myLabel.Caption := 'Testtext'; myLabel.AutoSize := True; myLabel.Left := (Panel1.Width - myLabel.Width) div 2; myLabel.Top := (Panel1.Height - myLabel.Height) div 2; Timer1.Interval := 10; end; procedure TForm1.Timer1Timer(Sender: TObject); begin if myLabel.left = -myLabel.width then myLabel.left := Panel1.width else myLabel.left := myLabel.Left -1; end; end. MfG Peter |
Re: Fehler bei Lauftext
Stimmt, danke. Es lag daran, dass ich das Label nicht richtig deklariert hatte...;
Gruss DelphiUser |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:31 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