Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Komponenten in eigenen Funktionen verwenden (https://www.delphipraxis.net/152270-komponenten-eigenen-funktionen-verwenden.html)

BBJ 17. Jun 2010 15:16

AW: Komponenten in eigenen Funktionen verwenden
 
Danke für die vielen schnellen Antworten :o
Zitat:

Zitat von s.h.a.r.k (Beitrag 1029535)
Schreib die Methode doch unter private oder public PArt der TForm1, dann kennt diese auch die internen Klassenvariablen.

->Ja sowas hatte ich schon einige Male versucht aber das ging irgendwie schief, hier mal der Code
Delphi-Quellcode:
public
    function ReadLog(Logname,searchstr :String;Liste:Tlistbox;HTTPrs:TidHTTP):String;
    { Public-Deklarationen }
end;
Und im Implementationsbereich dann

Delphi-Quellcode:
function ReadLog(Logname,searchstr :String;Liste:Tlistbox;HTTPrs:TidHTTP): String;
var
  A,B:string;
  checker:integer;
begin

  Assignfile(fileo,Folder+Logname);
[...]

end;
Beim compilieren kommt dann aber ein Fehler für den oublic-Bereich
[DCC Fehler] Unit1.pas(68): E2065 Ungenügende Forward- oder External-Deklaration: 'TLogFinderForm.ReadLog'

Zitat:

Zitat von mkinzler (Beitrag 1029536)
Oder stelle den Namen der Instanz der Komponente voran:
Delphi-Quellcode:
Form1.Label1.Text := 'Bl Bla Bla';
Wobei das ein schlechter Stil wäre ( und auch gewisse Gefahren birgt, da man immer auf eine bestimmte Instanz zugreift)

->Das funktioniert aber wenn das schlechter Stil ist würd ichs gern auf anderen Wege lösen, trozdem Danke für die Info

Zitat:

Zitat von Bernhard Geyer (Beitrag 1029544)
Zitat:

Zitat von BBJ (Beitrag 1029532)
In der Funktion möchte ich einmal sagen ProgressBar.Position:=ProgressBar.Position+1

Wieso übergibst du die zu verwendende Progressbar nicht als Parameter für deine Funktion?

->Das habe ich am Anfang auch immer gemacht aber wenn ich so 8 Komponenten habe, auf die jeweils einmal zugreife macht sich das immer Doof das noch in die riesige Parameterliste zu adden und alle funktionsaufrufe umzuschreiben falls mal wieder was dazu kommt

mkinzler 17. Jun 2010 15:21

AW: Komponenten in eigenen Funktionen verwenden
 
Unter Implementation dann den Namen der Formularklasse voranstellen

Delphi-Quellcode:
function TForm1.ReadLog(Logname,searchstr :String;Liste:Tlistbox;HTTPrs:TidHTTP): String;
var
  ...

Bernhard Geyer 17. Jun 2010 15:25

AW: Komponenten in eigenen Funktionen verwenden
 
Zitat:

Zitat von BBJ (Beitrag 1029657)
Wieso übergibst du die zu verwendende Progressbar nicht als Parameter für deine Funktion?

->Das habe ich am Anfang auch immer gemacht aber wenn ich so 8 Komponenten habe, auf die jeweils einmal zugreife macht sich das immer Doof das noch in die riesige Parameterliste zu adden und alle funktionsaufrufe umzuschreiben falls mal wieder was dazu kommt[/QUOTE]
Bei 8 zu übergebenden Komponenten ist dieser Ansatz fehl am Platz. Die Funktion ist vermutlich dann auch nur noch an dieser einen stelle verwenbar. "Modularisierung" mit Funktionen ist hire unpassend.

BBJ 17. Jun 2010 15:40

AW: Komponenten in eigenen Funktionen verwenden
 
Zitat:

Zitat von mkinzler (Beitrag 1029660)
Unter Implementation dann den Namen der Formularklasse voranstellen

Delphi-Quellcode:
function TForm1.ReadLog(Logname,searchstr :String;Liste:Tlistbox;HTTPrs:TidHTTP): String;
var
  ...

Das brachte weiter Fehler moment ich poste mal die Versuche und den Code

1. Dein Vorschlag den Namen vorne dran zuschreiben:

Delphi-Quellcode:
function TLogFinderForm.ReadLog(Logname,searchstr :String;Liste:Tlistbox;HTTPrs:TidHTTP): String;
var
  A,B:string;
  checker:integer;
begin
[...]
end;
Wenn ich den Aufruf der Funktion dann durch
Delphi-Quellcode:
ReadLog(SR.Name,Filter,LogBox,HTTPrs);
tätige bekomme ich den Fehler:
[DCC Fehler] Unit1.pas(167): E2003 Undeklarierter Bezeichner: 'ReadLog'

Habe dann auch beim Aufruf den Namen der Formularklassen davor geschrieben.
Sieht so aus, Funktionsaufruf:
Delphi-Quellcode:
TLogFinderForm.ReadLog(SR.Name,Filter,LogBox,HTTPrs);
Folgender Fehler kommt dann beim Compiler..
[DCC Fehler] Unit1.pas(167): E2076 Diese Form des Methodenaufrufs ist nur für Klassenmethoden erlaubt

Da wusste ich dann nicht weiter, hatte Delphi leider nur im Abi und das nicht zu umfangreich..versuchs mir neben anderen Sprachen wieder etwas beizubringen also nicht böse sein :-D

mkinzler 17. Jun 2010 15:42

AW: Komponenten in eigenen Funktionen verwenden
 
Beim Aufruf natürlich weglassen

DeddyH 17. Jun 2010 15:49

AW: Komponenten in eigenen Funktionen verwenden
 
Um die ganzen "Fachbegriffe" noch einmal zu erklären: wenn es sich um eine nützliche allgemein verwendbare Funktion handeln soll, kann man diese modularisieren (dh. in ein eigenständiges Modul, z.B. eine Unit auslagern). Das könnte so aussehen (sinnfreier Code):
Delphi-Quellcode:
procedure ListNumbers(MinNumber, MaxNumber: integer; List: TStrings);
var i: integer;
begin
  if Assigned(List) then
    begin
      List.BeginUpdate;
      try
        List.Clear;
        for i := MinNumber to MaxNumber do
          List.Add(IntToStr(i));
      finally
        List.EndUpdate;
      end;
    end;
end;
Dieser Prozedur könnte man nun 2 Zahlen und alle möglichen Nachfahren von TStrings (TListBox.Items, TComboBox.Items, TStringlist etc.) übergeben. Ist die Routine aber so speziell, dass sie nur in einem bestimmten Formular Sinn macht, sollte man sie als Methode deklarieren und hat dann Zugriff auf alle anderen Methoden und Eigenschaften des Formulars.
Delphi-Quellcode:
type
  TDeinForm = class(TForm)
  ...
  private
    procedure Wuppdi;
  ...
  end;

...

implementation
...

procedure TDeinForm.Wuppdi; //nicht den Klassennamen vergessen, es ist ja eine Methode der Klasse
begin
  //Code
end;

BBJ 17. Jun 2010 16:08

AW: Komponenten in eigenen Funktionen verwenden
 
Zitat:

Zitat von mkinzler (Beitrag 1029669)
Beim Aufruf natürlich weglassen

Habe ja geschrieben was für ein Fehler auftritt wenn ich das weglasse beim Aufruf
->[DCC Fehler] Unit1.pas(167): E2003 Undeklarierter Bezeichner: 'ReadLog'
Wie bekomme ich dann den Fehler weg?

mkinzler 17. Jun 2010 16:15

AW: Komponenten in eigenen Funktionen verwenden
 
Von wo rufst du es den auf?

BBJ 17. Jun 2010 16:23

AW: Komponenten in eigenen Funktionen verwenden
 
Zitat:

Zitat von mkinzler (Beitrag 1029684)
Von wo rufst du es den auf?

Alles passiert in der selben Unit auf der selben Form
In einer anderen Funktion, die nicht in public steht weil diese nur was berechnet rufe ich die andere Funktion auf.

Erst kommt: TLogFinderForm.ReadLog
Und unter der Funktion dann eine andere in welcher die obere aufgerufen werden soll

DeddyH 17. Jun 2010 17:04

AW: Komponenten in eigenen Funktionen verwenden
 
Zitat:

Delphi-Quellcode:
TLogFinderForm.ReadLog(SR.Name,Filter,LogBox,HTTPrs);

Du hast hier die Klasse mit der Instanz verwechselt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:24 Uhr.
Seite 2 von 3     12 3      

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