![]() |
Quickreport nach Neustart wieder an gleicher Position öffnen
Hallo zusammen,
wer weiß, wie ich beim Schließen eines QuickReports die aktuelle Position/Größe ermittle? Mich Interessiert die Größe des äusseren Rahmens, nicht die der Seite innerhalb.
Vielleicht noch das. Zuweisung einer Position in OnCreate funktioniert über self.QuickReport1.PreviewLeft, PreviewTop Danke Gerd |
AW: Quickreport nach Neustart wieder an gleicher Position öffnen
In welches Ereignis schreibt man denn Code, der vor oder beim Schließen ausgeführt werden soll? Das muss es doch auch geben. Oder du implementierst selbst ein OnClose.
|
AW: Quickreport nach Neustart wieder an gleicher Position öffnen
Wie schon gesagt:
Delphi-Quellcode:
wird beim Schließen aufgerufen und da habe ich es versucht. Nur liefern weder
OnAfterPreview
Delphi-Quellcode:
noch
Form.Left
Delphi-Quellcode:
das korrekte Ergenis wo das Form / der Report gerade liegt.
Form.QuickReport1.PreviewLeft
Das Ereignis hätte ich also aber nicht die passende Eigenschaft. Ich könnte mir vorstellen, dass es was damit zu tun hat, dass man beim Erstellen TQuickreport zwar in ein Form bettet, bei der Anzeige dann aber ein ganz anderes, QR-eigenes Form, angezeigt wird. Wie aber komme ich beim Schließen an dessen Positionsdaten? |
AW: Quickreport nach Neustart wieder an gleicher Position öffnen
Du könntest mal den
Delphi-Quellcode:
verdrahten und dort auf
OnStandPrevEvent
Delphi-Quellcode:
prüfen.
eventType = spClose
Delphi-Quellcode:
ist dann das aktuelle Preview-Form dessen Top,Left, Width und Height du speichern solltest.
Sender
Diese Werte müssen dann entweder beim nächsten Aufruf in QuickReport.PreviewTop/Left/Width/Height übergeben werden oder im selbigen Event bei
Delphi-Quellcode:
wieder gesetzt werden.
eventType = spOpen
|
AW: Quickreport nach Neustart wieder an gleicher Position öffnen
Liste der Anhänge anzeigen (Anzahl: 1)
Funktioniert. Allerdings immer noch nicht ganz nachvollziehbar, was genau passiert
Mein Code
Delphi-Quellcode:
TrptStdCalibration = TForm
procedure TrptStdCalibration.qrStdCalStandPrevEvent(Sender: TObject; eventType: TStandPrevEventType; contName: string;
var Handled: Boolean); var s :String; begin if eventType = spClose then begin Self.Left := Self.Left; // = 175 Self.Left := qrStdCal.Left; // = 16 Self.Left := qrStdCal.PreviewLeft; // = 25 Self.Left := TForm(Sender).Left; // = 1526 Self.Left := TQuickRep(Sender).Left; // = 1526 Self.Left := TQuickRep(Sender).PreviewLeft; // = 2555888800 s := Sender.ClassName; // = 'TQRStandardPreview' // d.h. Korrekt ist Self.Left := TQRStandardPreview(Sender).Left; // = 1526 u_Registry.SaveFormPos(Self); end; qrStdCal = TQuickReport d.h. die Komponenten selber liefern falsche Werte. Greife ich aber über Sender zu passt es. Nach etwas probieren habe ich herausbekommen, dass Sender vom Typ TQRStandardPreview ist und der wird in QRPrev definiert Korrekt ist also
Delphi-Quellcode:
Die Left-Zuweisungen haben nur dazu gedient, um nach Haltepunkt alle Werte anzuzeigen
Left := TQRStandardPreview(Sender).Left;
Im Anhang ein Screenshot mit der Lage des Reports |
AW: Quickreport nach Neustart wieder an gleicher Position öffnen
Zitat:
Zitat:
Delphi-Quellcode:
von
TQRStandardPreview
Delphi-Quellcode:
abgeleitet ist, wäre auch
TForm
Delphi-Quellcode:
korrekt. Das erspart eventuell den einen Eintrag in der Uses-Anweisung.
TForm(Sender).Left
Ich persönlich würde auch das Setzen der Position im selben Event vorziehen. Dann hat man beide Teile des Codes an einer Stelle. |
AW: Quickreport nach Neustart wieder an gleicher Position öffnen
Zitat:
Habe zwar noch mal grübeln müssen was du meinst aber das hat das Handling tatsächlich stark vereinfacht. Aus
Delphi-Quellcode:
wurde
procedure TrptStdCalibration.FormCreate(Sender: TObject);
begin u_Registry.RestoreFormPos(self); qrStdCal.PreviewLeft := self.Left; qrStdCal.PreviewTop := self.Top; qrStdCal.PreviewWidth := self.Width; qrStdCal.PreviewHeight := self.Height; end; procedure TrptStdCalibration.qrStdCalStandPrevEvent(Sender: TObject; eventType: TStandPrevEventType; contName: string; var Handled: Boolean); begin if eventType = spClose then begin // Zugriff auf Self.Left, qrStdCal.Left und qrStdCal.PreviewLeft liefert falsche Werte => Zugriff über Sender self.Left := TQRStandardPreview(Sender).Left; self.Top := TQRStandardPreview(Sender).Top; self.Width := TQRStandardPreview(Sender).Width; self.Height := TQRStandardPreview(Sender).Height; u_Registry.SaveFormPos(self); end; end;
Delphi-Quellcode:
case eventType of
spClose: u_Registry.SaveFormPos(TForm(Sender)); spOpen: u_Registry.RestoreFormPos(TForm(Sender)); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:14 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