Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Procedure nicht sichtbar... (https://www.delphipraxis.net/63926-procedure-nicht-sichtbar.html)

Luckie 24. Feb 2006 18:42

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:
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;
Du solltest dir mal das Tutorial durchlesen, dann weißt du auch, was es mit den Sichtbarkeiten auf sich hat.

bluescreen25 24. Feb 2006 19:11

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:
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;
der Aufruf aus der anderen Form/Unit dann:

Delphi-Quellcode:
procedure Tmediaplayer_frm.Image14Click(Sender: TObject);
var
  SShutDown: TShutDown;
begin
  SShutDown := TShutDown.Create;
  try
    SShutDown.beenden;
  finally
    FreeAndNil(SShutDown);
  end;
end;
:-D

Luckie 24. Feb 2006 19:15

Re: Procedure nicht sichtbar...
 
Nein, das ist immer nochnicht korrekt. Was hat die Unit deines Formulares in der Unit deiner Klasse zu suchen?

bluescreen25 24. Feb 2006 19:20

Re: Procedure nicht sichtbar...
 
Zitat:

Zitat von Luckie
Nein, das ist immer nochnicht korrekt. Was hat die Unit deines Formulares in der Unit deiner Klasse zu suchen?

Stimmt , habe es oben im Code editiert. Du siehst aber auch ALLES ! :shock:

Luckie 24. Feb 2006 19:24

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.

bluescreen25 24. Feb 2006 19:46

Re: Procedure nicht sichtbar...
 
Zitat:

Zitat von Luckie
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.

Nun ja, das ist aber jetzt etwas sehr eng gesehen. Ich habe den Aufruf in der "mediaplayer_frm" unabhängig von der Klasse gemacht, so wie du es gezeigt hast.

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 ?

jfheins 24. Feb 2006 19:53

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;

bluescreen25 24. Feb 2006 20:24

Re: Procedure nicht sichtbar...
 
Zitat:

Zitat von jfheins
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;

Das habe ich mal so umgesetzt, funktioniert und ist hoffentlich jetzt einwandfrei....lol

Delphi-Quellcode:
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.
...
...
eine globale Procedure in der Main_frm:

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

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

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