Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Memo OnChange Procedure zuweisen?? (https://www.delphipraxis.net/128859-memo-onchange-procedure-zuweisen.html)

DelphiPeter 7. Feb 2009 18:06


Memo OnChange Procedure zuweisen??
 
Hallo zusammen!

Ich erstelle ein Memo zur Laufzeit

Delphi-Quellcode:
...
var
  Memo: TMemo;
begin
  Memo := TMemo.Create(nil);
 
end;
...
Und jetzt möchte ich das OnChange Ereignis ausprogrammieren. Wie mache ich denn das? Stehe vielleicht auch einfach nur auf dem Schlauch.

Meflin 7. Feb 2009 18:07

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. http://fnse.de/S01/0RB.gif

DeddyH 7. Feb 2009 18:08

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]

mkinzler 7. Feb 2009 18:08

Re: Memo OnChange Procedure zuweisen??
 
Einfach durch Zuweisung einer Eventmethode mit der richtigen Signatur:
Delphi-Quellcode:
Memo.onChange := <Methodennamen>;

DelphiPeter 7. Feb 2009 18:29

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 :-(

_frank_ 7. Feb 2009 18:31

Re: Memo OnChange Procedure zuweisen??
 
wie sieht denn MyProcedure aus?

der Kopf sollte so aussehen:

Delphi-Quellcode:
procedure TForm1.MyProcedure(Sender: TObject);
muss natürlich eine Methode des gleichen Forms sein

Gruß Frank

Meflin 7. Feb 2009 18:32

Re: Memo OnChange Procedure zuweisen??
 
TNotifyEvent sieht so aus:
Delphi-Quellcode:
type TNotifyEvent = procedure(
  Sender: TObject
) of object;
Anwendbar also so:
Delphi-Quellcode:
procedure MyProc(Sender: TObject);
begin
  DoSomething;
end;

...

Memo.OnChange := MyProc;

DeddyH 7. Feb 2009 18:34

Re: Memo OnChange Procedure zuweisen??
 
Delphi-Quellcode:
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;
Probier das mal aus.

[edit] Ich poste gleich nichts mehr, pah :? [/edit]

DelphiPeter 7. Feb 2009 18:35

Re: Memo OnChange Procedure zuweisen??
 
Ahh, ok, ich schaue mal nach, danke!

DelphiPeter 7. Feb 2009 18:41

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:

[DCC Fehler] ccl32.dpr(35): E2009 Inkompatible Typen: 'Methodenzeiger und reguläre Prozedur'
Meine onChange Procedure sieht so aus

Delphi-Quellcode:
procedure OnChange(Sender: TObject);
begin

end;
und meine Zuweisung so

Delphi-Quellcode:
Ausgabe := TStringlist.Create;
    Ausgabe.OnChange := OnChange;

DeddyH 7. Feb 2009 18:44

Re: Memo OnChange Procedure zuweisen??
 
Da scheint mir einiges durcheinander geraten zu sein, was willst Du denn eigentlich erreichen?

DelphiPeter 7. Feb 2009 18:47

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...

DeddyH 7. Feb 2009 18:48

Re: Memo OnChange Procedure zuweisen??
 
Im OnChange wovon denn?

Meflin 7. Feb 2009 18:48

Re: Memo OnChange Procedure zuweisen??
 
Du hast ein Memo (= visuelle Komponente) ohne Form?? Das ist irgendwie sinnlos...

DelphiPeter 7. Feb 2009 18:50

Re: Memo OnChange Procedure zuweisen??
 
Im onChange von der TStringlist

DeddyH 7. Feb 2009 18:53

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:

Meflin 7. Feb 2009 18:55

Re: Memo OnChange Procedure zuweisen??
 
Zitat:

Zitat von DeddyH
Und diese TStringlist ist in einer DLL?

Ist doch eigentlich egal. Funktionieren sollte es doch trotzdem :gruebel:

SirThornberry 7. Feb 2009 18:56

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)

mkinzler 7. Feb 2009 19:03

Re: Memo OnChange Procedure zuweisen??
 
Wie erwähnt es muss eine Methode sein. Ob diese von einem Formular(klasse) oder einer anderen Klasse ist.

DelphiPeter 8. Feb 2009 09:59

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.

himitsu 8. Feb 2009 10:03

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?

DelphiPeter 8. Feb 2009 10:05

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.

himitsu 8. Feb 2009 10:21

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:
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;
theoretisch sähe die reine Prozedurdefinition einer TNotifyEvent-Prozedur so aus:
Delphi-Quellcode:
procedure MyOnChange(Self, Sender: TObject);
Würde auch funktioonieren, aber dafür muß man die Typenprüfung von Delphi schon überlisten, da
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.

DelphiPeter 8. Feb 2009 12:56

Re: Memo OnChange Procedure zuweisen??
 
Na also das werde ich mal ausprobieren. Vielen Dank im VOrraus!

_frank_ 8. Feb 2009 13:44

Re: Memo OnChange Procedure zuweisen??
 
Zitat:

Zitat von DelphiPeter
Na also das werde ich mal ausprobieren.

ich hoffe, du meinst damit nicht den Hack, den Himitsu angedeuted hat...

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