Autor |
Beitrag |
galagher
      
Beiträge: 2556
Erhaltene Danke: 45
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Di 16.11.10 21:07
Hallo zusammen!
Ich habe eine Möglichkeit entdeckt, das Caret in einem Memo oder RichEdit zu verbergen:
www.delphipraxis.net...-feld-entfernen.html
Wie kann man trotzdem noch Text markieren? Ich meine so wie in .chm-Hilfedateien!
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
Lannes
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: Sa 20.11.10 01:36
_________________ MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
|
|
galagher 
      
Beiträge: 2556
Erhaltene Danke: 45
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Sa 20.11.10 18:13
Vielen Dank, aber das Problem ist, dass bei RichEdit's überhaupt kein Text selektiert werden kann (es wird tatsächlich gar nicht selektiert!), ausser durch Doppelklick -> ganzer Block und durch Klicken am linken Rand -> ganze Zeile. Das - unsichtbare - Caret wird zwar positioniert, aber es wird nichts selektiert.
Der Code im Link funktioniert hier leider nicht!
Bei Memos kann ganz normal selektiert werden!
//Edit:
Ich müsste den Text irgendwie manuell selektieren, mit MouseDown als SelStart, dann MouseMove, und MouseUp als SelLenght. Ja, so etwas eben in eine Formel giessen... 
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
Zuletzt bearbeitet von galagher am Sa 20.11.10 18:27, insgesamt 1-mal bearbeitet
|
|
toms
      
Beiträge: 1099
Erhaltene Danke: 2
|
Verfasst: Sa 20.11.10 18:27
Hallo,
Hier findest du eine andere Methode, das Caret zu verstecken. Das Markieren von Text funktioniert jedoch trotzdem.
delphi.about.com/cs/...03/a/bltip0703_5.htm
Edit: Zusätzlich noch CreateCaret(Memo1.handle, 0, 0, 0); im OnMouseDown setzen
|
|
galagher 
      
Beiträge: 2556
Erhaltene Danke: 45
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Sa 20.11.10 18:46
toms hat folgendes geschrieben : | Hier findest du eine andere Methode, das Caret zu verstecken. Das Markieren von Text funktioniert jedoch trotzdem.
delphi.about.com/cs/...03/a/bltip0703_5.htm
Edit: Zusätzlich noch CreateCaret(Memo1.handle, 0, 0, 0); im OnMouseDown setzen |
Danke, klappt aber nicht wirklich! Das Caret bleibt sichtbar.
Ok, das Problem rührt wahrscheinlich daher, dass das Caret, wenn man die Maus bewegt, immer an die aktuelle Position gesetzt wird. Das ermöglicht es, das Wort, über dem die Maus liegt, zu erkennen. Das sichtbare Caret stört dabei nur. Siehe hier: www.delphi-forum.de/...ght=caret+++richedit
Im Momemt rufe uch ständig HideCaret auf. Das funktioniert zwar, ist aber nicht besonders schöner Code. Wenn ich nichts anderes finde, belasse ich es eben so.
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
toms
      
Beiträge: 1099
Erhaltene Danke: 2
|
Verfasst: Sa 20.11.10 18:50
|
|
galagher 
      
Beiträge: 2556
Erhaltene Danke: 45
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Sa 20.11.10 18:53
Da kommt nur die Meldung "Ungültige Angabe: Thema
Wenn du einem normalen, gültigen Link im Forum gefolgt bist, wende dich bitte an den Webmaster."
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
toms
      
Beiträge: 1099
Erhaltene Danke: 2
|
Verfasst: Sa 20.11.10 18:58
|
|
galagher 
      
Beiträge: 2556
Erhaltene Danke: 45
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Sa 20.11.10 19:14
toms hat folgendes geschrieben : | Probier's nochmals... |
Ok, danke, klappt jetzt. Nur, ich benutze kein normales TRichEdit, sondern ein TRxRichEdit, das kann auch Grafiken darstellen. Ich werde mir den Code jedenfalls vornehmen, vielleicht lässt sich was machen! Danke!
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
toms
      
Beiträge: 1099
Erhaltene Danke: 2
|
Verfasst: Sa 20.11.10 19:17
|
|
galagher 
      
Beiträge: 2556
Erhaltene Danke: 45
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Sa 20.11.10 19:41
toms hat folgendes geschrieben : | Sollte keine Rolle spielen. Einfach TRichEdit durch TRxRichEdit ersetzen. |
Stimmt, es läuft. Allerdings bewirkt die Einstellung ShowCaret := False nichts, egal, ob im OI oder im Code. Das Caret bleibt sichtbar.
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
galagher 
      
Beiträge: 2556
Erhaltene Danke: 45
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Sa 20.11.10 23:01
Hallo!
Ich habe daraus eine Komponente TRichEditPlus gemacht, erweitert um die Methode MouseUp, da beim Klicken mit der rechten Maustaste trotz ShowCaret := False das Caret kurz aufblinkte.
@ toms:
Dazu habe ich zwei Fragen:
1. Warum hast du uses Windows; im Abschnitt implementation stehen und nicht im interface?
2. Macht es einen Unterschied, ob man in der Prozedur HideTheCaret die Anweisungen CreateCaret, HideCaret oder DestroyCaret verwendet? Wenn ja, welchen?
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92:
|
unit RichEditPlus;
interface
uses SysUtils, Classes, Controls, StdCtrls, ComCtrls, Messages, RxRichEd;
type TRichEditPlus = class(TRichEdit) procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; private FShowCaret: Boolean; procedure SetShowCaret(const Value: boolean); procedure WMPaint(var Message: TWMPaint); message WM_PAINT; procedure WMLButtonDown(var Message: TWMLButtonDown); message WM_LButtonDown; procedure WMKeyDown(var Message: TWMKeyDown); message WM_KeyDown; procedure HideTheCaret; protected public constructor Create(AOwner: TComponent); override; published property ShowCaret: Boolean read FShowCaret write SetShowCaret; end;
procedure Register;
implementation
uses Windows;
procedure Register; begin RegisterComponents('Samples', [TRichEditPlus]); end;
procedure TRichEditPlus.HideTheCaret; begin if not FShowCaret then CreateCaret(Handle, 0, 0, 0); end;
constructor TRichEditPlus.Create(AOwner: TComponent); begin inherited; FShowCaret := False; end;
procedure TRichEditPlus.MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin inherited; if Assigned(Parent) then HideTheCaret; end;
procedure TRichEditPlus.SetShowCaret(const Value: boolean); begin FShowCaret := Value; end;
procedure TRichEditPlus.WMKeyDown(var Message: TWMKeyDown); begin inherited; if Assigned(Parent) then HideTheCaret; end;
procedure TRichEditPlus.WMLButtonDown(var Message: TWMLButtonDown); begin inherited; if Assigned(Parent) then HideTheCaret; end;
procedure TRichEditPlus.WMPaint(var Message: TWMPaint); begin inherited; if Assigned(Parent) then HideTheCaret; end;
end. |
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
|