2 TMemo Felder gleichzeitig scrollen
-
Hi!
Ich habe 2 TMemo Felder und möchte diese so miteinander "verknüpfen" dass ich wenn ich bei einem TMemo-Feld die Scrollbalken verschiebe sich auch im anderen TMemo-Feld die Scrollbalken verschieben. Der Inhalt natürlich ebenfalls. ICh habe so ein Codebeispiel hier schon mal gesehen glaube ich, nur ist die momentane Suchfunktion rein gar nicht zu gebrauchen. Danke im vorraus!
Sebo
-
Hallo
fang die Botschaften des einen TMemos ab und mach dasselbe mit dem anderem TMemo
MfG
Klaus
-
Jo, des ist mir klar, aber mir ist nicht klar wie ich das mache.
Hat jemand einen Tip oder ein Codebeispiel? Thanks a lot!
Sebo
-
Hallo
zB
void __fastcall TForm1::NewWndProcMemo1(TMessage &AMsg) { switch (AMsg.Msg) { case WM_BOTSCHAFT : Mach_irgandWas_mit-Memo2(); default : OldWndProcTrackBar(AMsg); }
So ca. in der Art
MfG
Klaus
-
Zur Botschaftsbehandlung findest du hier Unmengen im Forum. Einfach mal die Suche/FAQ bemühen.
Wahrscheinlich heißt die dich interessierende Botschaft WM_SCROLL.Gruß, Oli
-
Jo, Danke an alle!
Sebo
-
hi,
anstatt nur hilflose kommentare hier mal ein ausführliches beispiel. du hast zwei memos auf deinem formular. beim scrollen eines memos wird das andere jeweils angepasst.
im header des formulares:
private: TWndMethod OldWndProcMemo1; TWndMethod OldWndProcMemo2; void __fastcall NewWndProcMemo1(TMessage &Msg); void __fastcall NewWndProcMemo2(TMessage &Msg);
in der cpp des formulares:
//--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { // alte Fensterprozeduren merken OldWndProcMemo1 = Memo1->WindowProc; OldWndProcMemo2 = Memo2->WindowProc; // neue Fensterprozeduren setzen Memo1->WindowProc = NewWndProcMemo1; Memo2->WindowProc = NewWndProcMemo2; } //--------------------------------------------------------------------------- // Fensterprozedur fuer Memo1 // -> hier kommen alle Windowsbotschaften an //--------------------------------------------------------------------------- void __fastcall TForm1::NewWndProcMemo1(TMessage &Msg) { switch (Msg.Msg) { // auf Scrollen reagieren und Memo2 anpassen case WM_HSCROLL : case WM_VSCROLL : { // die Botschaft kommt von Memo2 // -> nicht erneut eine Message an Memo2 senden // sondern die Verarbeitung abbrechen if ((HANDLE) Msg.LParam == Memo2->Handle) { Msg.LParam = 0; break; } // Message an Memo2 weiterleiten // -> LPARAM wird nur von ScrollBar-Controls verwendet // -> wir speichern dort das Handle vom Memo ab, das das // Scrollen ausloest PostMessage(Memo2->Handle, Msg.Msg, Msg.WParam, (LPARAM) Memo1->Handle); break; } } // Original-Windowsprozedur aufrufen // -> damit Message auch bei Memo1 ankommt OldWndProcMemo1(Msg); } //--------------------------------------------------------------------------- // Fensterprozedur fuer Memo2 // -> hier kommen alle Windowsbotschaften an //--------------------------------------------------------------------------- void __fastcall TForm1::NewWndProcMemo2(TMessage &Msg) { switch (Msg.Msg) { // auf Scrollen reagieren und Memo1 anpassen case WM_HSCROLL : case WM_VSCROLL : { // die Botschaft kommt von Memo1 // -> nicht erneut eine Message an Memo1 senden // sondern die Verarbeitung abbrechen if ((HANDLE) Msg.LParam == Memo1->Handle) { Msg.LParam = 0; break; } // Message an Memo1 weiterleiten // -> LPARAM wird nur von ScrollBar-Controls verwendet // -> wir speichern dort das Handle vom Memo ab, das das // Scrollen ausloest PostMessage(Memo1->Handle, Msg.Msg, Msg.WParam, (LPARAM) Memo2->Handle); break; } } // Original-Windowsprozedur aufrufen // -> damit Message auch bei Memo2 ankommt OldWndProcMemo2(Msg); }
viel spass
-
Hallo
was sollte er denn daraus lernen -> wie man Code kopiert
Sorry, aber ich gehe davon aus "SeboStone" wollte hier etwas lernen
(und ich gehe auch davon aus er hat es getan)
siehe sein PostingMfG
Klaus
-
Ja, ich habe noch ein bisschen recherchiert und rumprobiert. funzt. Aber trotzdem Danke auch für den Code!
@KlausB: Ausserdem hat es doch gut gemeint und auch gut dokumentiert. Der nächste freut sich drüber liest die Doku dazu und hat auch was gelernt, wahrscheinlich schneller als ich, dafür vergisst er es vielleicht schneller wieder, aber egal.
Ziel und Sinn erfolgreich erreicht!
Sebo
-
Hallo,
ich bin Sunday mehr als sehr dankbar für die ausführliche Variante. Sehr nett!
Eine knappe Beantwortung hilft mir meistens, jedoch führt sie mich nicht zum Ziel.
Wahrscheinlich hätte ich es nicht erreicht und wäre dann frustriert gewesen. Meist stehe ich ja auch noch vor anderen Problemen, die mich herausfordern. Deswegen wünschte ich mir eine Antwort wie die von Sunday, damit ich mich wieder um die anderen Probleme kümmern kann.Vielen Dank für eure Hilfe, schreibt sie stets ausführlich, wenn möglich!
Gruß,
HS-Klaus