| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
bosoft Master

Registrado: 23 Oct 2005Mensajes: 342
|
Publicado: Mar 16 Mar, 2021 5:24 pm Asunto: cambiar fuente de TEdit en modo ReadOnly |
|
|
uyyy. no había pensado en eso.
El Edit al que quiero aplicarle la fuente es de un Tedit derivado para solo aceptar números, con o sin decimales. Creo que lo tendré fácil
Gracias por la idea y saludos |
|
| Volver arriba |
|
 |
escafandra Master

Registrado: 29 Nov 2007Mensajes: 625Ubicación: Madrid - España
|
Publicado: Mar 16 Mar, 2021 9:14 pm Asunto: |
|
|
Entonces lo más fácil es reescribir la función virtual WndProc.
| Código: |
void __fastcall TNuevoEdit::WndProc(Messages::TMessage &Message)
{
if (Message.Msg == WM_PAINT) {
// El código
}
// LLamada a la clase madre.....
TEdit::WndProc(Message);
}
|
Saludos. |
|
| Volver arriba |
|
 |
bosoft Master

Registrado: 23 Oct 2005Mensajes: 342
|
Publicado: Mar 16 Mar, 2021 10:31 pm Asunto: |
|
|
Me has dejado planchao
Yo tengo el Edit en un .pas, con las funciones correspondientes, que compilo y añado a mi builder 2007. Pero no tengo idea de donde colocar lo que me has dicho. ¿O es para cuando es un cpp?
Gracias por tu ayuda y por tu tiempo
Saludos |
|
| Volver arriba |
|
 |
escafandra Master

Registrado: 29 Nov 2007Mensajes: 625Ubicación: Madrid - España
|
Publicado: Mie 17 Mar, 2021 7:17 am Asunto: |
|
|
Ese método está igual en delphi. De hecho el fuente es delphi. El código que pongo es pensando que tu nuevo edit estaba escrito en CPP.
| Código: |
TNewEdit = class(TEdit)
private
{ Private declarations }
protected
procedure WndProc(var Message: TMessage); override;
public
{ Public declarations }
end;
|
| Código: |
procedure TNewEdit.WndProc(var Message: TMessage);
begin
If Message.Msg =WM_PAINT
begin
// código
end;
inherited WndProc(Message);
end;
|
Saludos. |
|
| Volver arriba |
|
 |
bosoft Master

Registrado: 23 Oct 2005Mensajes: 342
|
Publicado: Mie 17 Mar, 2021 8:48 am Asunto: |
|
|
Voy a empezar por esto último.
Muchas gracias por tu incansable e incalculable ayuda
Saludos |
|
| Volver arriba |
|
 |
escafandra Master

Registrado: 29 Nov 2007Mensajes: 625Ubicación: Madrid - España
|
Publicado: Mie 17 Mar, 2021 1:55 pm Asunto: |
|
|
Un ejemplo Básico del TNewEdit:
| Código: |
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.
|
Un ejemplo de funcionamiento en una aplicación delphi
| Código: |
procedure TForm1.FormCreate(Sender: TObject);
begin
NewEdit1.SetDisableColor(clRed);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
NewEdit1.Enabled:= true;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
NewEdit1.Enabled:= false;
end;
|
Y en una Aplicación Cpp
| Código: |
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
NewEdit1->SetDisableColor(clRed);
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
NewEdit1->Enabled = true;
}
void __fastcall TForm1::Button2Click(TObject *Sender)
{
NewEdit1->Enabled = false;
}
|
Saludos. |
|
| Volver arriba |
|
 |
bosoft Master

Registrado: 23 Oct 2005Mensajes: 342
|
Publicado: Mie 17 Mar, 2021 10:46 pm Asunto: |
|
|
ufff, es que no me has dado tiempo ni empezar a estudiarlo y ya me pones la solución
Como ya dije, el edit que uso es derivado y lo máximo que he mirado es que la función WndProc ya estaba. He añadido una variable para asignarle el color en tiempo de diseño y ahí me he parado por falta de tiempo.
Implementaré/copiaré/añadiré tu función a la anterior y así mejorar el Edit.
Pero antes tendré que refrescar mi programación, que lleva casi 2 años en modo tortuga.
Repito: MUCHAS GRACIAS y saludos |
|
| Volver arriba |
|
 |
|