![]() |
Funktion aufrufen
Sorry, das ist mir jetzt echt peinlich, habe aber werder mit der SuFu, noch mit google etwas gefunden...
Ich habe folgende Funktion ( ![]()
Delphi-Quellcode:
Ich habe sie global deklariert:
function TFormSettings.StringReplace(S: string; OldPattern: string; NewPattern: string; Flags: TReplaceFlags): string;
begin Profil := StringReplace(Profil, 'guten', 'Schönen', [rfReplaceAll, rfIgnoreCase]); ShowMessage(Profil); end;
Delphi-Quellcode:
Aber wie rufe ich sie woanders wieder auf? Mit proceduren ist das ja einfach:
public
function StringReplace(S, OldPattern, NewPattern: string; Flags: TReplaceFlags): string; end;
Delphi-Quellcode:
Aber mit einer Funktion funzt das nicht :(
procedure Rechnen; //Muss näturlich deklariert sein...
begin a + b; end; //[anderer Code] procedure IrgendWas; //Muss näturlich auch deklariert sein... begin a := 1; b := 4; Rechnen; end; Bitte helft mir ! |
AW: Funktion aufrufen
Zitat:
Aber warum deklarierst du die Funktion? Sie ist doch schon in der Unit SysUtils enthalten. Oder ist das eine eigene Implementierung? |
AW: Funktion aufrufen
Zitat:
Eigene Implementierung (Copy&Paste - schau dir meinen Link an :P) |
AW: Funktion aufrufen
Zitat:
|
AW: Funktion aufrufen
Methoden ruft man ausserhalb der Klasse über eine ihrer Instanzen auf ( Objekt)
Delphi-Quellcode:
FormSettings.StringReplace(Profil, 'guten', 'Schönen', [rfReplaceAll, rfIgnoreCase]);
|
AW: Funktion aufrufen
Deine "procedure" ist eine Methode und die hast du nicht global sondern öffentlich in einer Klasse deklariert (public).
Dies ist ein klassisches Birnen und Äpfel vergleichen. |
AW: Funktion aufrufen
Sein Problem ist aber, dass er eine Methode deklariert hat, die es als Funktion schon in der SysUtils gibt. Deswegen wollte ich ihm ja auch die Fehlermeldung entlocken, damit man eventuell mal einen Anhaltspunkt bekommt, was er da eigentlich macht.
|
AW: Funktion aufrufen
Zitat:
|
AW: Funktion aufrufen
Okay,
um jegliche Missverständnise zu vermeiden, mein Ziel: Ich habe eine Art "Profilmanager", man gibt Daten in verschiedene EditFelder ein, z.B.: Zeit, Name, etc. Die Daten werden in ein Memo kopiert und als Textdatei gespeichert, unter einem Dateinamen, den man auch angegeben hat (MeinDateiname.txt). Möchte man dieses Profil später bearbeiten, wählt man in in der ComboBox das Profil aus. Damit das Profil in der ComboBox angezeigt wird, verwende ich beim FormCreate folgendes:
Delphi-Quellcode:
Allerdings lädt er auch die Endung, also ".txt" mit in die ComboBox. Das finde ich aber ziemlich unschön, deshalb möchte ich mit StringReplace die Endung suchen und entfernen (ersetzten gegen '').
procedure TFormSettings.GetProfils;
var lDir: String; lSearchRecord: TSearchRec; begin ComboProfil.Clear; lDir := AppDataPath + 'Profiles\'; if FindFirst(lDir + '*.txt', faAnyFile, lSearchRecord) = 0 then begin repeat if (lSearchRecord.Attr <> faDirectory) then begin ComboProfil.Items.Add(lSearchRecord.Name); end; until FindNext(lSearchRecord) <> 0; FindClose(lSearchRecord); end; end; Wie im Link zu sehen, ist dort eine Funktion, die muss ich ja wohl global deklarieren (da selbst implementiert):
Delphi-Quellcode:
Im Implementationteil steht dann folgendes:
public
function StringReplace(S, OldPattern, NewPattern: string; Flags: TReplaceFlags): string; //Fehler: "[DCC Fehler] Settings.pas(47): E2065 Ungenügende Forward- oder External-Deklaration: 'TFormSettings.StringReplace'" end;
Delphi-Quellcode:
Jetzt möchte ich die Funktion aufrufen, wie folgt ('.txt' entfernen bevor das Element der ComboBox hinzugefügt wird):
function StringReplace(S, OldPattern, NewPattern: string; Flags: TReplaceFlags): string;
begin s := StringReplace(s, '.txt', '', [rfReplaceAll, rfIgnoreCase]); ShowMessage(s); //zum testen end;
Delphi-Quellcode:
So, ausführlich, jetzt erwarte ich auch unterstützung :P
procedure TFormSettings.GetProfils;
var lDir: String; lSearchRecord: TSearchRec; begin ComboProfil.Clear; lDir := AppDataPath + 'Profiles\'; if FindFirst(lDir + '*.txt', faAnyFile, lSearchRecord) = 0 then begin repeat if (lSearchRecord.Attr <> faDirectory) then begin //hier der Variable noch lSearchRecord.Name zuweisen, damit StringReplace ihn verwenden kann StringReplace; //hier der Fehler, wo ich es aufrufen möchte: "[DCC Fehler] Settings.pas(306): E2035 Nicht genügend wirkliche Parameter" ComboProfil.Items.Add(lSearchRecord.Name); end; until FindNext(lSearchRecord) <> 0; FindClose(lSearchRecord); end; end; |
AW: Funktion aufrufen
ChangeFileExt ;)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:03 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