Autor Beitrag
spoof
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 48



BeitragVerfasst: So 10.11.13 01:08 
Ich hab Fragen zu Prozeduren, ich kenne es bisher nur so dass man eine Prozedur so benutzt:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure TForm1.BT_LoginClick(Sender: TObject);  // <--------------------------
var
loginuser,loginpw,code,code2:string;
loginusercount,loginpwcount,loginuserverschlüsselt,loginpwverschlüsselt,i,j:integer;
begin

loginuser:=ED_Loginuser.Text;
loginpw:=ED_Loginpw.Text;
Ini:=TIniFile.Create('C:\Iniprogramm\login.ini');
loginuserverschlüsselt:=0;
loginpwverschlüsselt:=0;

usw...


Jetzt seh ich aber bei Tutorials immer öfter sowas

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure OpenDrive(AOpen: Boolean);  // <--------------------------
const
  OpenStr: array[False..True] of string = ('closed''open');
begin
  mciSendString(PChar('Set cdaudio door ' + OpenStr[AOpen] + ' wait'), nil00);
end;
usw...



ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure Out32(PortAddress: smallint; Value: smallint); stdcallexport;  // <--------------------------
var
  ByteValue: Byte;
begin
  ByteValue:=Byte(Value);
  asm
    push dx
    mov dx,PortAddress

usw...



Was hat es mit den Kommentierten Zeilen aufsich?

Wie man beim ersten der 3 Fälle sehen kann ist das eine normale buttonfunction die beim click ausgeführt wird,die anderen 2 versteh ich nicht das is meine Frage, was haben die Procedur Zeilen zu bedeuten? Wieso wird da in der Klammer deklariert? Wo ist der Sinn dabei und warum macht man das und was bringt das oO ?
Tranx
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 648
Erhaltene Danke: 85

WIN 2000, WIN XP
D5 Prof
BeitragVerfasst: So 10.11.13 07:46 
Die Frage ist etwas unklar. Du hast bei Prozeduren (suche dies mal in der Delphi-Hilfe) die Möglichkeit, entweder gar keine Parameter zu übergeben, oder einen oder mehrere. Dazu noch die verschiedensten Variablentypen als Parameter. Sender ist im ersten Fall das Objekt, welches die Prozedur aufruft (z.B. Dein Button). Im zweiten Fall übergibst Du eine boolsche Variable als Parameter. Das sind zumeist selbst geschriebene Prozeduren. Ein Beispiel für mehrere Parameter sit eine OnKeyDown-Prozedur (z.B. einer TEdit-Komponente):

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
Deklaration im Formular Form1:

    procedure Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);


Aufruf:

     procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
     begin
     end;


Hier hast Du sowohl Sender, als auch Key und Shift. Key muss eine Variable sein, die Du übergibst (deswegen Var vorangestellt) , und Shift kann auch ein fester Wert sein.

