Como melhorar a Função
Amigos,
Bom dia.
Possuo a seguinte função:
Utilizo esta função para mudar a cor do Edit quando ganha foco e retornar a cor original quando perde o foco.
Gostaria de saber como posso melhorá-la para não ter que colocar o nome do Edit quando chamo a função. Ficar de forma automarica, apenas informar o estilo.
Bom dia.
Possuo a seguinte função:
function MdCor(campo: TEdit ;cor: Tcolor; estilo: TFontStyles): string;
begin
campo.Font.Style := estilo;
campo.color := cor;
end;
Utilizo esta função para mudar a cor do Edit quando ganha foco e retornar a cor original quando perde o foco.
Gostaria de saber como posso melhorá-la para não ter que colocar o nome do Edit quando chamo a função. Ficar de forma automarica, apenas informar o estilo.
Framosip
Curtidas 0
Respostas
Alexandre.jose
17/03/2008
function MdCor(cor: Tcolor; estilo: TFontStyles): string; begin if Self.ActiveControl is TEdit then begin TEdit(Self.ActiveControl).Font.Style := estilo; TEdit(Self.ActiveControl).color := cor; end; end;
Onde Self é o seu formulário.
GOSTEI 0
Macario
17/03/2008
Olá colega, [b:3659e28f27]framosip [/b:3659e28f27]boa tarde.
veja este tópico: [url= http://forum.devmedia.com.br/viewtopic.php?t=72688&start=0&postdays=0&postorder=asc&highlight=focoalteradourl]
Função q muda a cor quando muda o foco (p/ toda a aplicacao)[/url]
Acho que será de grande utilidade há você.
Espero ter ajudado.
8)
veja este tópico: [url= http://forum.devmedia.com.br/viewtopic.php?t=72688&start=0&postdays=0&postorder=asc&highlight=focoalteradourl]
Função q muda a cor quando muda o foco (p/ toda a aplicacao)[/url]
Acho que será de grande utilidade há você.
Espero ter ajudado.
8)
GOSTEI 0
Framosip
17/03/2008
Alexandre.Jose
Como eu poderia utilizar desta forma , para formularios, gostaria de padronizar em todos os meus formularios, fonte, cor, etc..etc...
abraços!
Como eu poderia utilizar desta forma , para formularios, gostaria de padronizar em todos os meus formularios, fonte, cor, etc..etc...
abraços!
GOSTEI 0
Framosip
17/03/2008
Alexandre.Jose
Como eu poderia utilizar desta forma , para formularios, gostaria de padronizar em todos os meus formularios, fonte, cor, etc..etc...
abraços!
Na verdade o que eu preciso é criar uma função para padronizar os forms do componente transpearxp.
Queria criar uma função onde não fosse necessário informar sempre o nome do TtfXPForm. Por que nesta função definirei algumas propriedades que serão utilizados em todos, em todo o projeto!
abraços!
GOSTEI 0
Marco Salles
17/03/2008
Utilizo esta função para mudar a cor do Edit quando ganha foco e retornar a cor original quando perde o foco.
Gostaria de saber como posso melhorá-la para não ter que colocar o nome do Edit quando chamo a função. Ficar de forma automarica, apenas informar o estilo.
Ola framosip é so voce seguir os passos do Link http://forum.devmedia.com.br/viewtopic.php?t=72688&start=0&postdays=0&postorder=asc&highlight=focoalteradourl]
1)[b:a0e0d1630d][u:a0e0d1630d]Defina uma classe no Form Principal[/u:a0e0d1630d][/b:a0e0d1630d]
TMeuComponente = class(TControl)
public
property Color;
//Coloque aqui outra property que julgar necessário
//(Exemplo estilo: TFontStyles
end;
2)
//Defina as constantes
const
CorSemFoco = clWindow;
CorComFoco = clTeal;
// estiloComFoco =
// estilo sem foco = ***o que achar
3)
//Defina o Componente
var
Form1: TForm1;
Componente: TWinControl;
4)No Form Principal defina a procedure
procedure FocoAlterado(Sender: TObject);
5)Escreva o método...
Coloque Outras Propriedades que julgar necessário...
procedure TForm1.FocoAlterado(Sender: TObject); begin if Componente <> nil then try TMeuComponente(Componente).Color := CorSemFoco; except end; if Screen.ActiveForm.ActiveControl is TWinControl then try TMeuComponente(Screen.ActiveForm.ActiveControl).Color := CorComFoco; Componente := Screen.ActiveForm.ActiveControl; except end; end;
6)Finalmente Link o Manipulador do evento ao Objeto global [b:a0e0d1630d]Screen[/b:a0e0d1630d]
Isto a gente fz na Criação do form Principal
procedure TForm1.FormCreate(Sender: TObject);
begin
Screen.OnActiveControlChange := FocoAlterado;
end;
7) e finalmente desconect o Evento...
procedure TForm1.FormDestroy(Sender: TObject);
begin
Screen.OnActiveControlChange := nil;
end;
Espero ter sido Util
GOSTEI 0
Framosip
17/03/2008
Marco Salles,
Boa tarde.
Tenho Certeza que será bem útil.
Mas me desculpe pela pergunta primária. Tive dificuldade logo no item 1 ´Defina uma classe no Form Principal´, poderia me ajudar mais claramente?
Obrigado.
Boa tarde.
Tenho Certeza que será bem útil.
Mas me desculpe pela pergunta primária. Tive dificuldade logo no item 1 ´Defina uma classe no Form Principal´, poderia me ajudar mais claramente?
Obrigado.
GOSTEI 0
Marco Salles
17/03/2008
Olha a unit inteira passada pelo amigo emerson.en no tópico em questão
Código:
´aqui vai uma versão mais legal. ela mantém a cor anterior do componente (notei um pequeno problema quando há radiobutton ou checkbox no form). agora é usada a variável CorAnterior no lugar da constante CorSemFoco.´
Código:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, ComCtrls, CheckLst, Mask, Grids;
type
TMeuComponente = class(TControl)
public
property Color;
end;
TForm1 = class(TForm)
Edit1: TEdit;
Memo1: TMemo;
CheckBox1: TCheckBox;
ComboBox1: TComboBox;
RadioButton1: TRadioButton;
MaskEdit1: TMaskEdit;
RichEdit1: TRichEdit;
Button1: TButton;
procedure FocoAlterado(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
Componente: TWinControl;
CorAnterior: TColor;
public
{ Public declarations }
end;
const
CorSemFoco = clWindow;
CorComFoco = clBlue;
var
Form1: TForm1;
implementation
uses unit2;
{$R *.dfm}
procedure TForm1.FocoAlterado(Sender: TObject);
begin
if Componente <> nil then
try
// TMeuComponente(Componente).Color := CorSemFoco;
TMeuComponente(Componente).Color := CorAnterior;
except
end;
if Screen.ActiveForm.ActiveControl is TWinControl then
try
CorAnterior := TMeuComponente(Screen.ActiveForm.ActiveControl).Color;
TMeuComponente(Screen.ActiveForm.ActiveControl).Color := CorComFoco;
Componente := Screen.ActiveForm.ActiveControl;
except
end;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
Screen.OnActiveControlChange := nil;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Application.CreateForm(TForm2,Form2);
Form2.Show;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Screen.OnActiveControlChange := FocoAlterado;
end;
end. GOSTEI 0
Framosip
17/03/2008
Marco Salles,
boa noite.
Realmente agora ficou mais claro, porém devo estar errando em algum lugar.
No meu fiz assim:
porém ao executar retorna Exception Access violation ....
poderia me auxiliar onde estou errando?
abraços!
boa noite.
Realmente agora ficou mais claro, porém devo estar errando em algum lugar.
No meu fiz assim:
unit FormLogin;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, XP_Form, StdCtrls, Buttons, Registry, DB, ADODB;
type
TMeuComponente = class(TControl)
public
property Color;
end;
TFrmLogin = class(TForm)
Conex: TADOConnection;
FrmXp: TtfXPForm;
GpLogin: TGroupBox;
Label1: TLabel;
Label2: TLabel;
UserLog: TEdit;
UserPass: TEdit;
BtOk: TBitBtn;
BtConfig: TBitBtn;
BtCan: TBitBtn;
procedure FormShow(Sender: TObject);
procedure BtConfigClick(Sender: TObject);
procedure BtOkClick(Sender: TObject);
procedure BtCanClick(Sender: TObject);
procedure FocoAlterado(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
Componente: TWinControl;
CorAnterior: TColor;
public
{ Public declarations }
end;
const
CorSemFoco = clWindow;
CorComFoco = clBlue;
var
FrmLogin: TFrmLogin;
Registro : TRegistry;
implementation
uses FormSplash, FormConfig;
{$R *.dfm}
procedure TFrmLogin.FocoAlterado(Sender: TObject);
begin
if Componente <> nil then
try
TMeuComponente(Componente).Color := CorAnterior;
except
end;
if Screen.ActiveForm.ActiveControl is TWinControl then
try
CorAnterior := TMeuComponente(Screen.ActiveForm.ActiveControl).Color;
TMeuComponente(Screen.ActiveForm.ActiveControl).Color := CorComFoco;
Componente := Screen.ActiveForm.ActiveControl;
except
end;
end;
procedure TFrmLogin.FormDestroy(Sender: TObject);
begin
Screen.OnActiveControlChange := nil;
end;
procedure TFrmLogin.FormCreate(Sender: TObject);
begin
Screen.OnActiveControlChange := FocoAlterado;
end;
end.
porém ao executar retorna Exception Access violation ....
poderia me auxiliar onde estou errando?
abraços!
GOSTEI 0
Framosip
17/03/2008
Marco Salles,
Boa noite.
Como não tenho permissão para editar o post, preciso responder e infelizmente passar a frente dos outros tópicos as vezes nem solucionados.
Olha, não sei se é o correto mas troquei a linha
Screen.OnActiveControlChange := FocoAlterado;
do evento Create para Show e funcionou!
agradeço desde já.
Abraços!
Boa noite.
Como não tenho permissão para editar o post, preciso responder e infelizmente passar a frente dos outros tópicos as vezes nem solucionados.
Olha, não sei se é o correto mas troquei a linha
Screen.OnActiveControlChange := FocoAlterado;
do evento Create para Show e funcionou!
agradeço desde já.
Abraços!
GOSTEI 0
Marco Salles
17/03/2008
Olha, não sei se é o correto mas troquei a linha
Screen.OnActiveControlChange := FocoAlterado;
do evento Create para Show e funcionou!
vc fez muitissimo bem ... vc se mobilizou e consegui resolver este pepino
Erro de Exception Access violation geralmente esta relacionado a varivéis que ainda não foram criadas ... e trocar onCreate por Onhow teoricamente dar mais tempo para que essas vaiávei sejam criadas , ja que o evento onShow ocorre depois do evento OnCreate ..
Agora , para ser mais preciso e mais formal , seria necessário deburgar o seu seu aplicativo para ter uma opinião melhor do pq disso . Confesso que não lhe sugereria trocar de evento . Mas ja que foi beleza !
GOSTEI 0