![]() |
Re: Procedure nicht sichtbar...
Natürlich sind sie das:
Delphi-Quellcode:
unit Unit2;
interface uses Dialogs; type TDummy = class(TObject) private procedure Foobar; public procedure DoSomeThing; end; implementation procedure TDummy.DoSomething; begin ShowMessage('Kuckuck'); end; procedure TDummy.Foobar; begin ShowMessage('Foobar'); end; end.
Delphi-Quellcode:
Du solltest dir mal das Tutorial durchlesen, dann weißt du auch, was es mit den Sichtbarkeiten auf sich hat.
uses
Unit2; procedure TForm1.Button1Click(Sender: TObject); var Dummy: TDummy; begin Dummy := TDummy.Create; try //Dummy.Foobar; // geht nicht da private Dummy.DoSomeThing; // geht da public finally FreeAndNil(Dummy); end; end; |
Re: Procedure nicht sichtbar...
Ich habe das Ganze nochmal überdacht und den Aufruf der proceduren global geregelt. Dank eurer Hilfe sollte es hoffentlich so korrekt sein:
Delphi-Quellcode:
der Aufruf aus der anderen Form/Unit dann:
unit ShutDown;
interface uses Windows, Messages, SysUtils, Classes; type TShutDown = class(TObject) private procedure GetPrivileges; procedure Shutdown(PowerOff,Force :boolean); procedure Ruhezustand(Force :boolean); procedure Standby(Force :boolean); procedure Logoff(Force : boolean); procedure Restart(Force :boolean); public procedure beenden; end; implementation uses Config,main_menue; procedure TShutDown.GetPrivileges; //Rechte um runterzufahren holen. ... ... ... procedure TShutDown.beenden; begin case config_frm.ShutdownSelect.ItemIndex of 0: begin Main_frm.Close; end; 1: begin Main_frm.Close; Shutdown(true,config_frm.ShutDown_force_select.Checked); end; 2: begin Ruhezustand(config_frm.ShutDown_force_select.Checked); end; 3: begin Standby(config_frm.ShutDown_force_select.Checked); end; 4: begin Main_frm.Close; Restart(config_frm.ShutDown_force_select.Checked); end; end; end;
Delphi-Quellcode:
:-D
procedure Tmediaplayer_frm.Image14Click(Sender: TObject);
var SShutDown: TShutDown; begin SShutDown := TShutDown.Create; try SShutDown.beenden; finally FreeAndNil(SShutDown); end; end; |
Re: Procedure nicht sichtbar...
Nein, das ist immer nochnicht korrekt. Was hat die Unit deines Formulares in der Unit deiner Klasse zu suchen?
|
Re: Procedure nicht sichtbar...
Zitat:
|
Re: Procedure nicht sichtbar...
Die ist ja immer noch da drinne: Config Die Klass eist somit immer noch abhängig von deiner Form und das ist unsauber und das macht man nicht. Wie es richtig geht hab eich dir in meinem Beispiel gezeigt.
|
Re: Procedure nicht sichtbar...
Zitat:
Das die "Config_frm" jetzt noch in der Implementation der Klasse steht, liegt ja daran, das ich die Case-Abfrage ja mit in die Unit gepackt habe und mir aus der "Config_frm" die Auswahl der Radiogroup (wie beendet werden soll) hole. Somit habe ich alles mit einer procedure (SShutDown.beenden;) erschlagen. Du meinst jetzt wahrscheinlich, das ich ALLE proceduren aus den Forms heraus ansprechen soll, um die Unit sauber zu halten. Da müsste ich doch wiedrum alle proceduren in Public setzen. Der Aufruf aus weiteren Forms ist doch so auch schneller,oder???? In einer Unit muss ich es ja global einsetzen, wegen der Möglichkeit der Wiederverwendung. Oder bin ich wieder auf dem falschen Dampfer ? |
Re: Procedure nicht sichtbar...
Wie wäre es, wenn due es so in der Art machst:
Delphi-Quellcode:
uses Shutdown, ConfigForm;
procedure TMainForm.Beenden; var ShutdownObj: TShutdown; begin ShutdownObj := TShutdown.Create; try case config_frm.ShutdownSelect.ItemIndex of 0: Close; 1: ShutdownObj.Shutdown (...); 2: ... end; finally FreeAndNil (ShutdownObj); end; end; |
Re: Procedure nicht sichtbar...
Zitat:
Delphi-Quellcode:
eine globale Procedure in der Main_frm:
unit ShutDown;
interface uses Windows, Messages, SysUtils, Classes; type TShutDown = class(TObject) private procedure GetPrivileges; public procedure Shutdown(PowerOff,Force :boolean); procedure Ruhezustand(Force :boolean); procedure Standby(Force :boolean); procedure Logoff(Force : boolean); procedure Restart(Force :boolean); end; implementation procedure TShutDown.GetPrivileges; //Rechte um runterzufahren holen. ... ...
Delphi-Quellcode:
ein Beispielaufruf:
procedure TMain_frm.MMPlayer_beenden;
var SShutDown: TShutDown; begin SShutDown := TShutDown.Create; try case config_frm.ShutdownSelect.ItemIndex of 0: begin Close; end; 1: begin Close; SShutDown.Shutdown(true,config_frm.ShutDown_force_select.Checked); end; 2: begin SShutDown.Ruhezustand(config_frm.ShutDown_force_select.Checked); end; 3: begin SShutDown.Standby(config_frm.ShutDown_force_select.Checked); end; 4: begin Close; SShutDown.Restart(config_frm.ShutDown_force_select.Checked); end; end; finally FreeAndNil (SShutDown); end; end;
Delphi-Quellcode:
procedure Tmediaplayer_frm.Image14Click(Sender: TObject);
begin Main_frm.MMPlayer_beenden; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:36 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