Der dritte Fall ist zusätzlich mit Direktiven versehen. Diese beschreiben (stdcall z.B., ob die Prozedur die Parameter auf Register des Prozessors ablegt oder nicht, export hat heute keine Bedeutung mehr, galt nur für 16-bit-Systeme (wo die Adressräume unterschiedlich angesprochen wurden)

Rufe mal "Parameter" unter der Delphi-Hilfe auf.

_________________
Toleranz ist eine Grundvoraussetzung für das Leben.
hathor
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 10.11.13 09:35 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
uses MMSystem;

procedure OpenDrive(AOpen: Boolean);  // <--------------------------
const
  OpenStr: array[False..True] of string = ('closed''open');
begin
  mciSendString(PChar('Set cdaudio door ' + OpenStr[AOpen] + ' wait'), nil00);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
   OpenDrive(true); //öffnet CD-Laufwerk
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
   OpenDrive(false); //schliesst CD-Laufwerk, falls mechanisch möglich
end;
WasWeißDennIch
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 653
Erhaltene Danke: 160



BeitragVerfasst: So 10.11.13 10:53 
Außerdem gibt es einen Unterschied zwischen Methoden und den sog. regulären Prozeduren/Funktionen. Eine Methode gehört immer zu einer Klasse bzw. einer Instanz davon, z.B.:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
type
  TDings = class
    (* Deklaration der Methode Bums der Klasse TDings *)
    procedure Bums;
  end;

(* Prototyp der regulären Prozedur Wuppdi *)
procedure Wuppdi;

implementation

(* Implementation der Methode, der Klassenname ist zwingend voranzustellen *)
procedure TDings.Bums;
begin
  ...
end;

(* Implementation der Prozedur Wuppdi ohne Klassennamen (welchen denn auch?) *)
procedure Wuppdi;
begin
  ...
end;
Lemmy
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 792
Erhaltene Danke: 49

Windows 7 / 10; CentOS 7; LinuxMint
Delphi 7-XE10.1, VS 2015
BeitragVerfasst: So 10.11.13 11:15 
user profile iconspoof hat folgendes geschrieben Zum zitierten Posting springen:


ausblenden Delphi-Quelltext
1:
2:
3:
procedure TForm1.BT_LoginClick(Sender: TObject);  // <--------------------------
var
usw...


das ist streng genommen keine Prozedur sondern eine Methode der Klasse TForm1. Methode = Funktion oder Prozedur einer Klasse

user profile iconspoof hat folgendes geschrieben Zum zitierten Posting springen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure OpenDrive(AOpen: Boolean);  // <--------------------------
const
  OpenStr: array[False..True] of string = ('closed''open');
begin
  mciSendString(PChar('Set cdaudio door ' + OpenStr[AOpen] + ' wait'), nil00);
end;
usw...



das ist jetzt eine Prozedur. Sozusagen eine "globale Methode" - also wie bei globalen Variabeln ohne Zusammenhang zu einer Klasse.



user profile iconspoof hat folgendes geschrieben Zum zitierten Posting springen:

ausblenden Delphi-Quelltext
1:
2:
procedure Out32(PortAddress: smallint; Value: smallint); stdcallexport;  // <--------------------------
usw...



Was sagt F1 beim "Export"? docwiki.embarcadero....duren_und_Funktionen

stdcall und export sind sogenannte Aufrufkonventionen, die im Zusammenhang mit DLLs auftauchen...

Grüße
spoof Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 48



BeitragVerfasst: So 10.11.13 12:11 
Ohje ich verteh iwie kaum was.
Ich such mal nach nem tutorial vllt find ich ja was.
Perlsau
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 10.11.13 12:23 
Hier gibt es Grundlagen-Tutorials.
Auch die Uni Leipzig bietet ein Delphi-Tutorial.
Es gibt sogar ein entsprechendes Wikibook.
... und noch viel mehr via Google zu erkunden :lol:
hathor
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 10.11.13 12:26 
@spoof

Gewöhne Dir mal an, fehlerfrei zu schreiben, sonst wird das mit dem Programmieren NIE etwas!

www.downloads.delphi...de/DelphiStarter.pdf


Zuletzt bearbeitet von hathor am So 10.11.13 15:05, insgesamt 1-mal bearbeitet

Für diesen Beitrag haben gedankt: Mathematiker
Perlsau
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 10.11.13 12:28 
user profile iconhathor hat folgendes geschrieben Zum zitierten Posting springen:
Gewöhne Dir mal an, fehlerfrei zu schreiben, sonst wird das mit dem Programmieren NIE etwas!

Wem antwortest du hier? Bei Antworten sollte man meiner Ansicht nach kennzeichnen, an wen sich diese richtet, sonst sieht es hier nämlich so aus, als würdest du mir Rechtschreibfehler unterjubeln wollen :P

Ansonsten stimme ich dir natürlich zu: Die Rechtschreibung vieler junger Menschen läßt heute sehr zu wünschen übrig. Scheint fast so, als wollten die gar nicht verstanden werden ... :twisted:

Für diesen Beitrag haben gedankt: Mathematiker
hathor
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 10.11.13 15:08 
user profile iconPerlsau hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconhathor hat folgendes geschrieben Zum zitierten Posting springen:
Gewöhne Dir mal an, fehlerfrei zu schreiben, sonst wird das mit dem Programmieren NIE etwas!

Wem antwortest du hier? Bei Antworten sollte man meiner Ansicht nach kennzeichnen, an wen sich diese richtet, sonst sieht es hier nämlich so aus, als würdest du mir Rechtschreibfehler unterjubeln wollen :P

Ansonsten stimme ich dir natürlich zu: Die Rechtschreibung vieler junger Menschen läßt heute sehr zu wünschen übrig. Scheint fast so, als wollten die gar nicht verstanden werden ... :twisted:


Sorry!
Hier ist so wenig "Action", dass man kaum noch damit rechnet, Antwort-Kollisionen zu erzeugen.
spoof Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 48



BeitragVerfasst: So 10.11.13 15:15 
Ok, danke für alle Antworten, ich hab es denk ich jetzt verstanden:


ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
//button1
procedure TForm1.Button1Click(Sender: TObject);       
begin
messages(5); //springt zu messages mit dem wert 5
end;


//gehört zu button 1
procedure messages(Anzahl: integer);    //Anzahl erhält den Wert 5 und die procedure wird ausgeführt ohne Rückgabewert für die procedure button1click           
  var i: integer;
  begin
    for i := 1 to Anzahl do
      Showmessage(Inttostr(i));
  end;


//button 2
procedure TForm1.Button2Click(Sender: TObject);     
  var i: integer;
  begin
    for i := 1 to messages2(2,5do      //Das schleifenende ist das Result der Funktion messages2
      Showmessage(Inttostr(i));
end;


 //gehört zu button 2
function messages2(zahl1,zahl2:integer):integer;    //message2 ist ein integer ebenso zahl1 und zahl2, die parameter sind die werte der Übergabe aus der Procedur    
  var i: integer;
  begin
   result:=zahl1+zahl2;               //der wert von messages2
  end;


end.


Hab das mal soweit kommentiert wie ich den Code verstehe und geschrieben hab.
WasWeißDennIch
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 653
Erhaltene Danke: 160



BeitragVerfasst: So 10.11.13 19:57 
Naja, nicht so ganz. Reguläre Prozeduren/Funktionen gehören zu gar keiner Klasse, auch nicht zu Button1. Sie sind völlig unabhängig aufrufbar, Beispiel:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
unit Blabberblubb;

...

implementation

function DasDoppelteVon(Wert: integer): integer;
begin
  Result := Wert * 2;
end;

Die Funktion DasDoppelteVon ist innerhalb der Unit Blabberblubb überall verfügbar und an keine Instanzdaten gebunden. Möchte man sie auch von anderen Units aus aufrufbar machen, muss der Funktionskopf im interface-Teile bekannt gemacht werden:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
unit Blabberblubb;

interface
...

function DasDoppelteVon(Wert: integer): integer; //Bekanntmachung

implementation

function DasDoppelteVon(Wert: integer): integer;
begin
  Result := Wert * 2;
end;

Im Gegensatz dazu gibt es noch Methoden, die gehören wie schon gesagt zu einer Klasse bzw. einer Instanz davon.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
type
  TSomeClass = class
  public
    procedure MachWasTolles;
  end;

...

procedure TSomeClass.MachWasTolles;
begin
  (* Ganz toller Code *)
end;

Wie man sieht werden Methoden innerhalb der Klassendeklaration deklariert und in der Implementation (dem eigentlichen Code) muss der Klassenname vorangestellt werden. Das heißt auch, dass man die Methode MachWasTolles nur über eine Instanz von TSomeClass aufrufen kann.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure TMyForm.Button1Click(Sender: TObject);
var
  SomeClass: TSomeClass;
begin
  (* Erzeugen der Instanz *)
  SomeClass := TSomeClass.Create;
  try
    (* Aufruf der Methode dieser Instanz *)
    SomeClass.MachWasTolles;
  finally
    (* Freigabe der Instanz *)
    SomeClass.Free;
  end;
end;