![]() |
Wie geht das mit den Methodenzeigern
Hallo Leute,
ich bin am verzweifeln, ich hab eine Methodenzeiger
Delphi-Quellcode:
dann hab ich eine Variable definiert
type TFormatOnGetText = procedure(Sender: TField; var Text: String; DisplayText: Boolean) ;
Delphi-Quellcode:
Ok soweit alles klar und jetzt will ich diesem Zeiger eine Procedure
_FormatOnGetText: TFormatOnGetText ;
Delphi-Quellcode:
übergeben aber das bekomme ich nicht hin.
procedure (Sender: TField; var Text: String; DisplayText: Boolean) ;
begin Text := FormatFloat('000000', Sender.AsInteger); end; Kann mir da jemand helfen? Grüßle Sebastian |
Re: Wie geht das mit den Methodenzeigern
Zitat:
Zitat:
Zitat:
|
Re: Wie geht das mit den Methodenzeigern
Zitat:
Wie muss ich den Zeiger definieren wenn ich die Procedure
Delphi-Quellcode:
Wie muss ich dann den Zeiger auf die Procedure definieren?
procedure (Sender: TField; var Text: String; DisplayText: Boolean) ;
begin Text := FormatFloat('000000', Sender.AsInteger); end; Grüßle Sebastian |
Re: Wie geht das mit den Methodenzeigern
Hallo,
Zitat:
Zitat:
Delphi-Quellcode:
Gruß
type TFormatOnGetText = procedure(Sender: TField; var Text: String; DisplayText: Boolean) of object;
xaromz |
Re: Wie geht das mit den Methodenzeigern
Und wie übergebe ich diesem Procedurzeiger
Delphi-Quellcode:
(Ist doch ein Procedurzeger)
type TFormatOnGetText = procedure(Sender: TField; var Text: String; DisplayText: Boolean)
meine Procedure? |
Re: Wie geht das mit den Methodenzeigern
Vor allem solltest du deiner Prozedur mal nen Namen geben:
Delphi-Quellcode:
procedure MachWas(Sender: TField; var Text: String; DisplayText: Boolean) ;
begin Text := FormatFloat('000000', Sender.AsInteger); end; {...} _FormatOnGetText := MachWas; |
Re: Wie geht das mit den Methodenzeigern
Zum Beispiel:
Delphi-Quellcode:
Wenn _FormatOnGetText eine globale Variable ist, mußt du glaube oben bei der Deklaration das "... of object" weglassen und die Prozedur aus der Klasse rausnehmen.
type
TForm1 = class (TForm) // ... private procedure MyFormatOnGetText(Sender: TField; var Text: String; DisplayText: Boolean); // ... end; // ... implementation procedure TForm1.MyFormatOnGetText(Sender: TField; var Text: String; DisplayText: Boolean); begin // ... Dein Code end; procedure TForm1.FormCreate(Sender: TObject); begin _FormatOnGetText := MyFormatOnGetText; end; |
Re: Wie geht das mit den Methodenzeigern
Moin, Moin,
hast du nicht mit TFormatOnGetText einen neuen Ereignistyp deklarieren wollen, der deine Variable _FormatOnGetText lesen/schreiben soll? Wenn dem so ist, dann fehlt doch die published-Deklaration
Delphi-Quellcode:
Oder habe ich das jetzt falsch verstanden?
published
property OnGetText : TFormatOnGetText read _FormatOnGetText write _FormatOnGetText Gruß Ralph |
Re: Wie geht das mit den Methodenzeigern
Zitat:
|
Re: Wie geht das mit den Methodenzeigern
Allso
was ich eigentlich machen wollte, einen Globalen DB-Handler schreiben der die Ausagbe meiner Datenbank bein AfterOpen Ereignis der Query Formatiert. |
Re: Wie geht das mit den Methodenzeigern
Dann soll also ein vorhandenes Event OnAfterOpen erweitert/verändert werden?
|
Re: Wie geht das mit den Methodenzeigern
Also ursprünglich hab ich diese Procedure
Delphi-Quellcode:
lokal definiert und hier aufgerufen
procedure TJRK_GruppenForm.FormatOnGetMGNr(Sender: TField; var Text: String; DisplayText: Boolean);
begin Text := FormatFloat('000000', Sender.AsInteger); end;
Delphi-Quellcode:
Jetzt wollte ich diese Procedure in eine globale Unit Globals setzetn damit ich sie überall verwenden kann.
procedure TJRK_GruppenForm.QryMitgliederAfterOpen(DataSet: TDataSet);
begin Dataset.FieldByName('Mitgliedernummer').OnGetText := FormatOnGetMGNr ; end; Aber es kommt dan immer der Fehler [Fehler] JRK_Gruppen.pas(177): Inkompatible Typen: Methodenzeiger und reguläre Prozedur |
Re: Wie geht das mit den Methodenzeigern
Hmm, wäre es nicht der einfachste Weg, die Prozedur in der Unit zu belassen und im public-Abschnitt zu veröffentlichen?
|
Re: Wie geht das mit den Methodenzeigern
da ist nur das Problem das die Unit nicht immer vorhanden ist und ich somit nicht auf diese zugreifen kann.
Gibt es keine Möglichkeit diese auszulagern? |
Re: Wie geht das mit den Methodenzeigern
Für Datenbank-Sachen empfiehlt es sich, ein eigenes "Data Modul" zu haben.
|
Re: Wie geht das mit den Methodenzeigern
Wie meinst du das mit dem DataModul?
|
Re: Wie geht das mit den Methodenzeigern
Ein DataModul kannst du über Datei -> Neu anlegen.
Da sollte man in Anwendungen, die über Datenbanken laufen, alle datenbankspezifischen Komponenten (TConnection, TQuery, TTable, ...) reinpacken. Es ist sozusagen ein Container, eine eigene Unit, eine eigene Klasse, aber keine Form. Da kannst du auch deinen Handler dann unterbringen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:00 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