![]() |
AW: Quickreport Preview per Code schließen
Das mach ich doch schon mit
Delphi-Quellcode:
rptMediaList.qrMediaList.Visible := false;
rptMediaList.qrMediaList.PreviewController.Free; rptMediaList.qrMediaList.Cancel; rptMediaList.qrMediaList.FreeOnRelease; rptMediaList.Release; rptMediaList.Close; |
AW: Quickreport Preview per Code schließen
Zitat:
Delphi-Quellcode:
nutzt?
GetParent(rptMediaList.qrMediaList.Handle)
Oder
Delphi-Quellcode:
?
GetWindow(rptMediaList.qrMediaList.Handle, GW_OWNER)
|
AW: Quickreport Preview per Code schließen
[QUOTE=KodeZwerg;1508704]
Zitat:
Ich habe auch noch
Delphi-Quellcode:
versucht, also den Parent des eigentlichen Reports. Aber auch das hat das PreView-Fenster nicht geschlossen
for i := Screen.CustomFormCount - 1 downTo 0 do
begin sName := TCustomForm((Screen.CustomForms[i])).ClassName; if (Screen.CustomForms[i] is TQRStandardPreview) then begin FHwnd := GetParent(Screen.CustomForms[i].Handle); TQRStandardPreview(Screen.CustomForms[i]).Close; // oder close SendMessage(FHwnd, WM_CLOSE, 0, 0); end; end; Ich habe mit der Schleife auch mal alle, außer dem Main geschlossen.
Delphi-Quellcode:
Selbst dann blieb der PreView offen.
else if (Screen.CustomForms[i] is TCustomForm) then
begin if (TCustomForm((Screen.CustomForms[i])).Name <> 'frmMain') then TCustomForm(Screen.CustomForms[I]).Close; end; |
AW: Quickreport Preview per Code schließen
Was ein Close verhindern könnte ist OnCloseQuery.
Gibt es in dem Form ein OnCloseQuery, dann setze das mal vor dem close auf nil.
Delphi-Quellcode:
TQRStandardPreview(Screen.CustomForms[i]).OnCloseQuery := nil;
TQRStandardPreview(Screen.CustomForms[i]).Close; |
AW: Quickreport Preview per Code schließen
Und was ist damit?
Delphi-Quellcode:
rptMediaList.qrMediaList.PrevFormStyle := fsStayOnTop;
Mal vor dem Schließen auf was anderes ändern? Z. B. fsNormal? |
AW: Quickreport Preview per Code schließen
egal oder eher kontraproduktiv
Delphi/VCL kann den Style nicht zur Laufzeit ändern ... intern wird dabei die Form (HWND) freigegeben und komplett neu erstellt. * schauen welche Form/Klasse angezeigt wird (Debugger/WinSpy/...) * rausfinden, wo dessen Instanz gespeichert wird (Variablen/Felder/Property) * und dann darauf ein Close/WM_CLOSE ausführen * gibt es eine MessageLoop im QuickReport (z.B. wie ShowModal), dann da nachsehen, was die Abbruchbedingungen sind und wie/wo man darauf Zugriff bekommt zu Screen.CustomForms/Screen.Forms in #13: nicht GetParent, sondern ![]() OnCloseQuery kann man auch mit Free statt Close um umgehen, da dort nicht mehr nachgefragt wird. |
AW: Quickreport Preview per Code schließen
Nur so ins Blaue:
Delphi-Quellcode:
rptMediaList.qrMediaList.QRPrinter.ClosePreview(nil); |
AW: Quickreport Preview per Code schließen
Delphi-Quellcode:
hat genau denselben Effekt wie die Suche und das Schließen von TQRStandardPreview. Der Report wird geschlossen, das Preview-Fenster bleibt offen.
rptMediaList.qrMediaList.QRPrinter.ClosePreview(nil);
Den PrevFormStype hatte ich schon testweise auf fsNormal gesetzt. Auch das ändert nichts daran, dass der PreView offen bleibt. Verwendung von Free hat auch nichts gebracht, zumal im OnClose nichts ist Ich hätte nicht gedacht, dass es so schwer ist ein QuickReport wirder los zu werden. |
AW: Quickreport Preview per Code schließen
Zitat:
//edit Ansonsten mal beim Author fragen wie es gedacht ist? ![]() |
AW: Quickreport Preview per Code schließen
So, ich habe mir jetzt auch WinSpy angeschaut und (für mich) überraschendes festgestellt
Der eigentliche Report entstammt der Klasse TQRPreview Das Preview-Fenster, in dem der Report eingebunden ist, entstammt der Klasse TQRStandardPreview und hat den Titel "Report Preview : Media-List Report" Dadurch weiß ich jetzt, dass hintern "Report Preview" noch ein Leerstelle ist und mit der findet
Delphi-Quellcode:
jetzt auch den Handle.
FHwnd := FindWindow(nil, 'Report Preview : Media-List Report');
SendMessage(FHwnd, WM_CLOSE, 0, 0); Das wars aber auch schon an weiterkommen, denn der anschließende WM_CLOSE schließt wieder nur den Report Gelöst habe ich es jetzt trotzdem. Vielleicht kann man noch abspecken, aber so geht es
Delphi-Quellcode:
try
rptMediaList.Enabled := False; rptMediaList.Hide; for i := Screen.FormCount - 1 downto 0 do begin with Screen.Forms[i] do begin if ClassName = 'TQRStandardPreview' then with TQRStandardPreview(TComponent(Screen.Forms[i])) do Destroy; end; end; rptMediaList.qrMediaList.Free; rptMediaList.Release; finally rptMediaList.Free; rptMediaList:= nil; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:16 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 by Thomas Breitkreuz