Delphi-PRAXiS

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

JOMA 13. Mär 2005 17:09


Procedure einbinden
 
Beim Versuch nachstehende Unit zu starten bekomme ich immer wieder eine Fehlermeldung.
Die Procedure LabelLeer läßt sich nur über Button3 ansprechen. Warum?
Hilfe erbeten.

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);

  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
   LabelLeer;
   //Edit1.Text := 'Editbox1';
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Edit2.Text := 'Editbox2';
end;

procedure LabelLeer;
begin
  form1.Edit1.Text := '';
  form1.Edit2.Text := '';
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
   LabelLeer;
   //Edit2.Text := 'Editbox2';
end;
end.
[edit=Christian Seehase]Delphi-Tags gesetzt. Bitte künftig selber machen. Danke. Mfg, Christian Seehase[/edit]

PierreB 13. Mär 2005 17:11

Re: Procedure einbinden
 
Mach doch einfach aus der Procedure LabelLeer eine Function LabelLeer. So müsste es glaub ich gehen.

Ultimator 13. Mär 2005 17:12

Re: Procedure einbinden
 
Zitat:

Zitat von PierreB
Mach doch einfach aus der Procedure LabelLeer eine Function LabelLeer. So müsste es glaub ich gehen.

Nein, denn der Unterschied von der Funktion zu ner Prozedur ist einfach der, dass ne Funktion einen Rückgabewert hat.

BenjaminH 13. Mär 2005 17:15

Re: Procedure einbinden
 
Hallo
Entweder du verschiebst die Prozedur nach ganz oben, oder du nimmst sie in die Klasse TForm1 auf.
Benjamin
P.S:Setze den Code doch bitte in Delphi-Tags

Speedmaster 13. Mär 2005 17:15

Re: Procedure einbinden
 
Schreib sie doch einfach oben in den public abschnitt dann solltest über Form1 darauf zugreifen können!

JOMA 13. Mär 2005 17:35

Re: Procedure einbinden
 
Hallo Benjamin,
habe die Procedure wie angeregt an die erste Stelle gesetzt und schon klappt es.
Habe bisher mit Visual-Basic gearbeitet, dort war das egal wo die Procedure stand.
Ist das in Delphi anders?
Vielen Dank für die schnelle Hilfe
JOMA

BenjaminH 13. Mär 2005 17:49

Re: Procedure einbinden
 
Ja, prozeduren, die nicht zu einer Klasse (wie in deinem Beispiel TForm1) gehören, sind erst ab der Stelle im Code gültig, wo sie stehen.
Du kannst die Prozedur Button3Click von überall her ausführen, obwohl sie ganz unten steht.
Das liegt daran, das sie hier zu finden ist:
Delphi-Quellcode:
 TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
Button2: TButton;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);

private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
Würdest du die Prozedur LabelLeer so hineinschreiben würde es auch funktionieren:
Delphi-Quellcode:
 TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
Button2: TButton;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);

private
{ Private-Deklarationen }
procedure LabelLeer;
public
{ Public-Deklarationen }
end;

Christian Seehase 13. Mär 2005 17:54

Re: Procedure einbinden
 
Moin JOMA,

erst einmal herzlich willkommen hier in der Delphi-PRAXiS.

Bevor etwas benutzt werden kann, muss es an den entsprechenden Stellen sichtbar sein.

Dazu hast Du hier mehrere Möglichkeiten:
  1. Die gesamte Prozedur wird im implementation-Abschnitt vor den ersten Aufruf gesetzt
  2. Der Prozedurkopf (hier: procedure LabelLeer;) kommt in den interface-Abschnitt der Unit, dann spielt es keine Rolle wo die Prozedur innerhalb der Unit steht.
  3. Du machst, wie auch schon vorgeschlagen wurde, aus der Prozedur eine Methode des Formulares. Wie das geht, ergibt sich, z.B., aus den ButtonClick-Routinen, die Methoden des Formulares sind.

Ich favorisiere die dritte Variante, da diese bezüglich der Objektorientierung, die beste ist.
Die Prozedur wird ja nur im Zusammenhang mit diesem Formular (Objekt) gebraucht.

malo 13. Mär 2005 19:05

Re: Procedure einbinden
 
Aber aufpassen, wenn du aus der Procedure eine Formularmethode machst:

Du musst sie dann so deklarieren:

Delphi-Quellcode:
{...}
private
  procedure LabelLeer;
end;
{...}

procedure TForm1.LabelLeer;
begin
  form1.Edit1.Text := ''; //hier kannst du sogar das "Form1" weglassen
  form1.Edit2.Text := ''; //hier auch
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:58 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