Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Eine Procedure erstellen Beispiel: procedure Removefile ... (https://www.delphipraxis.net/51016-eine-procedure-erstellen-beispiel-procedure-removefile.html)

mindforce 4. Aug 2005 14:54


Eine Procedure erstellen Beispiel: procedure Removefile ...
 
Guten Tag,

ich habe folgenes Problem. :gruebel: Undzwar finde ich hier auf dieser Site unter "Code Libary" eine Sache die ich brauche für mein neues Programm. : Wie erstelle ich eine Procedure :oops: Beispiel:

procedure Removefile (.....)


Ich habe mir im Internet schon den Kopf zerbrochen :wall: . Es war zum :kotz: .

Brauche dringend Hilfe.

Euer Mindforce

Luckie 4. Aug 2005 14:58

Re: Eine Procedure erstellen Beispiel: procedure Removefile
 
Delphi-Quellcode:
function RemoveFile(const Filename: String): DWORD;
begin
  result := Windows.DeleteFile(PChar(Filename));
end;
Delphi-Quellcode:
var
  res: DWORD;
begin
  res := RemoveFile(...);
  if res <> 0 then
    RaiseLastOSError;

Steve 4. Aug 2005 14:59

Re: Eine Procedure erstellen Beispiel: procedure Removefile
 
Hi,

hier findest Du ne Beschreibung :)

Gruß
Stephan :dance:

mindforce 4. Aug 2005 15:11

Re: Eine Procedure erstellen Beispiel: procedure Removefile
 
Vielen Dank für euren schnellen Beitrag.

mindforce 5. Aug 2005 16:01

Re: Eine Procedure erstellen Beispiel: procedure Removefile
 
:wiejetzt:
Problem ist, wie Registriere ich die producer´s und die function´s???

..

AHUser 5. Aug 2005 16:03

Re: Eine Procedure erstellen Beispiel: procedure Removefile
 
Du solltest dich mal mit den Grundlagen befassen.

mindforce 5. Aug 2005 16:18

Re: Eine Procedure erstellen Beispiel: procedure Removefile
 
Ich habe mir die Grundlagen mal angeguckt. Aber ich habe leider nie Zeit dafür. Ein >>p<< aar ( kleingeschrieben ) Spalten müssen es doch schon sein.

Gruss,

Mike

AHUser 5. Aug 2005 16:21

Re: Eine Procedure erstellen Beispiel: procedure Removefile
 
Prozeduren muss man nicht registieren. Die kann man nur deklarieren und implementieren.

mindforce 5. Aug 2005 16:24

Re: Eine Procedure erstellen Beispiel: procedure Removefile
 
Ja tut mir leid :roll: . Aber trotzdem danke für deine Hilfe :angel2: .

Nils_13 5. Aug 2005 16:27

Re: Eine Procedure erstellen Beispiel: procedure Removefile
 
hi,
Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
--> function RemoveFile(const Filename: String): DWORD; <--
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

--> function TForm1.RemoveFile(const Filename: String): DWORD;
begin
  result := Windows.DeleteFile(PChar(Filename));
end; <--

end.
Der Code läfut zwar nicht, es soll dir ja auch nur erklären, wie es läuft.

malo 5. Aug 2005 16:36

Re: Eine Procedure erstellen Beispiel: procedure Removefile
 
Was meinst du mit "Prozeduren registrieren"? WAS GENAU willst du machen?

Das was Nils beschrieben hat, ist eine Methode. Das ist wieder ein Thema für sich (OOP). Meist reicht jedoch prozeduale Programmierung, besonders für den Einstieg.

Nils_13 5. Aug 2005 16:38

Re: Eine Procedure erstellen Beispiel: procedure Removefile
 
Zitat:

Zitat von malo
Was meinst du mit "Prozeduren registrieren"? WAS GENAU willst du machen?

Das was Nils beschrieben hat, ist eine Methode. Das ist wieder ein Thema für sich (OOP). Meist reicht jedoch prozeduale Programmierung, besonders für den Einstieg.

