Passar Objeto como parametro de função

04/12/2003

26

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


Responder

Posts

04/12/2003

Motta

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.


Responder

04/12/2003

Afarias

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+


Responder

04/12/2003

Barcelos

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


Responder

05/12/2003

Jrs.net

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;


Responder

05/12/2003

Jrs.net

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: :?: :?:


Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira