AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi RichEdit: Overridene SetSelStart-Methode wird nie aufgerufen
Thema durchsuchen
Ansicht
Themen-Optionen

RichEdit: Overridene SetSelStart-Methode wird nie aufgerufen

Ein Thema von TStringlist · begonnen am 6. Sep 2004 · letzter Beitrag vom 9. Sep 2004
Antwort Antwort
Seite 1 von 2  1 2      
TStringlist

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

RichEdit: Overridene SetSelStart-Methode wird nie aufgerufen

  Alt 6. Sep 2004, 13:48
Hallo!

In einer eigenen TMyRichEdit-Klasse habe ich die beiden von TCustomRichEdit abstammenden Methoden "SetSelStart(..)" und "SetSelLength(..)" überschrieben. Jetzt wundere ich mich allerdings einigermaßen, warum die Programm-Abarbeitung in diesen Routinen scheinbar nie vorbeikommt (bzw. dort anhält, nachdem ich z.B. dort jeweils einen Breakpunkt reingesetzt habe). Hat eventuell jemand eine Idee, woran das liegen könnte?


Delphi-Quellcode:
  TMyRichEdit = class(TRichEdit)
  private
    fLButtonDown : boolean;
    ...
  protected
    ...
    procedure SetSelLength(Value: Integer); override;
    procedure SetSelStart(Value: Integer); override;
  public
    ...
  end;

...

Procedure TMyRichEdit.SetSelStart(Value: Integer);
begin
  // Weil: Wenn fLButtonDown=TRUE mache ich diese Arbeit anderswo selbst!
  if not fLButtonDown then inherited;
end;

Procedure TMyRichEdit.SetSelLength(Value: Integer);
begin
  // Weil: Wenn fLButtonDown=TRUE mache ich diese Arbeit anderswo selbst!
  if not fLButtonDown then inherited;
end;
Thx schonmal im Voraus
MfG (& Thx ggf.)
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.017 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#2

Re: Überschriebene SetSelStart-Methode wird nie aufgerufen?

  Alt 6. Sep 2004, 13:54
Du musst auch noch die Property überschreiben, denn im TRichEdit (wo die überschriebenen Methoden ja vorkommen) ist ja nicht bekannt, dass sie überschrieben wurde, also:
Delphi-Quellcode:
TMyRichEdit = class(TRichEdit)
private
  fLButtonDown : boolean;
  ...
protected
  ...
  procedure SetSelLength(Value: Integer); override;
  procedure SetSelStart(Value: Integer); override;
public
  property SelLength: Integer read GetSelLength write SetSelLength;
end;
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
TStringlist

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

Re: RichEdit: Overridene SetSelStart-Methode wird nie aufger

  Alt 6. Sep 2004, 14:39
Thx, aber eben sehe ich erst, dass ich das Problem noch nicht vollständig beschrieben hatte. Denn: Wenn ich SelStart bzw. SelLength direkt per Code lade, dann wurden/werden diese Routinen schon aufgerufen. Nicht aufgerufen werden sie aber leider dann, wenn diese beiden Größen z.B. aufgrund einer Maus-Aktion einen Wert zugewiesen bekommen müssten, weil mittels der Maus eben der Caret neu gesetzt bzw. ein Block markiert wurde. ...und nur auf das Manipulieren einer solchen Maus-verursachten Situation kommt es mir eigentlich an.


Ergo folgere ich schon mal: Wenn diese Property-Routinen also normal funktionieren (wie festgestellt), in der mir wichtigen Situation aber nicht angesprochen werden, dann scheint diese Arbeit wohl in noch anderen Methoden abgewickelt zu werden,

...und wo diese Werte dann wahrscheinlich gleich in den jeweilig diesbezüglichen Feld-Variablen (etwa fSelStart/fSelLength) abgelegt werden,

...und womit man das dann wahrscheinlich selbst wieder nicht überschreiben könnte,

oder?
MfG (& Thx ggf.)
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.017 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#4

Re: RichEdit: Overridene SetSelStart-Methode wird nie aufger

  Alt 6. Sep 2004, 14:51
Jepp, da hast du recht! Bleibt dir nur die Möglichkeit, TRichEdit komplett zu kopieren und dort deine Änderungen vorzunehmen.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
TStringlist

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

Re: RichEdit: Overridene SetSelStart-Methode wird nie aufger

  Alt 6. Sep 2004, 17:20
hmmm, es würde mir ja schon genügen, wenn man einfach nur diese Eigenschaft des RichEdits, nämlich einen Block mit der Maus zu markieren, irgendwie unterdrücken, ausschalten, blockieren... könnte. Das kann doch nicht unmöglich sein? (Oder ist das Ganze etwa systemgesteuert und das RichEdit greift dann das SelStart/SelLength-Ergebnis einfach nur noch mehr mit irgendwelchen EM_EXGETSEL-Funktionen ab, z.B. in der MouseMove-Proc o.ä...)?

