AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Click(-Event) auf linken RichEdit-Rand?

Ein Thema von TStringlist · begonnen am 10. Apr 2004 · letzter Beitrag vom 11. Apr 2004
Antwort Antwort
TStringlist

Registriert seit: 1. Dez 2003
360 Beiträge
 
Turbo Delphi für Win32
 
#1

Click(-Event) auf linken RichEdit-Rand?

  Alt 10. Apr 2004, 20:25
Hallo zusammen,

hoffe meine Frage ist nicht zu speziell. Also, nachdem ich meinem RichEdit-Control mit den folgenden Zeilen...

Delphi-Quellcode:
(var rcWork : TRect;)

  with Richedit1 do begin
    SendMessage(Handle,EM_GETRECT,0,LongInt(@PageRect));
    rcWork.Left := PageRect.Left + 5;
    rcWork.Right := PageRect.Right;
    rcWork.Top := PageRect.Top;
    rcWork.Bottom := PageRect.Bottom;
    PageRect := rcWork;
    SendMessage(Handle,EM_SETRECT,0,LongInt(@PageRect));
  end;
... einen kleinen zusätzlichen linken Rand verpasst habe, würde ich jetzt ganz gerne auch noch etwas die Reaktionen beim Daraufclicken auf eben diesen Rand abändern. Die normale Reaktion ist hier ja bei 1*Click: Markieren der Zeile (+ Aufspannmöglichkeit der Markierung über mehrere Zeilen); bei 2*Click: Markieren aller Zeilen.

Ich würde diese Ereignisse jetzt also gerne ändern und zwar bei 1*Click in: nur Positionieren des Cursors am Anfang der jeweiligen Zeile; bei 2*Click in: so wie bisher bei 1*Click; und bei 3*Click in: so wie bisher bei 2*Click.

Frage also: Gibt es für diesen Bereich vielleicht einen extra Eventhandler (+Pointer dazu) der dafür zuständig ist? (Mit OnMouseDown kann ich zwar feststellen, dass ich auf diesen Bereich geclickt habe, aber wie dann die Reaktionsweisen ändern?) Oder gibt es dafür sonst irgendwie eine Methode mit der man dieses einstellen kann?

Thx schonmal vorneweg.
MfG (& Thx ggf.)
  Mit Zitat antworten Zitat
TStringlist

Registriert seit: 1. Dez 2003
360 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Click(-Event) auf linken RichEdit-Rand?

  Alt 10. Apr 2004, 23:18
Ok, Frage hat sich erledigt. Ich hatte mir das Ganze davor nicht exakt genug angeguckt und wohl etwas zu spontan gefragt. Die normalen Reaktionsweisen sind nämlich etwas anders als ich sie im ersten post beschrieb. Beim ersten normalen Click und beim Doppel-Click sind die Effekte nämlich exakt identisch. Also habe ich beim Doppel- und Trippel-Click damit schon normal das Ergebnis, was ich eigentlich auch nur wollte. Nur beim ersten Click auf diesen Rand markiert er leider schon gleich die Zeile anstatt den Cursor nur auf den jeweiligen Zeilenanfang zu setzen. Wenn ich hier (also beim nur ersten Click) RichEdit1.SelLength dann auf 0 setze, so habe ich danach auch in dieser Situation das von mir gewünschte Ergebnis.

Trotzdem, Thx for Aufmerksamkeit.

[edit]hatte einen Buchstaben vergessen *g*[/edit]
MfG (& Thx ggf.)
  Mit Zitat antworten Zitat
TStringlist

Registriert seit: 1. Dez 2003
360 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Click(-Event) auf linken RichEdit-Rand?

  Alt 11. Apr 2004, 08:03
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;
MfG (& Thx ggf.)
  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 22:07 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