AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi TMemo: Message wenn sich die Pos. des Caret ändert?
Thema durchsuchen
Ansicht
Themen-Optionen

TMemo: Message wenn sich die Pos. des Caret ändert?

Ein Thema von Sharky · begonnen am 30. Aug 2002 · letzter Beitrag vom 30. Aug 2002
Antwort Antwort
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#1

TMemo: Message wenn sich die Pos. des Caret ändert?

  Alt 30. Aug 2002, 12:48
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.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#2
  Alt 30. Aug 2002, 13:20
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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#3
  Alt 30. Aug 2002, 13:29
Zitat von Christian Seehase:
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.
Moin Christian,
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:
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;
Wobei art_bezeichnung_zeilen die Anzahl der Zeilen angibt die aus der Datenbank kommen.


P.S.: Wie kann ich eigentlich meinen Quellcode im Forum formatieren?
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#4
  Alt 30. Aug 2002, 13:37
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).
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#5
  Alt 30. Aug 2002, 13:41
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!
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:00 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz