Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Self welche Unit ? (https://www.delphipraxis.net/11574-self-welche-unit.html)

Christian Seehase 10. Nov 2003 00:05

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.

HomerGER 10. Nov 2003 00:07

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

Christian Seehase 10. Nov 2003 00:11

Re: Self welche Unit ?
 
Moin Homer,

das Freigeben hast Du nicht vergessen.
Du hast ja

Delphi-Quellcode:
ProgressBar_Form.Free
geschrieben.
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.

HomerGER 10. Nov 2003 00:14

Re: Self welche Unit ?
 
leider bekomme ich eine fehler
weil die showing for der try ist

scp 10. Nov 2003 02:53

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;

Christian Seehase 10. Nov 2003 20:06

Re: Self welche Unit ?
 
Moin Homer,

warum nicht so?

Delphi-Quellcode:
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;
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.

HomerGER 11. Nov 2003 20:19

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.

Christian Seehase 11. Nov 2003 20:34

Re: Self welche Unit ?
 
Moin Homer,

dazu könntest Du ein ShowModal faken.

Delphi-Quellcode:
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;
Der Code in Unit1 läuft, die Progressbar in Form2 läuft, und Form1 ist nicht anwählbar.

HomerGER 11. Nov 2003 21:32

Re: Self welche Unit ?
 
danke
werde es gleich mal testen

HomerGER 11. Nov 2003 22:09

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.
Seite 2 von 3     12 3      

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