Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Brauche Starthilfe für OOP mit Class und Methode (https://www.delphipraxis.net/112510-brauche-starthilfe-fuer-oop-mit-class-und-methode.html)

EccoBravo 22. Apr 2008 17:26


Brauche Starthilfe für OOP mit Class und Methode
 
Hallo,

will mich von der proceduralen Programmierung endlich lösen und brauche etwas Starthilfe

Hier mein Problem mit dem ich beginnen möchte:

Was möchte ich mit dem Programm machen?

Wenn ich in die EditFeldern des Form1:TForm
E_Name:TEdit einen PersonenNamen
und
E_geb:TEdit dessen Geburtsdatum
eingebe
so soll eine Methode im Hintergrund eine ID dieser Person aus Geburtsdatum und NamensInitialen generieren und diese in das EditFeld
E_ID:TEdit schreiben.

in der Form
Delphi-Quellcode:
E_Name.Text:='Meier, Hans';
E_geb.Text:='12.11.44'

E_ID.Text='121144MH-0'
Hier nun mein CodeVersuch

Delphi-Quellcode:
 unit EB_Foto_Unit1;

interface

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

type
    TSatz = object
        PName: string;
        geb: string;
        ID: string;
       
        procedure bilde_ID;
    end;

   ...

    TForm1 = class(TForm)
        E_Name: TEdit;
        E_ID: TEdit;
        E_geboren: TEdit;
        E_Inhalt: TEdit;
        E_Datum: TEdit;
   ...    
      end;

var
    Form1: TForm1;
 
    Satz: TSatz;
   

implementation

uses ...;

{$R *.dfm}

...

procedure TForm1.FormCreate(Sender: TObject);
var
    i: integer;
   
begin
    ...
    Satz:=TSatz.create // IDE meckert diese Stelle an !!
   
    ...
end;



procedure TForm1.E_gebChange(Sender: TObject);
begin
    Satz.geb := Text;
    E_ID.Text := Satz.ID;
end;

procedure TForm1.E_NameChange(Sender: TObject);
begin
    Satz.PName := Text;
    E_ID.Text := Satz.ID;
end;

   ...

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Methoden von TSatz

procedure TSatz.bilde_ID;
var
    s0, s1, s2, s3, s4, s5, s6, s7: string;
    n0, n1, n2, n3, n4, n5, n6, n7: integer;
begin
    s0 := geb;    // hier kommt das E_geb hinein
    n0 := length(s0);
    n1 := pos('.', s0);
    s1 := copy(s0, 1, n1 - 1);
    s4 := copy(s0, n1 + 1, n0 - n1);
    n2 := pos('.', s4);
    s2 := copy(s4, 1, n2 - 1);
    s3 := copy(s4, n2 + 1, 6);
    s0 := PName;     // hier kommt das E_Name hinein
    n5 := pos(', ', s0);
    s5 := copy(s0, 1, 1);
    s6 := copy(s0, n5 + 2, 1);
    if length(s1) = 1 then
        s1 := '0' + s1;
    if length(s2) = 1 then
        s2 := '0' + S2;
    if length(s3) > 2 then
        s3 := copy(s3, length(s3) - 1, 2);
    s7 := s1 + s2 + s3 + s5 + s6 + '-0';
    ID := s7;      // hier stünde ja das Satz.ID bereit
end;

//..............................................................................

end.
Aber der Code macht es nicht,

erstens meckert die IDE diese Strlle
Delphi-Quellcode:
 Satz:=TSatz.create // IDE meckert diese Stelle an !!
an

und wenn ich diese Stelle fälschlicherweise weglasse,
so erscheint im E_ID:TEdit
nach den Eingaben in E_Name:TEdit und E_geb:TEdit
keine ID

Ja, ich weiss, diese Frage ist megablöd, aber ich bin und war eben ein eingefleischter proceduraler Programmierer. Das soll sich ja jetzt ändern

Danke für die Hilfe

E. B.

Die Muhkuh 22. Apr 2008 17:36

Re: Brauche Starthilfe für OOP mit Class und Methode
 
Hi,

ich hab mal folgenden Lösungsvorschlag für Dich:

Delphi-Quellcode:
unit Unit3;

interface

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

type
  TForm3 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

  TSatz = class(TObject)
  private
    FGeb: String;
    FName: String;
    function GetID: string;
  public
    property Name: String read FName write FName;
    property Geb: String read FGeb write FGeb;
    property ID: string read GetID;
  end;

var
  Form3: TForm3;

implementation

{$R *.dfm}

{ TSatz }

function TSatz.GetID: string;
var
  tmpDatum: String;
  tmpName: String;
  tmpInitial: String;
begin
  tmpDatum := StringReplace(Geb, '.', '', [rfReplaceAll]);
  tmpName := Trim(Name);
  tmpInitial := tmpName[1] + Copy(tmpName, Pos(',', tmpName) + 2, 1);
  Result := tmpDatum + tmpInitial + '-0';
end;

procedure TForm3.Button1Click(Sender: TObject);
var
  Satz: TSatz;
begin
  Satz := TSatz.Create;
  Satz.Name := 'Rauber, Manuel';
  Satz.Geb := '07.09.90';
  ShowMessage(Satz.ID);
end;

end.
Hier gibt es einen kleinen Crashkurs zur OOP.

DeddyH 22. Apr 2008 17:39

Re: Brauche Starthilfe für OOP mit Class und Methode
 
Naja, ich würde Geb als TDate definieren, aber war ja auch nur ein Beispiel, gelle? :mrgreen:

Die Muhkuh 22. Apr 2008 17:41

Re: Brauche Starthilfe für OOP mit Class und Methode
 
Natürlich als TDate, aber mit einem String ging es schneller :tongue:
Geht ja auch nur um das Prinzip. Wie es EWeiss EccoBravo dann macht, ist ja ihm selbst überlassen.

DeddyH 22. Apr 2008 17:46

Re: Brauche Starthilfe für OOP mit Class und Methode
 
Wie EWeiss es macht, weiß er glaub ich selbst, EccoBravo hatte gefragt :lol: :tongue:

Die Muhkuh 22. Apr 2008 17:47

Re: Brauche Starthilfe für OOP mit Class und Methode
 
Ach Mist, sorry EccoBravo :mrgreen:

EccoBravo 22. Apr 2008 18:33

Re: Brauche Starthilfe für OOP mit Class und Methode
 
okidoki, kein Problem.

die Sache scheint ansich zu laufen, werde damit
(StringReplace Trim, ... ) noch etwas herumprobieren

Anstelle .PName stand in meinem Programm .Name, und diesen hat er im DP-Forum Code blau gemacht (weiss nicht warum), deshalb habe ich ihn hier anders genannt.

Grüße und Danke

E. B.


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