AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Quickreport nach Neustart wieder an gleicher Position öffnen

Quickreport nach Neustart wieder an gleicher Position öffnen

Ein Thema von norwegen60 · begonnen am 31. Jan 2020 · letzter Beitrag vom 1. Feb 2020
Antwort Antwort
norwegen60

Registriert seit: 23. Dez 2007
Ort: Schwarzwald
526 Beiträge
 
Delphi 12 Athens
 
#1

AW: Quickreport nach Neustart wieder an gleicher Position öffnen

  Alt 1. Feb 2020, 15:04
Funktioniert. Allerdings immer noch nicht ganz nachvollziehbar, was genau passiert
Mein Code
Delphi-Quellcode:
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;
TrptStdCalibration = TForm
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
Left := TQRStandardPreview(Sender).Left; Die Left-Zuweisungen haben nur dazu gedient, um nach Haltepunkt alle Werte anzuzeigen

Im Anhang ein Screenshot mit der Lage des Reports
Angehängte Grafiken
Dateityp: jpg QuickReport.jpg (33,6 KB, 6x aufgerufen)

Geändert von norwegen60 ( 1. Feb 2020 um 15:39 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.688 Beiträge
 
Delphi 12 Athens
 
#2

AW: Quickreport nach Neustart wieder an gleicher Position öffnen

  Alt 1. Feb 2020, 16:26
Greife ich aber über Sender zu passt es.
Das war die Idee.

Nach etwas probieren habe ich herausbekommen, dass Sender vom Typ TQRStandardPreview ist und der wird in QRPrev definiert
Korrekt ist also
Left := TQRStandardPreview(Sender).Left;
Da TQRStandardPreview von TForm abgeleitet ist, wäre auch TForm(Sender).Left korrekt. Das erspart eventuell den einen Eintrag in der Uses-Anweisung.

Ich persönlich würde auch das Setzen der Position im selben Event vorziehen. Dann hat man beide Teile des Codes an einer Stelle.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
norwegen60

Registriert seit: 23. Dez 2007
Ort: Schwarzwald
526 Beiträge
 
Delphi 12 Athens
 
#3

AW: Quickreport nach Neustart wieder an gleicher Position öffnen

  Alt 1. Feb 2020, 18:41
Da TQRStandardPreview von TForm abgeleitet ist, wäre auch TForm(Sender).Left korrekt. Das erspart eventuell den einen Eintrag in der Uses-Anweisung.

Ich persönlich würde auch das Setzen der Position im selben Event vorziehen. Dann hat man beide Teile des Codes an einer Stelle.
Danke für den Tip.

Habe zwar noch mal grübeln müssen was du meinst aber das hat das Handling tatsächlich stark vereinfacht.

Aus
Delphi-Quellcode:
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;
wurde
Delphi-Quellcode:
  case eventType of
    spClose: u_Registry.SaveFormPos(TForm(Sender));
    spOpen: u_Registry.RestoreFormPos(TForm(Sender));
  end;

Geändert von norwegen60 ( 1. Feb 2020 um 19:17 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:19 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