delphivcleditcontrol

Delphi XE7: TEdit TextHint Color


i would like to change to gray color of the Texthint of my TEdits.

I allready found this https://stackoverflow.com/a/31550017/1862576 and tried to change to color via SendMessage like this

procedure TEdit.DoSetTextHint(const Value: string);
var
  Font: TFont;
begin
  if CheckWin32Version(5, 1) and StyleServices.Enabled and HandleAllocated then
  begin
    Font := TFont.Create;
    try
      Font.Assign(self.Font);
      Font.Color := clGreen;
      Font.Size := 20;

      SendTextMessage(Handle, EM_SETCUEBANNER, WPARAM(1), Value);
      SendMessage(Handle, WM_SETFONT, Integer(Font.Handle), Integer(True));
    finally
//      Font.Free;
    end;
  end;    
end;

It changes the size of the font but not the color. Thanks for your help.


Solution

  • The cue banner is a feature built in to the underlying Win32 EDIT control that TEdit wraps. It is not managed by the VCL at all. There is no Win32 API exposed to manage the coloring of the cue banner text. If you want custom coloring, you will have to stop using the native cue banner functionality and custom-draw the edit control manually by handling its WM_ERASEBKGND and/or WM_PAINT messages directly (see How do i custom draw of TEdit control text?). Otherwise, you will have to find a third-party Edit control that supports custom coloring. Or use TRichEdit instead of TEdit so you can set text colors as needed.