Ik heb een TEdit met aan de rechterkant een SpeedButton (zit dus in de TEdit).
Het is natuurlijk de bedoeling dat het invoer gedeelte van de TEdit beperkt wordt tot aan de linker kant van de SpeedButton. Dit werkte altijd goed, totdat ik van de TEdit geen multiline control maakte.
En het instellen van het bereik:
Doordat ik ES_MULTILINE heb weg gehaald in de Params.Style wordt de tekst nu weergegeven tot aan de rechterkant van de SpeedButton (en dus niet meer tot de linkerkant, wat zou moeten).
ES_MULTILINE is toch niet verplicht? (en of ES_MULTILINE staat ingesteld, wordt voor de rest ook nergens gecontroleerd in de code van dit component)
Is hier een oplossing voor?
Het is natuurlijk de bedoeling dat het invoer gedeelte van de TEdit beperkt wordt tot aan de linker kant van de SpeedButton. Dit werkte altijd goed, totdat ik van de TEdit geen multiline control maakte.
code:
1
2
3
4
5
6
| procedure TAlignEdit.CreateParams(var Params: TCreateParams); const Alignments: array[TAlignment] of Longint = (ES_LEFT, ES_RIGHT, ES_CENTER); begin inherited CreateParams(Params); Params.Style := Params.Style or Alignments[FAlignment] or WS_CLIPCHILDREN; end; |
En het instellen van het bereik:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
| procedure TAlignEdit.SetEditRect;
var Loc: TRect;
begin
if Parent = nil then
Exit;
SendMessage(Handle, EM_GETRECT, 0, LongInt(@Loc));
Loc.Bottom := ClientHeight + 1;
Loc.Right := ClientWidth - FButtonWidth - 2;
Loc.Top := 0;
Loc.Left := 0;
SendMessage(Handle, EM_SETRECTNP, 0, LongInt(@Loc));
SendMessage(Handle, EM_GETRECT, 0, LongInt(@Loc));
end; |
Doordat ik ES_MULTILINE heb weg gehaald in de Params.Style wordt de tekst nu weergegeven tot aan de rechterkant van de SpeedButton (en dus niet meer tot de linkerkant, wat zou moeten).
ES_MULTILINE is toch niet verplicht? (en of ES_MULTILINE staat ingesteld, wordt voor de rest ook nergens gecontroleerd in de code van dit component)
Is hier een oplossing voor?