AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Komponenten in eigenen Funktionen verwenden
Thema durchsuchen
Ansicht
Themen-Optionen

Komponenten in eigenen Funktionen verwenden

Ein Thema von BBJ · begonnen am 16. Jun 2010 · letzter Beitrag vom 18. Jun 2010
Antwort Antwort
Seite 2 von 3     12 3      
BBJ

Registriert seit: 23. Jul 2007
Ort: Dresden
7 Beiträge
 
#11

AW: Komponenten in eigenen Funktionen verwenden

  Alt 17. Jun 2010, 15:16
Danke für die vielen schnellen Antworten
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'

Oder stelle den Namen der Instanz der Komponente voran:
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

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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#12

AW: Komponenten in eigenen Funktionen verwenden

  Alt 17. Jun 2010, 15:21
Unter Implementation dann den Namen der Formularklasse voranstellen

Delphi-Quellcode:
function TForm1.ReadLog(Logname,searchstr :String;Liste:Tlistbox;HTTPrs:TidHTTP): String;
var
  ...
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#13

AW: Komponenten in eigenen Funktionen verwenden

  Alt 17. Jun 2010, 15:25
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
BBJ

Registriert seit: 23. Jul 2007
Ort: Dresden
7 Beiträge
 
#14

AW: Komponenten in eigenen Funktionen verwenden

  Alt 17. Jun 2010, 15:40
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
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:
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#15

AW: Komponenten in eigenen Funktionen verwenden

  Alt 17. Jun 2010, 15:42
Beim Aufruf natürlich weglassen
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#16

AW: Komponenten in eigenen Funktionen verwenden

  Alt 17. Jun 2010, 15:49
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;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
BBJ

Registriert seit: 23. Jul 2007
Ort: Dresden
7 Beiträge
 
#17

AW: Komponenten in eigenen Funktionen verwenden

  Alt 17. Jun 2010, 16:08
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?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#18

AW: Komponenten in eigenen Funktionen verwenden

  Alt 17. Jun 2010, 16:15
Von wo rufst du es den auf?
Markus Kinzler
  Mit Zitat antworten Zitat
BBJ

Registriert seit: 23. Jul 2007
Ort: Dresden
7 Beiträge
 
#19

AW: Komponenten in eigenen Funktionen verwenden

  Alt 17. Jun 2010, 16:23
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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#20

AW: Komponenten in eigenen Funktionen verwenden

  Alt 17. Jun 2010, 17:04
Zitat:
TLogFinderForm.ReadLog(SR.Name,Filter,LogBox,HTTPrs);
Du hast hier die Klasse mit der Instanz verwechselt.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 04:39 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