Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #7  
Antiguo 30-12-2022
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
El truco al que te refieres utiliza el evento OnDrawColumnCell de un StringGrid. Tu te estas refiriendo a un TEdit que no tiene ese evento. En ese caso debes hacer un subclasing y capturar el mensaje WM_PAINT o escribir un componente derivado que pinte el texto a tu gusto. Ten en cuenta que lo que hay que hacer es pintar y eso hay que hacerlo cuando toca, es decir, cuando Windows va a pintar.


En cierta ocasión contesté una pregunta sobre cómo cambiar el texto cuando un EDIT está deshabilitado y puse un ejemplo de un nuevo componente derivado de TEdit aquí: cambiar fuente de TEdit en modo ReadOnly


Transcribo el código por si te sirve para tomar ideas de lo que tú luego realmente pretendas hacer:


Código Delphi [-]
unit NewEdit; 

interface 

uses 
  Windows, Messages, SysUtils, Classes, Controls, StdCtrls; 

type 
  TNewEdit = class(TEdit) 
  private 
    DColor: COLORREF; 
  protected 
    procedure WndProc(var Message: TMessage); override; 
  public 
    procedure SetDisableColor(Color: COLORREF); 
  published 
    { Published declarations } 
  end; 

procedure Register; 
                                             
implementation 

procedure TNewEdit.WndProc(var Message: TMessage); 
var 
  ps: PAINTSTRUCT; 
  DC: HDC; 
begin 
  if (Message.Msg = WM_PAINT) and (not IsWindowEnabled(Handle)) then 
  begin 
    DC:= BeginPaint(Handle, ps); 
    SetTextColor(DC, DColor); 
    SelectObject(DC, SendMessage(Handle, WM_GETFONT, 0, 0)); 
    TextOutA(DC, 1,1, PChar(Text), Length(Text)+1); 
    EndPaint(Handle, ps); 
  end; 
  inherited WndProc(Message); 
end; 

procedure TNewEdit.SetDisableColor(Color: COLORREF); 
begin 
  DColor:= Color; 
  Invalidate; 
end; 

procedure Register; 
begin 
  RegisterComponents('Samples', [TNewEdit]); 
end; 

end.


La parte donde pinta el texto es esta:
Código Delphi [-]
  if (Message.Msg = WM_PAINT) and (not IsWindowEnabled(Handle)) then 
  begin 
    DC:= BeginPaint(Handle, ps); 
    SetTextColor(DC, DColor); 
    SelectObject(DC, SendMessage(Handle, WM_GETFONT, 0, 0)); 
    TextOutA(DC, 1,1, PChar(Text), Length(Text)+1); 
    EndPaint(Handle, ps); 
  end;

Como verás, este código no usa la VCL sino que está escrito con API de Windows. La condición para activar el pintado es indiferente, pones la que te haga falta y puedes complicar esa parte hasta donde llegue tu imaginación.

La técnica del Subclasing es buena idea si se va a hacer para casos aislados. En caso contrario es mejor escribir un componente.



Saludos.

Última edición por escafandra fecha: 30-12-2022 a las 02:40:37.
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Vcl/FMX: Resaltar texto parcialmente AgustinOrtu Trucos 5 29-12-2022 09:56:54
Resaltar En Negrita Una Texto De Una Linea De Un Tmemo ingmichel Internet 1 28-11-2009 12:34:53
resaltar filas en dbgrid dtomeysoto Varios 2 25-03-2009 17:13:05
Como poner en un hint texto parcialmente en negrita JF Sebastian Varios 2 17-01-2007 16:14:07
Locate no buscar parcialmente, por que? URBANO Conexión con bases de datos 13 14-10-2005 20:14:22


La franja horaria es GMT +2. Ahora son las 06:36:48.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi