Passar Objeto como parametro de função
04/12/2003
0
Estou desenvolvendo uma função para controlar as cores de entrada e saída dos objetos. Estive pensando em passar cada objeto como Parametro da função, alterar a cor e retornar o objeto. Vou precisar fazer isso com edits, combos e outros, portanto são objetos diferentes....
Não sei como faço pra receber o objeto em uma variável genérica e nem como retornar ele com a cor modificada...
Alguém pode me explicar?
Obrigado
Jrs.net
Posts
04/12/2003
Motta
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Shape1: TShape;
GroupBox1: TGroupBox;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
procedure TrocaCor(o : TObject;cl : TColor);
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
{ TForm1 }
procedure TForm1.TrocaCor(o: TObject; cl: TColor);
begin
if o is TGroupBox then
TGroupBox(o).Color := cl;
if o is TLabel then
TLabel(o).Font.Color := cl;
if o is TShape then
TShape(o).Brush.Color := cl;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
TrocaCor(shape1,clGray);
TrocaCor(groupbox1,clRed);
TrocaCor(label1,clBlue);
end;
end.
04/12/2003
Afarias
procedure MudaCor(Obj: TObject);
begin
if (Obj is TEdit) then
(Obj as TEdit).Color := clYellow;
end;
então basta fazer::
MudarCor(Edit1);
T+
04/12/2003
Barcelos
Como o nosso colega jrs.net disse que usaria vários tipos de objetos, acho que tenho uma rotina um pouco mais trabalhosa, mas bem mais genérica (funciona com quase todos os descendentes de TControl).
O primeiro passo, é declarar uma nova classe derivada de TControl e publicar a propriedade Color. (TControl já tem esta propriedade, mas como está declarada com protected não podemos acessá-la diretamente):
Type TControlHack = Class(TControl)
public
Property Color;
end;
eu geralmente faço isto em uma unidade separada.
Aí basta escrever sua procedure :
procedure MudaCor(Cont : TControlHack;Clr : TColor);
begin
Cont.Color := Clr;
end;
e usá-la da seguinte forma:
MudaCor(TControlHack(Edit1),clyellow);
MudaCor(TControlHack(ComboBox1),clBlue); etc...
a conversão é necessária para não dar erro.
Espero ter ajudado,
Barcelos
osbarcelos@hotmail.com
05/12/2003
Jrs.net
Mas acabei usando a solução do Barcelos...Usei e ficou muito bom. Mas tem um porém....
Coloquei a chamada da procedure no evento Enter do Edit. Funciona beleza mas se eu tiro o mouse (não o cursor) do componente ele perde a cor..... :?: :?: :?:
Alguém tem idéia do porquê ??
Segue o fonte da procedure e da chamada
procedure TfrmCADImovel.EDTCsEnderecoClick(Sender: TObject);
begin
ColorEnter(TControlHack(EDTCsDescricao));
end;
procedure ColorEnter(Cont : TControlHack);
var cor : Tcolor;
begin
cor:= clNavy;
Cont.Color:= cor;
end;
05/12/2003
Jrs.net
Não estou usando o TEdit do Delphi
To usando os componentes Raiza TRzDBEdit...
testei com o Tedit e deu certo....
to mais perdido agora :cry: :cry: :?: :?:
Clique aqui para fazer login e interagir na Comunidade :)