Passar Objeto como parametro de função
Olá amigos
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
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
Curtidas 0
Respostas
Motta
04/12/2003
unit Unit1;
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.
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.
GOSTEI 0
Afarias
04/12/2003
vc pode passar como TObject ... ex:
procedure MudaCor(Obj: TObject);
begin
if (Obj is TEdit) then
(Obj as TEdit).Color := clYellow;
end;
então basta fazer::
MudarCor(Edit1);
T+
procedure MudaCor(Obj: TObject);
begin
if (Obj is TEdit) then
(Obj as TEdit).Color := clYellow;
end;
então basta fazer::
MudarCor(Edit1);
T+
GOSTEI 0
Barcelos
04/12/2003
Olá amigos,
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
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
GOSTEI 0
Jrs.net
04/12/2003
Agradeço a ajuda de todos
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;
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;
GOSTEI 0
Jrs.net
04/12/2003
um detalhe sobre a questão anterior....
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: :?: :?:
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: :?: :?:
GOSTEI 0