



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