In PASCAL muss man sie soweit ich weiß nur hinschreiben (ist lange her).

DP-Maintenance 5. Aug 2005 16:40

DP-Maintenance
 
Dieses Thema wurde von "alcaeus" von "Programmieren allgemein" nach "Object-Pascal / Delphi-Language" verschoben.
Ist in Object Pascal wohl besser aufgehoben ;)

BlackJack 5. Aug 2005 16:41

Re: Eine Procedure erstellen Beispiel: procedure Removefile
 
Zitat:

Zitat von Nils_13
Zitat:

Zitat von malo
Was meinst du mit "Prozeduren registrieren"? WAS GENAU willst du machen?

Das was Nils beschrieben hat, ist eine Methode. Das ist wieder ein Thema für sich (OOP). Meist reicht jedoch prozeduale Programmierung, besonders für den Einstieg.

In PASCAL muss man sie soweit ich weiß nur hinschreiben (ist lange her).

das ist in delphi nicht anders.

Khabarakh 5. Aug 2005 16:46

Re: Eine Procedure erstellen Beispiel: procedure Removefile
 
Zitat:

Zitat von malo
Meist reicht jedoch prozeduale Programmierung, besonders für den Einstieg.

Ich würde mal sagen, eine Methode ist hier völlig unpassend :wink: . Jedenfalls bei der Form-Klasse.

@mindforce:
Der Code der Funktion steht im implementation-Teil deiner Unit, das ist die Implementation der Funktion. Du kannst den Funktionskopf in den interface-Abschnitt kopieren, dann hast du eine global deklarierte Funktion. Nicht-globale Funktionen kannst du nur in der gleichen Unit und nur in Code unter der Implementation aufrufen. Globale Funktionen kannst du in der gesamten Unit und in Units, in deren uses-Liste deine Unit steht, aufrufen.

alcaeus 5. Aug 2005 16:51

Re: Eine Procedure erstellen Beispiel: procedure Removefile
 
Hallo ihr,

also...das was Nils da gebaut hast ist eine Methode einer Klasse. Diese kann nur angewendet werden, falls man eine Instanz der Klasse (in diesem Fall Form1) hat. Aufrufkonvention:
Delphi-Quellcode:
<Objektvariable>.<MethodenName>
//Oben z.B.:
Form1.RemoveFile;
Je nachdem wo man sie deklariert sind sie "mehr oder weniger sichtbar". Eine Funktion, die im private-Bereich deklariert wurde, wird nur in der eigenen Unit aufrufbar sein. Im public-Bereich hingegen ist sie fuer alle sichtbar.

