Entwickler-Ecke
Multimedia / Grafik - Senkrechte Laufschrift in Delphi
No0B - Fr 02.04.10 12:23
Titel: Senkrechte Laufschrift in Delphi
Guten, immer noch mein Problem mit der senkrechten laufschrift in Delphi.
Hab ne externe txt Datei die ich gerne anzeigen lassen möchte habs mit nem string (TStrinvaluelist) versucht Timer und label sind drin. Funzt aber net.
Vielleicht hat ja jemand etwas in der Richtung gemacht und hat nen Code für mich.
Geht das auch ohne string ? Nur mit Timer und Label?
Hier mal der Code:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80:
| unit Unit2;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, jpeg, ExtCtrls, MMSystem, MPlayer, Buttons, WebAdapt, WebComp ;
type TForm2 = class(TForm) Button1: TButton; Timer1: TTimer; Label1: TLabel; StringsValuesList1: TStringsValuesList; procedure Button1Click(Sender: TObject); procedure FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Timer1Timer(Sender: TObject);
private public end;
var Form2: TForm2;
implementation
uses main;
{$R *.dfm}
procedure TForm2.Button1Click(Sender: TObject);
begin close; end;
procedure TForm2.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin ReleaseCapture; Perform(WM_SYSCOMMAND, $F012, 0); end; procedure TForm2.Timer1Timer(Sender: TObject); begin Label1.Top := Label1.Top - 30
end;
type TForm1 = class(TForm) Timer1: TTimer; procedure Timer1Timer(Sender: TObject); private public end;
var Form1: TForm1;
{$R *.dfm}
procedure TForm1.Timer1Timer(Sender: TObject); begin Form2.AlphaBlend:=True; Form2.AlphaBlendValue:=Form1.AlphaBlendValue - 5; if Form2.AlphaBlendValue = 0 then Close; end;
end. |
Moderiert von
Narses: Code- durch Delphi-Tags ersetzt
Jakob_Ullmann - Fr 02.04.10 13:26
Es kann auch gar nicht funktionieren, weil dein Code völliger Schwachsinn ist. Das kommt davon, wenn man alles zusammenkopiert. Ansonsten bitte ich darum, dass du "funzt net" etwas genauer beschreibst, also evtl. Fehlermeldung von Delphi sowie Soll- und Ist-Verhalten des Programms.
Die Frage kann man nur beantworten, wenn du genau beschreibst, was du vor hast. Grundsätzlich kann man mit einem Label nur eine Zeile anzeigen. Diese kann zwar umbrochen werden, aber es können keine eigenen Zeilenumbrüche gesetzt werden.
Eine Lösung wäre zum Beispiel, ein Memo zu bewegen. Oder für jede Zeile ein Label und dann alles bewegen, aber ich weiß nicht, in wie weit du dich schon mit OOP befasst hast.
Übrigens: Bitte fasse deinen Code in [
delphi] statt [
code]-Tags
Hier mal eine Idee, wie man es ungefähr machen könnte:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
| const STEP_WIDTH = 5;
var zeile: array[0..2] of string; y: Integer = 20;
...
procedure TForm1.FormCreate(Sender: TObject); begin DoubleBuffered := True; zeile[0] := 'Ein'; zeile[1] := 'kleiner Text'; zeile[2] := 'zum Ausgeben...'; end;
procedure TForm1.Timer1Timer(Sender: TObject); var i: Byte; begin inc(y, STEP_WIDTH); Canvas.Rectangle(0, 0, ClientWidth - 1, ClientWidth - 1); for i := 0 to 2 do Canvas.TextOut(20, y + (Canvas.TextHeight('X') + 3) * i, zeile[i]); end; |
Das kann man dann noch mit dynamischen Arrays oder eben Stringlisten machen.
delphi10 - Fr 02.04.10 18:01
Jakob_Ullmann hat folgendes geschrieben : |
Es kann auch gar nicht funktionieren, weil dein Code völliger Schwachsinn ist. Das kommt davon, wenn man alles zusammenkopiert. Ansonsten bitte ich darum, dass du "funzt net" etwas genauer beschreibst, also evtl. Fehlermeldung von Delphi sowie Soll- und Ist-Verhalten des Programms.
Die Frage kann man nur beantworten, wenn du genau beschreibst, was du vor hast. Grundsätzlich kann man mit einem Label nur eine Zeile anzeigen. Diese kann zwar umbrochen werden, aber es können keine eigenen Zeilenumbrüche gesetzt werden. |
Seit wann kann ein Label nur eine Zeile anzeigen?
Delphi-Quelltext
1:
| Label1.Caption := 'blalalalala' + #13#10 + 'qqqqqqqqq'; |
Ed: #13+#10 ist ein bewußt gesetzter Zeilenumbruch.
Also bei mir geht das.
No0B - Fr 02.04.10 18:37
Das bringt mir aber nix, da die textfile auch ascii art enthällt. Wäre also net schlecht wenns schon formartiert angezeigt wird.
elundril - Fr 02.04.10 18:46
und? brauchst ja nur die ascii-art in eine Stringliste zu laden und die dann zeilenweise mit dem #10#13 in dein label rüberkopieren. wobei natürlich es eleganter wäre wenn du deinen Text in eine Stringlist einliest und dann selbst zeichnen würdest auf eine paintbox zb.
lg elundril
Jakob_Ullmann - Sa 03.04.10 14:11
delphi10: Komisch, hatte das so in Erinnerung, dass das bei Labels nicht ging. Dann wäre das natürlich einfach.
NnoOB: Wo ist das Problem? Wie es aussieht, interpretiert das Label ja #13#10 korrekt und sollte damit doch alles darstellen können, was sich so in einer Textdatei befindet.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!