GARANTIR DESCONTO

Fórum Como melhorar a Função #355462

17/03/2008

0

Amigos,
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

Framosip

Responder

Posts

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.


Responder

Gostei + 0

17/03/2008

Macario

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)


Responder

Gostei + 0

19/03/2008

Framosip

Alexandre.Jose

Como eu poderia utilizar desta forma , para formularios, gostaria de padronizar em todos os meus formularios, fonte, cor, etc..etc...

abraços!


Responder

Gostei + 0

19/03/2008

Framosip

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!


Responder

Gostei + 0

21/03/2008

Marco Salles

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


Responder

Gostei + 0

23/03/2008

Framosip

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.


Responder

Gostei + 0

23/03/2008

Marco Salles

Olha a unit inteira passada pelo amigo emerson.en no tópico em questão

´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. 



Responder

Gostei + 0

23/03/2008

Framosip

Marco Salles,
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!


Responder

Gostei + 0

23/03/2008

Framosip

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!


Responder

Gostei + 0

23/03/2008

Marco Salles

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 !


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar