dicas show delphi

DICAS

Visite a biblioteca de dicas da comunidade.

Saiba mais
sombra
Artigos Show Delphi

ARTIGOS

Abordagens detalhadas sobre assuntos diversos.

Saiba mais
sombra
iniciantes show delphi

INICIANTES

Aprenda a programar de um modo simples e fácil.

Saiba mais
sombra
downloads show delphi

DOWNLOADS

Acesse os materiais exclusivos aos membros.

Saiba mais
sombra
voltar

PARA QUEM GOSTA DE DELPHI

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.

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 
}

Fonte: https://www.experts-exchange.com/questions/10205638/Change-the-RichEdit-selection-color.html

  • Giovani Da Cruz
  • 0 comentários
  • 2 de julho de 2018

Deixe um comentário

Ir ao topo

© 2024 Infus Soluções em Tecnologia - Todos os Direitos Reservados