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 1 von 2  1 2      
BBJ

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

Komponenten in eigenen Funktionen verwenden

  Alt 16. Jun 2010, 23:21
Hallo an alle,

ich hoffe bin im richtigen Bereich und kann die Frage gut formulieren.
Es geht um vollgendes. Ich habe ein Formular mit versch, Komponenten z.B Label oder eine ProgressBar und habe außerdem
eine selbst geschriebene Funktion.
In der Funktion möchte ich einmal sagen ProgressBar.Position:=ProgressBar.Position+1

ABER er kennt dann das Objekt nicht also die Progressbar.
Ich kann die Objekte immer nur benutzen bei Ereignissen wie Button1.Click aber nie bei funktionen, die ich geschrieben habe.

Wie bekomme ich Zugriff auf die Komponenten der Form.
Form1.ProgressBar.... geht auch nicht.

Einzige Lösung war, dass ich einen neuen Funktionsparameter erstellt habe vom Typ ProgressBar und das Objekt so zusagen übergeben habe.
Aber ich kann ja nicht immer bei Benutzung eines Objektes gleich den Funktionskopf und alle aufrufe der Funktion ändern.

Habt ihr ne Idee zur Lösung? Vielleicht isses ganz einfach
BBJ
  Mit Zitat antworten Zitat
Benutzerbild von H4ndy
H4ndy

Registriert seit: 28. Jun 2003
Ort: Chemnitz
515 Beiträge
 
Delphi XE3 Professional
 
#2

AW: Komponenten in eigenen Funktionen verwenden

  Alt 16. Jun 2010, 23:39
Poste mal Code, ich glaub aber einfach, dass deine Funktion keine Methode des Formulars ist, darum stimmt der Namespace nicht und deine Funktion "sieht" die Progressbar dadurch einfach nicht.
Manuel
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#3

AW: Komponenten in eigenen Funktionen verwenden

  Alt 16. Jun 2010, 23:40
Schreib die Methode doch unter private oder public PArt der TForm1, dann kennt diese auch die internen Klassenvariablen.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: Komponenten in eigenen Funktionen verwenden

  Alt 17. Jun 2010, 05:35
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)
Markus Kinzler
  Mit Zitat antworten Zitat
BBJ

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

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
 
#6

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
BBJ

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

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
 
#8

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 Bernhard Geyer
Bernhard Geyer

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

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
Benutzerbild von DeddyH
DeddyH

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

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
Antwort Antwort
Seite 1 von 2  1 2      


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 19:41 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