...aber was meinst du eigentlich mit "TRichEdit komplett kopieren"? Meine TMyRichEdit-Klasse baut doch direkt auf der normalen TRichEdit-Klasse auf, beinhaltet diese also komplett.. (?)
MfG (& Thx ggf.)
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.017 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#6

Re: RichEdit: Overridene SetSelStart-Methode wird nie aufger

  Alt 6. Sep 2004, 17:27
Genau das ist das Problem: du musst etwas in den Funktionen ändern, die in TRichEdit gekapselt sind und nicht vererbt werden können, weil sie teilweise private sind. Deshalb musst du das TRichEdit neu bauen (kopieren) und dann an den entscheidenden Stellen deine Veränderungen vornehmen. Du baust also nicht auf TRichEdit auf, sondern baust eine neue Komponente (evtl. musst du sogar TCustomRichEdit auch neu bauen), die das gleiche - bis auf ein paar Modifikationen - wie TRichEdit.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
TStringlist

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

Re: RichEdit: Overridene SetSelStart-Methode wird nie aufger

  Alt 6. Sep 2004, 18:23
...ggf. alles auch ab TCustomEdit (oder sogar noch eins früher) nachbauen sieht allerdings seeeeehr seeeeeeeeeehr arbeitsintensiv aus *g*. Oder man bräuchte 'ne Enterprise-Version, und könnte darin mal kurz nachgucken, wie die das z.B. auch bzgl. meiner Fragen da erledigt haben...

However, Thx jedenfalls, aber eventuell hat ja noch jemand eine Idee, wie man dieses mausmäßige Blockgenerieren unterdrücken kann.
MfG (& Thx ggf.)
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.017 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#8

Re: RichEdit: Overridene SetSelStart-Methode wird nie aufger

  Alt 7. Sep 2004, 08:47
Wenn's darum geht, dann müsstest du in deiner Klasse die nötigen Windows-Botschaften selber behandeln.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
TStringlist

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

Re: RichEdit: Overridene SetSelStart-Methode wird nie aufger

  Alt 7. Sep 2004, 15:43
Ja, das hatte ich auch vorher die ganze Zeit schon über versucht, ...scheint hier aber irgendwie nicht so richtig möglich zu sein. So wie ich jetzt erst festgestellt habe, scheint das RichEdit diese Blockerzeugung auch gar nicht (in eigenen Routinen) selbst abzuwickeln, sondern ein solches (system-intern erzeugtes) Resultat wieder nur mit EM_EXGETSEL abzugreifen. Jedenfalls können die nach einer Mausbewegung jeweils neuen Blockgrenzen dann auch immer gleich schon zu Beginn des MouseMove-Eventhandlers so einfach ausgelesen werden, und zwar eben höchstwahrscheinlich vom System schon entsprechend aktualisiert. Denn selbst wenn ich während eines Mousemovings alle auftretenden EM_EXSETSEL- oder EM_SETSEL-Messages abfische, ändert sich daran nichts ...weil eine system-basierende Blockerzeugung und Anzeige dieser Markierung dadurch ja auch nicht unterdrückbar ist (...sondern nur eine event. eigene nämlich selbst durch EM_EXSETSEL verursachte Festlegung neuer Blockgrenzen). Bliebe folglich also nur noch mehr das eigentliche Anzeigen dieses systemdefinierten Blockes zu verhindern, etwa durch ein Abfangen von WM_Paint-Messages.

Dadurch aber, dass ich ja jeweils auch immer diese Blockgrenzen selbst neu errechne und dann mittels EM_EXSETSEL noch eingebe und das wiederum zeitlich sehr dicht an der entsprechend äquivalenten Aktion des Systems angesiedelt ist, wird die Sache auch nicht gerade einfacher. Es ist nämlich ziemlich schwierig die durchs System entsprechend verursachten WM_Paint-Messages abzufischen und die unmittelbar danach selbst verursachten durchzulassen ...einschließlich einem dazu noch nötigen korrekten Management der dabei auch noch zahlreich mit dazu auftretenden WM_ERASEBKGND-Messages.


(...Und als ich nun gestern schon so in diesem ganzen Schlamassel herumwadete, da suchte ich natürlich nach einfacheren Lösungen und machte also zuerstmal diesen Thread hier auf... *ggg*)
MfG (& Thx ggf.)
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.017 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#10

Re: RichEdit: Overridene SetSelStart-Methode wird nie aufger

  Alt 7. Sep 2004, 15:50
Zitat von TStringlist:
(...Und als ich nun gestern schon so in diesem ganzen Schlamassel herumwadete, da suchte ich natürlich nach einfacheren Lösungen und machte also zuerstmal diesen Thread hier auf... *ggg*)
Und was wird dir hier als Lösung angeboten? Zurück in den Schlamassel!!!

Was versuchst du denn überhaupt? Willst du die Mausmarkierung manipulieren? Wozu soll das denn gut sein?
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 17:52 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