AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Eine Procedure erstellen Beispiel: procedure Removefile ...
Thema durchsuchen
Ansicht
Themen-Optionen

Eine Procedure erstellen Beispiel: procedure Removefile ...

Ein Thema von mindforce · begonnen am 4. Aug 2005 · letzter Beitrag vom 9. Aug 2005
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von malo
malo

Registriert seit: 19. Sep 2004
2.115 Beiträge
 
#11

Re: Eine Procedure erstellen Beispiel: procedure Removefile

  Alt 5. Aug 2005, 17:36
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.
  Mit Zitat antworten Zitat
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#12

Re: Eine Procedure erstellen Beispiel: procedure Removefile

  Alt 5. Aug 2005, 17:38
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).
  Mit Zitat antworten Zitat
5. Aug 2005, 17:40
Dieses Thema wurde von "alcaeus" von "Programmieren allgemein" nach "Object-Pascal / Delphi-Language" verschoben.
Ist in Object Pascal wohl besser aufgehoben
Benutzerbild von BlackJack
BlackJack

Registriert seit: 2. Jul 2005
Ort: Coesfeld
246 Beiträge
 
Delphi 2005 Personal
 
#14

Re: Eine Procedure erstellen Beispiel: procedure Removefile

  Alt 5. Aug 2005, 17:41
Zitat von Nils_13:
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.
See my shadow changing, stretching up and over me.
Soften this old armor. Hoping I can clear the way
By stepping through my shadow, coming out the other side.
Step into the shadow. Forty six and two are just ahead of me.
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#15

Re: Eine Procedure erstellen Beispiel: procedure Removefile

  Alt 5. Aug 2005, 17:46
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 . 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.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#16

Re: Eine Procedure erstellen Beispiel: procedure Removefile

  Alt 5. Aug 2005, 17:51
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 )

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#17

Re: Eine Procedure erstellen Beispiel: procedure Removefile

  Alt 5. Aug 2005, 18:17
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 )
Sagen wir lieber "etwas ausformulierter und mit Praxisbeispielen anschaulich gemacht" . Gut, der forward-Teil fehlt bei mir komplett, wenn ich ehrlich bin, hatte ich es bis zu diesem Moment noch nie gesehen .
Jetzt aber alles komplett? Nö, Klassenmethoden fehlen noch :
Delphi-Quellcode:
TMyUsefulWindowsMethods = class
  public
    class procedure RemoveFile;
  end;
Aufruf:
TMyUsefulWindowsMethods.RemoveFile Das wäre eine sinnvolle Kapselung als Klasse.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
mindforce
(Gast)

n/a Beiträge
 
#18

Re: Eine Procedure erstellen Beispiel: procedure Removefile

  Alt 9. Aug 2005, 13:19
Vielen Dank. Dies ist mir wirklich gut erklärt worden:

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.

.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:33 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