Das zweite sind "normale" Funktionen/Prozeduren, welche es ja auch schon im guten alten DOS-Pascal gab. Es gibt mehrere Wege diese zu implementieren:
  • Einfache implementierung ohne interface-Deklaration: Die Funktionen werden einfach im implementation-Teil geschrieben, z.B.:
    Delphi-Quellcode:
    unit Foo;
    interface
    implementation

    function Bar: Integer;
    begin
      Result := 42;
    end;

    end.
    Diese Funktionen sind nur in der eigenen Unit sichtbar, aber auch nur nachdem sie deklariert wurden. Dies wuerde also zu einem Fehler fuehren:
    Delphi-Quellcode:
    unit Foo;
    interface
    implementation

    function Bar: Integer;
    begin
      Result := FooBar;
    end;

    function FooBar: Integer;
    begin
      Result := 42;
    end;

    end.
  • Implementierung mit vorhergehender Deklaration: Dabei wird der Funktionskopf im interface-Teil deklariert, die Implementierung erfolgt wie vorhin im implementation-Teil:
    Delphi-Quellcode:
    unit Foo;
    interface

    function Bar: Integer;

    implementation

    function Bar: Integer;
    begin
      Result := 42;
    end;

    end.
    Die Funktionen sind dabei auch ausserhalb der Unit sichtbar. Weiters sind die Funktionen bereits deklariert, also wuerde dieser Code diesmal funktionieren:
    Delphi-Quellcode:
    unit Foo;
    interface

    function Bar: Integer;
    function FooBar: Integer;

    implementation

    function Bar: Integer;
    begin
      Result := FooBar;
    end;

    function FooBar: Integer;
    begin
      Result := 42;
    end;

    end.
  • Forward-Deklaration von Funktionen: Wir haben vorhin gesehen, dass Funktionen, welche im implementation-Teil implementiert werden, ohne vorher deklariert zu werden, erst nach der Funktion selbst "sichtbar" sind. Was tun wenn die Prozeduren nur in der Unit sichtbar sein sollen, aber trotzdem der zweite Code aus dem ersten Abschnitt funktionieren soll? Dafuer gibt es das Schluesselwort forward:
    Delphi-Quellcode:
    unit Foo;
    interface
    implementation

    function Bar: Integer; forward;
    function FooBar: Integer; forward;

    function Bar: Integer;
    begin
      Result := FooBar;
    end;

    function FooBar: Integer;
    begin
      Result := 42;
    end;

    end.
    Das Schluesselwort forward sagt dem Compiler, dass die Funktion hier nur deklariert wurde, die Implementierung aber spaeter folgt. So sind die Funktionen ausserhalb der Unit nicht sichtbar, aber der Aufruf von FooBar in Bar funktioniert trotzdem.

So, ich hoffe das Tippen hat sich wenigstens gelohnt und die Tipps helfen (ok..einen Teil hat Khabarakh schon erklaert, aber meins ist genauer :P ;))

Greetz
alcaeus

Khabarakh 5. Aug 2005 17:17

Re: Eine Procedure erstellen Beispiel: procedure Removefile
 
Zitat:

Zitat von alcaeus
So, ich hoffe das Tippen hat sich wenigstens gelohnt und die Tipps helfen (ok..einen Teil hat Khabarakh schon erklaert, aber meins ist genauer :P ;))

Sagen wir lieber "etwas ausformulierter und mit Praxisbeispielen anschaulich gemacht" :mrgreen: . Gut, der forward-Teil fehlt bei mir komplett, wenn ich ehrlich bin, hatte ich es bis zu diesem Moment noch nie gesehen :wink: .
Jetzt aber alles komplett? Nö, Klassenmethoden fehlen noch :mrgreen: :
Delphi-Quellcode:
TMyUsefulWindowsMethods = class
  public
    class procedure RemoveFile;
  end;
Aufruf:
Delphi-Quellcode:
TMyUsefulWindowsMethods.RemoveFile
Das wäre eine sinnvolle Kapselung als Klasse.

mindforce 9. Aug 2005 12:19

Re: Eine Procedure erstellen Beispiel: procedure Removefile
 
Vielen Dank. Dies ist mir wirklich gut erklärt worden:

Zitat:

Zitat:

Zitat von Nils_13
hi,
Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
--> function RemoveFile(const Filename: String): DWORD; <--
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

--> function TForm1.RemoveFile(const Filename: String): DWORD;
begin
  result := Windows.DeleteFile(PChar(Filename));
end; <--

end.
Der Code läfut zwar nicht, es soll dir ja auch nur erklären, wie es läuft.



und


Zitat:

Meist reicht jedoch prozeduale Programmierung, besonders für den Einstieg.

Ich würde mal sagen, eine Methode ist hier völlig unpassend . Jedenfalls bei der Form-Klasse.

@mindforce:
Der Code der Funktion steht im implementation-Teil deiner Unit, das ist die Implementation der Funktion. Du kannst den Funktionskopf in den interface-Abschnitt kopieren, dann hast du eine global deklarierte Funktion. Nicht-globale Funktionen kannst du nur in der gleichen Unit und nur in Code unter der Implementation aufrufen. Globale Funktionen kannst du in der gesamten Unit und in Units, in deren uses-Liste deine Unit steht, aufrufen.

.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:09 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz