Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Eigene Deklaration (https://www.delphipraxis.net/134298-eigene-deklaration.html)

johannes-h 19. Mai 2009 14:57


Eigene Deklaration
 
Hallo,

ich habe erst kürzlich mit Delphi angefangen.

Jetzt wollte ich mir ein Programm schreiben, das Text aus einer Memo-Komponente ausliest und in eine ini-Satei schreibt. Diese Funktion möchte ich aber 2mal aufrufen:
1. Beim KLicken auf einen Button
2. Beim Beenden des Programmes
Es war auch kein Problem, die entsprechenden Zeilen Quelltext zu schreiben



Delphi-Quellcode:
procedure TFmMain.FormClose(Sender: TObject; var Action: TCloseAction);
var I: integer;
var ini: Tinifile;
begin
  while Metext.Lines.Count < 46 do begin
    metext.Lines.Add(''); end;
  ini := tinifile.Create('C:\ToDoJH.ini');
  try
    for I := 0 to 46  do
      ini.WriteString('ToDoMemo',IntToStr(i),metext.Lines[i]);
  finally
    ini.Free;
  end;
end;
Genau die selbe Methode rufe ich auch über einen Button auf:
Delphi-Quellcode:
procedure TFmMain.Load1Click(Sender: TObject);
var i: integer;
var ini: Tinifile;
begin
  while MeText.Lines.Count < 46 do begin
         MeText.Lines.Add('');      end;
  ini:=tinifile.Create('c:\ToDojH.ini');
  try
     for i := 0 to 46 do begin
        Metext.Lines[i] := ini.ReadString('ToDoMemo',IntToStr(i),''); end;
  finally
      ini.Free;
  end;
end;
Das wird auf die Dauer sehr unübersichtlich, wenn alles doppelt und dreifach im Quelltext erscheint. :gruebel:

Jetzt habe ich von einem Freund gehört, dass man diesen Teil auch als eingene Metthode deklarieren kann. Wäre nett, falls mit jemand erklären könnte, wie das gemeint war.

Johannes :coder2:

Nersgatt 19. Mai 2009 15:03

Re: Eigene Deklaration
 
Delphi-Quellcode:
unit Unit2;

interface

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

type
  TForm2 = class(TForm)
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
    p : integer;
    procedure SagHallo;
  public
    { Public-Deklarationen }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
begin
  SagHallo;
end;

procedure TForm2.FormCreate(Sender: TObject);
begin
  SagHallo;
end;

Procedure TForm2.SagHallo;
begin
  ShowMessage('Hallo');
end;

end.

jaenicke 19. Mai 2009 15:05

Re: Eigene Deklaration
 
Du schreibst deinen Quelltext in eine eigene Prozedur und rufst diese auf:
Delphi-Quellcode:
type
  TFmMain = class...
  ...
  private
    procedure SaveToFile(FileName: String);
  end;

implementation

procedure TFmMain.SaveToFile(FileName: String);
var
  i: Integer;
  ini: TIniFile;
begin
  while Metext.Lines.Count < 46 do
  begin
    metext.Lines.Add('');
  end;
  ini := tinifile.Create(FileName);
  try
    for i := 0 to 46 do
      ini.WriteString('ToDoMemo', IntToStr(i), metext.Lines[i]);
  finally
    ini.Free;
  end;
end;

procedure TFmMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  SaveToFile('C:\ToDoJH.ini');
end;
// EDIT:
Wobei ein absolutes Verzeichnis schlecht ist.
An das Verzeichnis deiner Exe kommst du mit ExtractFilePath(ParamStr(0)), das ist zwar auch nicht optimal, aber besser als es direkt unter c: zu legen.

soulies 19. Mai 2009 15:06

Re: Eigene Deklaration
 
Delphi-Quellcode:
procedure TFmMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 
    for I := 0 to 46  do
      ini.WriteString('ToDoMemo',IntToStr(i),metext.Lines[i]);
 
end;
Zitat:

Genau die selbe Methode rufe ich auch über einen Button auf:
Delphi-Quellcode:
procedure TFmMain.Load1Click(Sender: TObject);
begin
 
     for i := 0 to 46 do begin
        Metext.Lines[i] := ini.ReadString('ToDoMemo',IntToStr(i),''); end;
 
end;
doch nicht gleich ...

himitsu 19. Mai 2009 15:27

Re: Eigene Deklaration
 
wie wäre es so?

Delphi-Quellcode:
procedure TFmMain.FormClose(Sender: TObject; var Action: TCloseAction);
var I: Integer;
  ini: TIniFile;
begin
  ini := tinifile.Create('C:\ToDoJH.ini');
  try
    ini.WriteInteger('ToDoMemo', 'count', Metext.Lines.Count);
    for i := 0 to Metext.Lines.Count - 1 do
      ini.WriteString('ToDoMemo', IntToStr(i), metext.Lines[i]);
  finally
    ini.Free;
  end;
end;

procedure TFmMain.Load1Click(Sender: TObject);
var i: Integer;
  ini: TIniFile;
begin
  ini := tinifile.Create('c:\ToDojH.ini');
  try
    i := ini.ReadInteger('ToDoMemo', 'count', 0);
    for i := 0 to i - 1 do
      Metext.Lines.Add(ini.ReadString('ToDoMemo', IntToStr(i), ''));
    end;
  finally
    ini.Free;
  end;
end;

TeronG 19. Mai 2009 15:45

Re: Eigene Deklaration
 
psst himitsu lies doch nochmal den ersten Beitrag.... "Metthode deklarieren" nicht "Code verbessern" :-D

johannes-h 19. Mai 2009 16:58

Re: Eigene Deklaration
 
Hallo,

erst mal vielen Dank dafür. Ich hatte nicht damit gerechnet, dass es so schnell geht. :)

Ich werde das jetzt entsprechend eurer Hinwiese ändern. Das gleiche funktioiniert dovh auch beim umbennen von Menüpunkten, oder?

Delphi-Quellcode:
private
procedure Deutsch;

...

procedure TFmMain.Deutsch;
begin
Label1.Caption := 'Hallo';
Label2.Caption := 'Auto';
end
Falls nicht, was müsste ich da machen, ich meine Parameter?


Johannes

@Nersgatt
Ich kann alles nachvollziehen, aber nicht, wofür die variable p verwendet/benötigt wird.

//EDIT

Ich habe falsche Quelltextteile unter falschen Namen gepostet ... Sorry, :wall:


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:11 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 by Thomas Breitkreuz