Fórum Como melhorar a Função #355462
17/03/2008
0
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.
Framosip
Curtir tópico
+ 0Posts
17/03/2008
Alexandre.jose
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
17/03/2008
Macario
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
19/03/2008
Framosip
Como eu poderia utilizar desta forma , para formularios, gostaria de padronizar em todos os meus formularios, fonte, cor, etc..etc...
abraços!
Gostei + 0
19/03/2008
Framosip
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
21/03/2008
Marco Salles
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]
2)
//Defina as constantes
// 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
7) e finalmente desconect o Evento...
Espero ter sido Util
Gostei + 0
23/03/2008
Framosip
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
23/03/2008
Marco Salles
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
23/03/2008
Framosip
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
23/03/2008
Framosip
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
23/03/2008
Marco Salles
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
Clique aqui para fazer login e interagir na Comunidade :)