![]() |
Memo OnChange Procedure zuweisen??
Hallo zusammen!
Ich erstelle ein Memo zur Laufzeit
Delphi-Quellcode:
Und jetzt möchte ich das OnChange Ereignis ausprogrammieren. Wie mache ich denn das? Stehe vielleicht auch einfach nur auf dem Schlauch.
...
var Memo: TMemo; begin Memo := TMemo.Create(nil); end; ... |
Re: Memo OnChange Procedure zuweisen??
Du erstellst einfach eine procedure mit der gleichen Signatur die eben die "echte" OnChange-Prozedur hat (also mit denselben Parametern).
Und dann kannst du die einfach mittels Memo.OnChange := MyProcedure zuweisen. edit: haha, schneller als die zwei Top-"Spammer". Fehlt ja nur noch Luckie. ![]() |
Re: Memo OnChange Procedure zuweisen??
Du brauchst eine Methode vom Typ TNotifyEvent, die kannst Du dann dem OnChange des Memos zuweisen.
[edit] *Pfüh* immer diese Sockenjäger :stupid: [/edit] |
Re: Memo OnChange Procedure zuweisen??
Einfach durch Zuweisung einer Eventmethode mit der richtigen Signatur:
Delphi-Quellcode:
Memo.onChange := <Methodennamen>;
|
Re: Memo OnChange Procedure zuweisen??
Also das hier geht nicht:
Memo.OnChange := MyProcedure Was heißt den TNotifyEvent, muss ich da was in die Procedure schreiben? Sorry das ich mich so doof anstelle :-( |
Re: Memo OnChange Procedure zuweisen??
wie sieht denn MyProcedure aus?
der Kopf sollte so aussehen:
Delphi-Quellcode:
muss natürlich eine Methode des gleichen Forms sein
procedure TForm1.MyProcedure(Sender: TObject);
Gruß Frank |
Re: Memo OnChange Procedure zuweisen??
TNotifyEvent sieht so aus:
Delphi-Quellcode:
Anwendbar also so:
type TNotifyEvent = procedure(
Sender: TObject ) of object;
Delphi-Quellcode:
procedure MyProc(Sender: TObject);
begin DoSomething; end; ... Memo.OnChange := MyProc; |
Re: Memo OnChange Procedure zuweisen??
Delphi-Quellcode:
Probier das mal aus.
type
TMyForm = class(TForm) ... private procedure ShowMemoChange(Sender: TObject); ... end; ... procedure TMyForm.ShowMemoChange(Sender: TObject); begin ShowMessage('Inhalt des Memos hat sich geändert'); end; ... begin Memo := TMemo.Create(nil); Memo.OnChange := ShowMemoChange; end; [edit] Ich poste gleich nichts mehr, pah :? [/edit] |
Re: Memo OnChange Procedure zuweisen??
Ahh, ok, ich schaue mal nach, danke!
|
Re: Memo OnChange Procedure zuweisen??
Also, ich glaube das Problem liegt daran, das ich das alles in einer DLL versuche, die kein Formular hat.
Ich wollte es nun mal mit einer TStringlist versuchen, doch auch hier bekomme ich die Meldung Zitat:
Delphi-Quellcode:
und meine Zuweisung so
procedure OnChange(Sender: TObject);
begin end;
Delphi-Quellcode:
Ausgabe := TStringlist.Create;
Ausgabe.OnChange := OnChange; |
Re: Memo OnChange Procedure zuweisen??
Da scheint mir einiges durcheinander geraten zu sein, was willst Du denn eigentlich erreichen?
|
Re: Memo OnChange Procedure zuweisen??
öhm...
Ich habe eine procedure, die eine ausgabe in ein TStrings schreibt, also von mir aus ein Memo oder eine Stringlist. Und nun möchte ich diese Procedure aufrufen und im onChange mit der Ausgabe arbeiten... |
Re: Memo OnChange Procedure zuweisen??
Im OnChange wovon denn?
|
Re: Memo OnChange Procedure zuweisen??
Du hast ein Memo (= visuelle Komponente) ohne Form?? Das ist irgendwie sinnlos...
|
Re: Memo OnChange Procedure zuweisen??
Im onChange von der TStringlist
|
Re: Memo OnChange Procedure zuweisen??
Und diese TStringlist ist in einer DLL? Mir erscheint Dein Unterfangen ziemlich aussichtslos, es sei denn, ich kapiere mal wieder gar nichts :gruebel:
|
Re: Memo OnChange Procedure zuweisen??
Zitat:
|
Re: Memo OnChange Procedure zuweisen??
Was auch immer er vor hat. Die Fehlermeldung sagt genau das was wohl nicht stimmt. Es wird eine Methode erwartet (of Object) und er verwendet eine normale procedure. Somit ist die procedure nicht vom erwarteten Typ (TNotifyEvent)
|
Re: Memo OnChange Procedure zuweisen??
Wie erwähnt es muss eine Methode sein. Ob diese von einem Formular(klasse) oder einer anderen Klasse ist.
|
Re: Memo OnChange Procedure zuweisen??
Das heißt, wenn ich eine Klasse "drum baue" sollte es funktionieren? Das sollte ja kein Problem darstellen, oder liege ich da falsch? Ich wollte nur ungerne die besagte procedure umschreiben.
|
Re: Memo OnChange Procedure zuweisen??
wenn du die Prozedur nicht umschreiben willst, dann könntest du noch eine Umleitung einbauen
in einer Klasse eine Funktion reinmachen, welche als OnChange-Ereignis aufgerufen weren kann und diese leitet dann alles an deine Prozedur weiter. oder könntest du zumindestens die Parameter deiner Prozedur etwas erweitern? |
Re: Memo OnChange Procedure zuweisen??
naja, theoretisch könnte ich die procedure einfach umschreiben, aber ich war eigentlich froh das es soweit nun funktioniert. Kann ich nicht einfach eine eigene TStringlist bauen, sowas wie TPetersListe, dann könnte ich ja dort alles ableiten von der richtigen tstringlist, oder wie? hmm... bin überfragt.
|
Re: Memo OnChange Procedure zuweisen??
Ist zwar nicht unbedingt der Beste weg, aber so könnte man es notfalls auch noch lösen
Delphi-Quellcode:
theoretisch sähe die reine Prozedurdefinition einer TNotifyEvent-Prozedur so aus:
type TMyNotifyEvent = class
class procedure MyOnChange(Sender: TObject); end; class procedure TMyNotifyEvent.MyOnChange(Sender: TObject); begin end; procedure TForm1.FormCreate(Sender: TObject); begin Memo1.OnChange := TMyNotifyEvent.MyOnChange; end;
Delphi-Quellcode:
Würde auch funktioonieren, aber dafür muß man die Typenprüfung von Delphi schon überlisten, da
procedure MyOnChange(Self, Sender: TObject);
Procedure <> Procedure of Object. Man müßte also irgendwie den Typ von Pointer ( @MyOnChange ) nach TNotifyEvent umbiegen, da sich die Prozedur sonst nicht an .OnChange übergeben läßt. |
Re: Memo OnChange Procedure zuweisen??
Na also das werde ich mal ausprobieren. Vielen Dank im VOrraus!
|
Re: Memo OnChange Procedure zuweisen??
Zitat:
wozu ableiten und neue klasse erstelen? warum nicht aus der procedure eine Methode machen? wie ist dein Aufbau? liegt die dll in einer Dll? in dem fall sollte eine simple umleitung das problem doch lösen, oder nicht? was spricht dagegen? Fragen über Fragen... Gruß Frank |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:56 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