Como mudar a cor da seleção nativa de um TEdit?
Está dica mostra como podemos alterar a cor que um texto fica ao
ser selecionado em um TEdit, por exemplo.
Neste exemplo, NÃO fará uso de NENHUM tipo de skin.
O título original da dica em Inglês é:
How can i change the SELECTION COLOR of a native TEdit object?
Vamos ao código!
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
| unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
btnChangeColor: TButton;
Edit1: TEdit;
btnRestore: TButton;
procedure btnChangeColorClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure btnRestoreClick(Sender: TObject);
private
SelSysCol : LongInt;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ Alterando a cor }
procedure TForm1.btnChangeColorClick(Sender: TObject);
var
ColorIndex: array [1..5] of integer;
ColorValue: array [1..5] of longint;
begin
// change the system color for text selection
ColorIndex[1] := COLOR_HIGHLIGHT;
ColorValue[1] := clYellow;
// set the color and broadcast to all applications
SetSysColors(1,ColorIndex,ColorValue);
PostMessage(HWND_BROADCAST,WM_SYSCOLORCHANGE,0,0);
// select the Edit
Edit1.SetFocus;
Edit1.SelStart := 0;
Edit1.SelLength := Length(Edit1.Text);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
// take the color before the change
SelSysCol := GetSysColor(COLOR_HIGHLIGHT);
end;
{ Restaurando o cor original. }
procedure TForm1.btnRestoreClick(Sender: TObject);
var
ColorIndex: array [1..5] of integer;
ColorValue: array [1..5] of longint;
begin
// change the system color for text selection
ColorIndex[1] := COLOR_HIGHLIGHT;
ColorValue[1] := 6956042;
// set the color and broadcast to all applications
SetSysColors(1,ColorIndex,ColorValue);
PostMessage(HWND_BROADCAST,WM_SYSCOLORCHANGE,0,0);
end;
end. |
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
btnChangeColor: TButton;
Edit1: TEdit;
btnRestore: TButton;
procedure btnChangeColorClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure btnRestoreClick(Sender: TObject);
private
SelSysCol : LongInt;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ Alterando a cor }
procedure TForm1.btnChangeColorClick(Sender: TObject);
var
ColorIndex: array [1..5] of integer;
ColorValue: array [1..5] of longint;
begin
// change the system color for text selection
ColorIndex[1] := COLOR_HIGHLIGHT;
ColorValue[1] := clYellow;
// set the color and broadcast to all applications
SetSysColors(1,ColorIndex,ColorValue);
PostMessage(HWND_BROADCAST,WM_SYSCOLORCHANGE,0,0);
// select the Edit
Edit1.SetFocus;
Edit1.SelStart := 0;
Edit1.SelLength := Length(Edit1.Text);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
// take the color before the change
SelSysCol := GetSysColor(COLOR_HIGHLIGHT);
end;
{ Restaurando o cor original. }
procedure TForm1.btnRestoreClick(Sender: TObject);
var
ColorIndex: array [1..5] of integer;
ColorValue: array [1..5] of longint;
begin
// change the system color for text selection
ColorIndex[1] := COLOR_HIGHLIGHT;
ColorValue[1] := 6956042;
// set the color and broadcast to all applications
SetSysColors(1,ColorIndex,ColorValue);
PostMessage(HWND_BROADCAST,WM_SYSCOLORCHANGE,0,0);
end;
end.
Segundo o autor original, o código funciona inclusive no Delphi 7.
Fonte: https://www.experts-exchange.com/questions/21011571/How-can-i-change-the-SELECTION-COLOR-of-a-native-TEdit-object.html
Como adicional, podemos ver outras opções possíveis:
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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
| unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
var
ColorIndex: array [1..5] of integer;
ColorValue: array [1..5] of longint;
begin
ColorIndex[1] := COLOR_MENUTEXT;
ColorIndex[2] := COLOR_SCROLLBAR;
ColorIndex[3] := COLOR_INFOTEXT;
ColorIndex[4] := COLOR_HIGHLIGHT;
ColorIndex[5] := COLOR_BACKGROUND;
ColorValue[1]:=clYellow;
ColorValue[2]:=clred;
ColorValue[3]:=clYellow;
ColorValue[4]:=clblue;
ColorValue[5]:=clRed;
SetSysColors(5,ColorIndex,ColorValue);
PostMessage(HWND_BROADCAST,WM_SYSCOLORCHANGE,0,0);
end;
procedure TForm1.Button2Click(Sender: TObject);
var
ColorIndex: array [1..5] of integer;
ColorValue: array [1..5] of longint;
begin
ColorIndex[1] := COLOR_MENUTEXT;
ColorIndex[2] := COLOR_SCROLLBAR;
ColorIndex[3] := COLOR_INFOTEXT;
ColorIndex[4] := COLOR_HIGHLIGHT;
ColorIndex[5] := COLOR_BACKGROUND;
ColorValue[1]:=clBlack;
ColorValue[2]:=clWHITE;
ColorValue[3]:=clblack;
ColorValue[4]:=clnavy;
ColorValue[5]:=clblack;
SetSysColors(5,ColorIndex,ColorValue);
PostMessage(HWND_BROADCAST,WM_SYSCOLORCHANGE,0,0);
end;
end.
{
MORE TO PLAY WITH BUT BE CAREFUL SOME OF THE NAMES ARE DECIEVING.
AND I TAKE NO RESPONSIBILITY TO YOU MESSING UP YOUR COLORS.
{
CTLCOLOR_MSGBOX
CTLCOLOR_EDIT
CTLCOLOR_LISTBOX
CTLCOLOR_BTN
CTLCOLOR_DLG
CTLCOLOR_SCROLLBAR { BACKGROUND IN DELPHI EDITOR ETC not scrollbars}
CTLCOLOR_STATIC
CTLCOLOR_MAX
COLOR_SCROLLBAR
COLOR_BACKGROUND
COLOR_ACTIVECAPTION
COLOR_INACTIVECAPTION
COLOR_MENU
COLOR_WINDOW
COLOR_WINDOWFRAME
COLOR_MENUTEXT
COLOR_WINDOWTEXT
COLOR_CAPTIONTEXT
COLOR_ACTIVEBORDER
COLOR_INACTIVEBORDER
COLOR_APPWORKSPACE
COLOR_HIGHLIGHT
COLOR_HIGHLIGHTTEXT
COLOR_BTNFACE
COLOR_BTNSHADOW
COLOR_GRAYTEXT
COLOR_BTNTEXT
COLOR_INACTIVECAPTIONTEXT
COLOR_BTNHIGHLIGHT
} |
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
var
ColorIndex: array [1..5] of integer;
ColorValue: array [1..5] of longint;
begin
ColorIndex[1] := COLOR_MENUTEXT;
ColorIndex[2] := COLOR_SCROLLBAR;
ColorIndex[3] := COLOR_INFOTEXT;
ColorIndex[4] := COLOR_HIGHLIGHT;
ColorIndex[5] := COLOR_BACKGROUND;
ColorValue[1]:=clYellow;
ColorValue[2]:=clred;
ColorValue[3]:=clYellow;
ColorValue[4]:=clblue;
ColorValue[5]:=clRed;
SetSysColors(5,ColorIndex,ColorValue);
PostMessage(HWND_BROADCAST,WM_SYSCOLORCHANGE,0,0);
end;
procedure TForm1.Button2Click(Sender: TObject);
var
ColorIndex: array [1..5] of integer;
ColorValue: array [1..5] of longint;
begin
ColorIndex[1] := COLOR_MENUTEXT;
ColorIndex[2] := COLOR_SCROLLBAR;
ColorIndex[3] := COLOR_INFOTEXT;
ColorIndex[4] := COLOR_HIGHLIGHT;
ColorIndex[5] := COLOR_BACKGROUND;
ColorValue[1]:=clBlack;
ColorValue[2]:=clWHITE;
ColorValue[3]:=clblack;
ColorValue[4]:=clnavy;
ColorValue[5]:=clblack;
SetSysColors(5,ColorIndex,ColorValue);
PostMessage(HWND_BROADCAST,WM_SYSCOLORCHANGE,0,0);
end;
end.
{
MORE TO PLAY WITH BUT BE CAREFUL SOME OF THE NAMES ARE DECIEVING.
AND I TAKE NO RESPONSIBILITY TO YOU MESSING UP YOUR COLORS.
{
CTLCOLOR_MSGBOX
CTLCOLOR_EDIT
CTLCOLOR_LISTBOX
CTLCOLOR_BTN
CTLCOLOR_DLG
CTLCOLOR_SCROLLBAR { BACKGROUND IN DELPHI EDITOR ETC not scrollbars}
CTLCOLOR_STATIC
CTLCOLOR_MAX
COLOR_SCROLLBAR
COLOR_BACKGROUND
COLOR_ACTIVECAPTION
COLOR_INACTIVECAPTION
COLOR_MENU
COLOR_WINDOW
COLOR_WINDOWFRAME
COLOR_MENUTEXT
COLOR_WINDOWTEXT
COLOR_CAPTIONTEXT
COLOR_ACTIVEBORDER
COLOR_INACTIVEBORDER
COLOR_APPWORKSPACE
COLOR_HIGHLIGHT
COLOR_HIGHLIGHTTEXT
COLOR_BTNFACE
COLOR_BTNSHADOW
COLOR_GRAYTEXT
COLOR_BTNTEXT
COLOR_INACTIVECAPTIONTEXT
COLOR_BTNHIGHLIGHT
}
Fonte: https://www.experts-exchange.com/questions/10205638/Change-the-RichEdit-selection-color.html
-
Giovani Da Cruz
-
4.621 views
- 0 comentários
- 2 de julho de 2018
Está gostando do conteúdo? Considere pagar um cafezinho para nossa equipe!
Posts Relacionados - Continue Aprendendo