Also da ich mich des nächtens mal wieder etwas gelangweilt habe *g*, hier dann doch nochmal die wohl korrekte Lösung (jedenfalls funktioniert sie ohne die geringsten Probs oder Störungen):
Das Resultat funktioniert über eine eigene WndProc des RichEdit Controls und 'lenkt' einen normalen Click auf diesen besagten linken extra-Rand einfach auf die Character-Position des ersten Characters in dieser Zeile um. Ergebnis: Der Cursor wird nur am Zeilenanfang positioniert ohne irgendwelche Markierungen.
Da der Effekt von Click und Double-Click im ursprünglichen TRichEdit exakt identisch ist, lasse ich dann für das Markieren der gesamten Zeile den nächsten Click (= Doppel-Click) bzw. dessen WM_LBUTTONDBLCLK - Message einfach nur passieren ...nicht jedoch ohne zuerst noch eine Variable mit dem aktuellen TickCount geladen zu haben.
...denn der Trippel-Click kommt nämlich jetzt wieder als einfacher Click und benötigt zu seiner Identifizierung als Trippel-Click einen TickCount den ich davor während des Double-Clicks protokolliert habe. Ist die Zeitdifferenz zum aktuellen TickCount > GetDoubleClickTime dann wird's wieder nur ein normaler einfacher Click, wenn aber nicht bleibt die Message unverändert und wirkt im TRichEdit als Trippel-Click.
Hier nochmal die diesbezügliche eigene RichEdit - WndProc:
Delphi-Quellcode:
(const LeftBorderWidth = 10; // intern also von 0 bis 9)
(var LastMouseTick : Longword;)
...
FOldREWindowProc := RichEdit1.WindowProc;
RichEdit1.WindowProc := ownREWndProc;
lastMouseTick := 0;
...
procedure TForm2.ownREWndProc(var Message: TMessage);
begin
if Message.Msg = WM_LBUTTONDOWN then
if Message.LParamLo < LeftBorderWidth then begin
if GetTickCount - LastMouseTick > GetDoubleClickTime then
Message.LParamLo := LeftBorderWidth;
LastMouseTick := 0;
end;
if Message.Msg = WM_LBUTTONDBLCLK then
if Message.LParamLo < LeftBorderWidth then LastMouseTick := GetTickCount;
fOldREWindowProc(Message);
end;