![]() |
TMemo: Message wenn sich die Pos. des Caret ändert?
Hai ihr.
Gibt es eine Möglichkeit zu erfahren ob sich die Postion des Caret in einem Memo geändert hat? Ich möchte folgendes erreichen: Ich habe ein Memo in welchen aus einer Datenbank Text geladen wird. Jetzt soll der Anwender zusätzlichen Text schreiben dürfen. Der vorhandene (die ersten n Zeilen des Memos) darf aber nicht verändert/gelöscht werden. Mir wäre es am liebsten wenn er das (oder heisst es den?) Caret überhaupt nicht dort hinsetzen kann. |
Moin Sharky,
nur mal so als Idee: Prüfe doch im OnKeyDown ab, wo sich das Caret befindet (Zeile), und lösche das eingegebene Zeichen einfach wieder. Anschliessend das Caret auf den Anfang des zugelassenen Bereiches setzen. Oder aber mach das ganze zweigeteilt: Oben ein Memo, dessen Inhalt nicht geändert werden darf, unten eines wo Änderungen zulässig sind. Letzters fände ich persönlich sauberer. |
Zitat:
an das OnKeyDown hatte ich auch gedacht. Aber dann muss ich es natürlich auch noch im OnMouseDown machen. Das mit den zwei Memos hatte ich zuerst. Das Problem ist aber das es ohne Problem 8-10 Zeilen Text sein können die aus der Datenbank kommen. Darum müsste auch das obere scrollbar sein. Sieht aber nicht gut aus finde ich. Zur Zeit löse ich das ganz im OnChange-Event:
Code:
Wobei art_bezeichnung_zeilen die Anzahl der Zeilen angibt die aus der Datenbank kommen.
procedure TFRM_Neu_Vorgang.Memo1Change(Sender: TObject);
var sel_start : LongInt; begin sel_start := SendMessage(memo1.Handle, EM_LINEFROMCHAR, memo1.SelStart, 0); If (sel_start <= art_bezeichnung_zeilen-1) then begin Memo1.Perform (EM_UNDO,0,0); Memo1.Perform (EM_EMPTYUNDOBUFFER,0,0); end; end; P.S.: Wie kann ich eigentlich meinen Quellcode im Forum formatieren? |
Moin Sharky,
das OnMouseDown müsstest Du nicht unbedingt abfangen, denn damit wird ja nur die Position geändert, aber noch nichts eingegeben. Wäre also eventuell zu verschmerzen. Wenn Du die maximal mögliche Anzahl Zeilen kennst, kannst Du das Memo ja entsprechend hoch machen. Statt Perform würde ich übrigens immer SendMessage verwenden, da es mit Perform nicht immer funktioniert (warum auch immer). |
Hai Christian.
Hihihi.. ich habe leider nicht viel Platz auf dem Formular. Das ganze wird die Erfassungsmaske für Auftragspositionen. Oben stehen die Positionen und unten werden die Daten für die neuen Positionen eingegeben. Ich werde es mal im OnKeyDown testen. Danke für den Tip bzgl. Perform und SendMessage! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:09 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