Delphi-PRAXiS
Seite 1 von 2  1 2      

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 Inhalt eines dynamisch erstellen Richedits drucken (https://www.delphipraxis.net/97359-inhalt-eines-dynamisch-erstellen-richedits-drucken.html)

Brakeman 9. Aug 2007 09:29


Inhalt eines dynamisch erstellen Richedits drucken
 
Hallo,
ich erstelle mir zur Laufzeit ein Pagecontrol mit n-Tabsheets, auf denen jeweils ein Richedit sitzt. Nun möchte ich über einen Button den kompletten Inhalt bzw. die markierten Zeilen des gewählten Richedits drucken. Ich denke, dass ich dazu an den Namen des Richedits herankommen müsste, welches gerade aktiv ist. Habe auch schon ein wenig mit ActiveControl probiert, aber da wird mir dann immer der Drucken-Button angezeigt. Hat jemand eine Idee wie ich das Problem angehen könnte? Wäre sehr dankbar für Anregungen.

So wird das TabControl mit den Tabsheets erstellt:

Delphi-Quellcode:
     testStands.Sort;
     s:=testStands.Count;
     PageControl1 := TPageControl.Create(Self);
     PageControl1.Parent := Self;
     PageControl1.Left:=104;
     PageControl1.Top:=320;
     PageControl1.Width:=513;
     PageControl1.Height:=257;

     for r := 1 to s do
      begin
       TabSheet := TTabSheet.Create(PageControl1);
       with TabSheet do
        begin
         PageControl := PageControl1;
         Name := 'ts' + IntToStr(r);
         Caption := testStands[r-1];
         RichEdit := TRichEdit.Create(TabSheet);
         RichEdit.Name:='re'+IntToStr(r);
         RichEdit.Parent := TabSheet;
         Richedit.Align := alClient;
         RichEdit.WordWrap:=false;
         RichEdit.ScrollBars:=ssBoth;
         Richedit.Lines.LoadFromFile(appPath+testStands[r-1]+'.tmp');
        end;
      end;


Und so will ich drucken:

Delphi-Quellcode:
procedure TForm1.ButtonDruckenClick(Sender: TObject);
begin
 if (RichEdit1.Lines.Count>0) then
  begin
   if PrinterSetupDialog1.Execute then
    RichEdit1.Print('Einträge');
  end
 else
  showmessage('Keine Einträge gefunden!');
end;

sirius 9. Aug 2007 09:37

Re: Inhalt eines dynamisch erstellen Richedits drucken
 
Und wo nimmst du das Richedit1 her beim drucken?

Du kannst übrigens mit TComponent.componentcount und TComponent.Component[i] deine Tabsheets durchforsten.
(statt Tcomponent entsprechende Komponente einsetzen)

iGoA 9. Aug 2007 09:39

Re: Inhalt eines dynamisch erstellen Richedits drucken
 
Du könntest dein RichEdit über den Namen suchen und dabei den Index der aktiven Seite des Pagecontrols benutzen. Etwa so (ungetestet):

Delphi-Quellcode:
TRichEdit(PageControl1.findComponent('re'+inttostr(Pagecontrol1.activepageindex+1)).print;

Apollonius 9. Aug 2007 09:41

Re: Inhalt eines dynamisch erstellen Richedits drucken
 
Du könntest statt einem Button einen TSpeedbutton verwenden, der kann nämlich nicht den Fokus erhalten, sodass ActiveControl immernoch das Richedit ist.

iGoA 9. Aug 2007 09:43

Re: Inhalt eines dynamisch erstellen Richedits drucken
 
Das ist aber auch nicht optimal, denn er hat später vielleicht noch mehr Controls auf jedem Tabsheet. Wenn ichs richtig verstanden habe, will er ja wissen, welches RichEdit gerade angezeigt wird.

HLukas 9. Aug 2007 10:20

Re: Inhalt eines dynamisch erstellen Richedits drucken
 
Über die PageControll-Eigenschaft
ActivePageIndex und die vergebenen Namen der TabSheets und RichEdits
kann das aktive Element zum Druck verfügbar gemacht werden.

iGoA 9. Aug 2007 10:30

Re: Inhalt eines dynamisch erstellen Richedits drucken
 
Sach ich ja! :-D

Brakeman 9. Aug 2007 11:15

Re: Inhalt eines dynamisch erstellen Richedits drucken
 
Danke für die Beiträge. Über PageControl1.ActivePage.Name bekomme ich schon mal den Namen des aktiven Tabsheets. Da der Name des Richedits der gleiche ist wie der des Tabsheets weiss ich den Namen nun auch. Nur habe ich momentan keinen Plan wie ich auf das Richedit zugreifen kann.

Apollonius 9. Aug 2007 11:22

Re: Inhalt eines dynamisch erstellen Richedits drucken
 
Du kennst den Owner des Richedits, da du es ja dynamisch erzeugt hast. An diesem Owner rufst du nun FindComponent mit dem Namensstring auf und castest nach TRichedit.

Brakeman 9. Aug 2007 11:48

Re: Inhalt eines dynamisch erstellen Richedits drucken
 
Habe es mal so eingebaut und compilieren lässt es sich auch. In activePage steht auch der Name des gewählten Tabsheets drin und da der Name des Richedits der gleiche ist müsste es auch passen. Allerdings kommt dann beim Ausführen eine Zugriffsverletzung.


Delphi-Quellcode:
procedure TForm1.ButtonDruckenClick(Sender: TObject);
var activePage : String;

begin
 activePage:= PageControl1.ActivePage.Name;

 if PrinterSetupDialog1.Execute then
  TRichEdit (PageControl1.FindComponent(activePage)).print('Hallo');

end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:02 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz