Como mudar a cor da seleção nativa de um TEdit? – Show Delphi

DICAS

Visite a biblioteca de dicas da comunidade.

Saiba mais

ARTIGOS

Abordagens detalhadas sobre assuntos diversos.

Saiba mais

INICIANTES

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

Saiba mais

DOWNLOADS

Acesse os materiais exclusivos aos membros.

Saiba mais
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

Facebook Comments

Posts Relacionados

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

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Ir ao topo

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