Autor Beitrag
No0B
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 62



BeitragVerfasst: Fr 02.04.10 12:23 
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:

ausblenden volle Höhe 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
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form2: TForm2;

implementation

uses main;

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);

begin
close;
end;


//Fenster verschieben
 procedure TForm2.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 ReleaseCapture;
 Perform(WM_SYSCOMMAND, $F0120);
end;
procedure TForm2.Timer1Timer(Sender: TObject);
begin
 Label1.Top := Label1.Top - 30

end;

//Fenster verschieben
  //ausfaden
 type
  TForm1 = class(TForm)
    Timer1: TTimer;
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Form2.AlphaBlend:=True; //Alphablend einschalten
  Form2.AlphaBlendValue:=Form1.AlphaBlendValue - 5;
  if Form2.AlphaBlendValue = 0 then Close; //Programm nach ausfaden schließen
end;

end.


Moderiert von user profile iconNarses: Code- durch Delphi-Tags ersetzt
Jakob_Ullmann
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1747
Erhaltene Danke: 15

Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
BeitragVerfasst: 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:

ausblenden 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..2of string;
  y: Integer = 20;

...

procedure TForm1.FormCreate(Sender: TObject);
begin
  DoubleBuffered := True; // DoubleBuffering, damit kein Flackern entsteht
  zeile[0] := 'Ein';
  zeile[1] := 'kleiner Text';
  zeile[2] := 'zum Ausgeben...';
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
  i: Byte;  // mehr als 256 Zeilen wirst du ja wohl nicht haben ;-)
begin
  inc(y, STEP_WIDTH);  // dasselbe wie y := y + STEP_WIDTH
  Canvas.Rectangle(00, 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 447
Erhaltene Danke: 2

W2K, XP, Vista64, Win7 64
RAD-Studio 2010
BeitragVerfasst: Fr 02.04.10 18:01 
user profile iconJakob_Ullmann hat folgendes geschrieben Zum zitierten Posting springen:
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?
ausblenden Delphi-Quelltext
1:
Label1.Caption := 'blalalalala' + #13#10 + 'qqqqqqqqq';					

Ed: #13+#10 ist ein bewußt gesetzter Zeilenumbruch.
Also bei mir geht das.

_________________
Salus populi suprema lex esto
No0B Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 62



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: 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

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
Jakob_Ullmann
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1747
Erhaltene Danke: 15

Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
BeitragVerfasst: Sa 03.04.10 14:11 
user profile icondelphi10: 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.