![]() |
Re: Self welche Unit ?
Moin Homer,
ein Objekt kann nicht sein eigener Owner sein. Das geht so also nicht. Wie gesagt, wenn Du sicherstellst, dass das Fenster wieder freigegeben wird, trag einfach nil ein. Den Owner brauchst Du nur, wenn Du Delphi dazu veranlassen willst ein Objekt automatisch zerstören zu lassen, wenn dessen Owner zerstört wird. |
Re: Self welche Unit ?
doch so geht es aber
nur mit den Showing leider nicht da bekomme ich ein Fehler ohne prüfung auf show geht es aber du hast recht das freigeben hab ich vergessen |
Re: Self welche Unit ?
Moin Homer,
das Freigeben hast Du nicht vergessen. Du hast ja
Delphi-Quellcode:
geschrieben.
ProgressBar_Form.Free
Das Showing muss schiefgehen, weil das Objekt zu dem Zeitpunkt noch gar nicht existiert. Und da Du das sichergestellt hast, mit dem try/finally Block, brauchst Du das auch nicht abzufragen. |
Re: Self welche Unit ?
leider bekomme ich eine fehler
weil die showing for der try ist |
Re: Self welche Unit ?
Du könntest in der Unit eine Status-Variable anlegen, deren Wert du selber änderst, etwa so:
Delphi-Quellcode:
var
PBFShowing : bool = false;
Delphi-Quellcode:
if (PBFShowing = False) then
begin PBFShowing := true; ProgressBar_Form := TProgressBar_Form.Create(nil); try ProgressBar_Form.ShowModal; finally ProgressBar_Form.Free; PBFShowing := false; end; end; |
Re: Self welche Unit ?
Moin Homer,
warum nicht so?
Delphi-Quellcode:
Wobei Du Dir eigentlich auch die Abfrage auf nil sparen kannst, da Du das Formular Modal anzeigen lässt, und es danach garantiert wieder freigibst, womit sichergestellt ist, dass es beim nächsten Aufruf der Routine nicht existiert.
if ProgressBar_Form = nil then begin
// Wird gleich wieder freigegeben, dann kann der Owner nil sein. ProgressBar_Form := TProgressBar_Form.Create(nil); try ProgressBar_Form.ShowModal; finally FreeAndNil(ProgressBar_Form); end; end; |
Re: Self welche Unit ?
hi christian
ich erklär mal was ich eigentlich machen will ich mit der form meine ProgressBar(dieDicke) starten und das Modal. dadurch wird ja nur das fenster aktiv und man kann nix anderes anklicken, denn solange ich ich was mache oder mein programm soll man nix klicken, sonst gib es ungewollte effekte. nur wenn ich das fenster öffne bleib leider mein code stehen ich hab ne unit in der ich die ganzen parameter wie start, end und postion der gauge übergebe, auch das modal öffnen des fensters, die function rufe ich dann auf wenn ich sie brauche unf zum schluss der routine soll das fenster wieder geschlossen werden. |
Re: Self welche Unit ?
Moin Homer,
dazu könntest Du ein ShowModal faken.
Delphi-Quellcode:
Der Code in Unit1 läuft, die Progressbar in Form2 läuft, und Form1 ist nicht anwählbar.
uses unit2;
{$R *.DFM} procedure TForm1.Button1Click(Sender: TObject); var frmPB : TForm2; begin frmPB := TForm2.Create(nil); try self.Enabled := false; frmPB.Show; while frmPB.Visible do begin sleep(100); frmPB.ProgressBar1.StepIt; if frmPB.ProgressBar1.Position >= frmPB.ProgressBar1.Max then frmPB.Close; Application.ProcessMessages; end; finally FreeAndNil(frmPB); self.Enabled := true; end; end; |
Re: Self welche Unit ?
danke
werde es gleich mal testen |
Re: Self welche Unit ?
mist
das gleich was wir schon mal hatten er kenn self nicht |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:28 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