Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Label Print? (https://www.delphipraxis.net/171-label-print.html)

Privateer3000 16. Jun 2002 12:41


Label Print?
 
Hallo Leuts,

lässt sich eine Komponente wie Label auch drucken.
Mit RichEdit gehts,weiss ich...aber auch die Caption eines Labels??
Und weil wir dabei sind :lol: gehts mit Shapes auch???

Schönen Sonntag!!!

TOOOOOOOOOOOOOOOR für Spanien

Daniel B 16. Jun 2002 12:45

Hi,

es kommt drauf an wie du Druckst.
Aber schonmal
Code:
WriteLn(Printfile, Label1.Caption);
probiert?

Grüsse, Daniel :)

Privateer3000 16. Jun 2002 12:57

Danke,
ich versuch es das erste Mal.
Also keine Ahnung wie und wo deine Zeile verwendet werden muss.
Such grad Tuts darüber....bisher noch nichts

Daniel 16. Jun 2002 13:00

Hallo Privateer,

Du könntest Deine Druck-Ausgabe selber formatieren. Über die Unit "Printers" und das Object "TPrinter" holst Du Dir ein Handle auf die Zeichenfläche (Canvas) des Druckers. Dort kannst Du dann mit TextOut(...) und DrawRect(...) etc. jegliche Form von Krativität austoben. Ist allerdings ein wenig aufwendiger.


Grüße,
Daniel

Daniel B 16. Jun 2002 13:03

Aaahh, dein Problem ist das du grundsätzlich nicht Drucken kannst.
Du könntest ja einfach Print; schreiben, aber das ist nicht das was du willst.

Du kannst nämlich sachen so Drucken, als würdest du eine normale Textfile beschreiben.

Indem du eine Datei mit AssignPrn(tf, 'LPT1'); öffnest und somit einfach nur WriteLn(blabla); benutzt.
Printers in die uses aufnehmen.
Das findet man sogar in der OH. Ich hab aber zur Zeit kein Dlephi, kann somit nicht nachsehen nach welchen Befehlen du suchen müsstest. Aber unter Printer, Printers, findest du bestimmt was. AssignPrn auch.

Grüsse, Daniel :)

Privateer3000 16. Jun 2002 15:41

Habs mir anders überlegt...

Ich möchte die Labels lieber vorher in eine Datei speicher..
diese kann ich wenns erforderlich immer noch ausdrucken.

Also nochmal:

Ich möchte sprichwörtlich die Labels "einsammeln" (sind Label1..Label12)
und sie untereinander in einem Textfile abspeichern..
nimmt man da nun
write
SaveToFile
oder sonstwas

wäre Dankbar für Hilfe

Daniel 16. Jun 2002 16:07

Alle Labels eines Fensters könntest Du folgendermassen einsammeln:
Code:
Procedure ScanLabels( aForm : TForm );
var index : Integer;
Begin
  For index:= 0 To aForm.ComponentCount-1 Do
  Begin
    If (aForm.Component[index] is TLabel) Then
      With TLabel(aForm.Component[index]) Do
        WriteToFile( aForm.Name+'.'+Name+'.Caption:= '+Caption);
  End;
End;
Und die Prozedur WriteToFile könnte folgendermaßen aussehen:
Code:
Procedure WriteToFile( aString : String );
var aFile : TextFile;
Begin
  AssignFile( aFile, 'C:\DATA.TXT' );
  Reset( aFile );
  WriteLn( aFile, aString );
  CloseFile( aFile );
End;
Ich habe weder die eine noch die andere Methode getestet, aber das Prinzip sollte in jedem Fall funktionieren.


Grüße,
Daniel

Privateer3000 16. Jun 2002 16:49

Danke Daniel,

Componet ist ein undef. Bezeichner

was muss ich noch machen???

Daniel 16. Jun 2002 16:54

Sorry. Es muss jeweils .Components lauten. Das 's' am Ende ist wichtig. :roll:

Grüße,
Daniel

Privateer3000 16. Jun 2002 16:55

Dankeschön...

PS:sieh mal unter Fragen/Anregungen nach

Privateer3000 16. Jun 2002 17:11

Himmel, jetzt ist es WriteToFile

habs aber inder Class und als procedure hinzugefügt

MrSpock 16. Jun 2002 17:20

Hallo Privateer3000,

Zitat:

Himmel, jetzt ist es WriteToFile
Was ist WriteToFile? Meldet der Compiler einen Fehler? Wenn ja, welchen?

Privateer3000 16. Jun 2002 17:22

undefinierter Bezeichner..

HAAAAAAALLOOOOOO Spocki !

MrSpock 16. Jun 2002 17:27

Hallo Privateer3000,

wenn du es als Methode in die Klassendefinion geschrieben hast, musst du die Procedure wie folgt definieren:

Zitat:

Procedure TForm1.WriteToFile( aString : String );
Wobei TForm1 durch den Namen deines Formulars ersetzt werden muss.

Privateer3000 16. Jun 2002 17:38

Danke Spocki...jetzt kommt keine Fehlermeldungen mehr...

Aber wie kann ich das Schreiben kontrolliert starten?

als durch Button beispielsweise??

jetzt sind es ja "normale" procedure'n

sakura 16. Jun 2002 17:38

Ich bin mir nicht sicher, obs hilft, aber Du kannst auch das komplette Form mit

Form1.Print;

ausdrucken. (Wenns mal mehr als ein Label sein soll).

MrSpock 16. Jun 2002 18:20

Hallo Privateer3000,

es kommt darauf an, wann du die Label - Captions drucken möchtest. Auf Knopfdruck, beim Beenden des Programms oder bei welchem Ereignis.

Der Aufruf ist dann einfach:
Code:
   ScanLabels(Self)
Wenn du aber sowieso die Methode ScanLabels als Methode der Klasse deiner Form deklariert hast, könntest du den Parameter aForm auch weglassen und dafür im Programmcode anstelle von aForm die Variable self verwenden. Außerdem hat die Procedure WriteToFile einen festeingestellten Programmnamen. Ich würde diesen als Parameter übergeben. Dann sähe das Ganze wie folgt aus:

Code:
Procedure TForm1.ScanLabels(datNam : String );
var index : Integer;
Begin
  For index:= 0 To Self.ComponentCount-1 Do
  Begin
    If (Self.Component[index] is TLabel) Then
      With TLabel(Self.Component[index]) Do
        WriteToFile( aForm.Name+'.'+Name+'.Caption:= '+Caption, datNam);
  End;
End;
und
Code:

Procedure TForm1.WriteToFile( aString, datNam : String );
var aFile : TextFile;
Begin
  AssignFile( aFile, datNam );
  Reset( aFile );
  WriteLn( aFile, aString );
  CloseFile( aFile );
End;
Der Aufruf würde dann lauten:
Code:
ScanLabels('C:\Delphi\Test\Labels.Txt');
oder wie immer die Datei heißen soll.

Privateer3000 16. Jun 2002 18:45

Auf Spocki ist, wie immer, Verlass !

Danke!


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:33 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