Autor Beitrag
hesch21
Hält's aus hier
Beiträge: 3

W98, W2000, W-XP
Delphi-7
BeitragVerfasst: Mo 08.09.03 07:54 
Hallo zusammen

ich bin nicht nur neu hier in diesem Forum sondern auch ein Delphi-Neuling, deshalb eine vermutlich etwas doofe Frage.
Ich habe eine Applikation, bei der an verschiedenen Stellen (unterschiedliche Forms) immer praktisch dasselbe über einen kleinen Kassenstreifendrucker gedruckt werden muss. Ich habe nun eine Komponente gefunden (RAWPrint), mit der Druck recht einfach möglich ist.
Aber eigentlich möchte ich den ganzen Druckteil in eine Unit ohne Form auslagern und den Druck über ein paar procedure-Parameter steuern und aufrufen. Nun die Frage: Wie bringe ich die Komponente in meine Unit ohne Formular? Eine Variante wäre logischerweise ein verstecktes Formular, ist aber nicht gerade schön.
Oder wie ist es möglich, die Komponente aufs Hauptformular zu legen und dann von der Unit aus auf diese Komponente zuzugreifen, resp. über diese Komponente zu drucken? Ich hab das bereits versucht. Ich gebe in meiner Unit ein 'uses' des Hauptformulars an und kann dann auch die Methoden und Eigenschaften der Komponente ansprechen. Aber ich habe den Effekt, dass dann, wen die Procedure der Unit ausgeführt wird, die zuvor im Hauptprogramm gesetzten Eigenschaften 'verschwunden' sind. Die Komponente hat beispielsweise eine Property 'PrinterName', die ich beim Programmstart setze. Wenn ich aber in der Unit versuche, zu drucken, wird mir die Property mit '' angezeigt, im Mainform ist sie aber nach wie vor gesetzt.

Ich wäre für Tips und Ratschläge wirklich sehr dankbar.

Hesch21
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Mo 08.09.03 15:05 
Hallo!

Ich würde wie du schon vorgeschlagen hast die ganze Funktionalität in eine eigene Unit packen. Das müsste wie folgt implementiert werden:
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:
Unit MeineDruckerUnit;

Interface  

Uses
  RAWPrint; { Hier die Unit in der die Komponente implementiert ist }

Procedure MeineDruckerProcedure (Parameter1, Parameter2: String);

Implementation

Procedure MeineDruckerProcedure (Parameter1, Parameter2: String);
Var
  RAW: TRAWPrint;
Begin
  { Komponente erstellen ohne Owner [=nil] }
  RAW := TRAWPrint.Create (nil);
  Try
    { Jetzt die Eigenschaften der Komponente setzen. }
    RAW.Property1 := {...}
    RAW.Property1 := {...}
  Finally
    { Komponente wieder freigeben. }
    RAW.Free;
  End;
End;

Diese Procedure kannst du dann überall benutzen. Natürlich nur wenn die Unit MeineDruckerUnit in der entsprechende Uses-Liste aufgenommen ist.

Gruß
Tino
opfer.der.genauigkeit
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 754
Erhaltene Danke: 1



BeitragVerfasst: Mo 08.09.03 16:04 
Noch ne Möglichkeit wäre,
wenn deine Unit die Mainform kennt, könntest du
auf deinem Mainformular nach der Komponente suchen und dann mit dieser (fast) alles machen was du willst.

ausblenden Quelltext
1:
2:
3:
4:
//Komponenten auf Formular absuchen
for i := 0 to (Mainform.ControlCount - 1) do  
  if (Mainform.Controlls[i] is TRawPrint) then  //auf TRawPrint prüfen
    (Mainform.Controlls[i] as TRawPrint).Execute;  //ausführen

_________________
Stellen Sie sich bitte Zirkusmusik vor.