Função comum a varios componentes
Como eu faço p/ deixar uma função comum a vários componentes, precisando acessar uma propriedade do componente ??
O que eu pretendo fazer é um Help (do tipo HTML Help) sensível ao contexto. Já tenho tudo pronto p/ executar o comando, só preciso saber o contexto propriamente dito. Para isso, estou colocando na propriedade HelpContext (que tem em todos os componentes que irão chamar a procedure) o valor do contexto.
Assim, só preciso de uma procedure única, que usaria o componente.HelpContext p/ chamar o help:
procedure TfrmPrincipal.AjudaClick(Sender: TObject);
begin
htmlHelp(self.Handle, ´help.chm´, HH_HELP_CONTEXT, ??.HelpContext);
end;
A proc eu to colocando num menu PopUp. Como eu faço p/ descobrir qual o componente que chamou a proc p/ usar a tal propriedade ???
Pensei em usar o Components, mas com o que eu vou comparar p/ saber se o Components[X] é o que chamou a proc e usar a propriedade dele, e não acabar usando a propriedade de um componente errado ??
Espero ter me feito entender.....
O que eu pretendo fazer é um Help (do tipo HTML Help) sensível ao contexto. Já tenho tudo pronto p/ executar o comando, só preciso saber o contexto propriamente dito. Para isso, estou colocando na propriedade HelpContext (que tem em todos os componentes que irão chamar a procedure) o valor do contexto.
Assim, só preciso de uma procedure única, que usaria o componente.HelpContext p/ chamar o help:
procedure TfrmPrincipal.AjudaClick(Sender: TObject);
begin
htmlHelp(self.Handle, ´help.chm´, HH_HELP_CONTEXT, ??.HelpContext);
end;
A proc eu to colocando num menu PopUp. Como eu faço p/ descobrir qual o componente que chamou a proc p/ usar a tal propriedade ???
Pensei em usar o Components, mas com o que eu vou comparar p/ saber se o Components[X] é o que chamou a proc e usar a propriedade dele, e não acabar usando a propriedade de um componente errado ??
Espero ter me feito entender.....
@dils0n
Curtidas 0
Respostas
@dils0n
11/06/2004
Pra quem nao entendeu ainda, é tipo um ´O que é isso´ no Windows - qualquer componente pode ter essa função associada a um PopUp ....
GOSTEI 0
@dils0n
11/06/2004
Não dá p/ usar o Sender porque, nesse caso, o Sender será o Menu PopUp..... No fim das contas, com ajuda de um colega, chegamos nisso :
procedure TfrmPrincipal.AjudaClick(Sender: TObject);
var i: integer;
begin
for i := 0 to ComponentCount - 1 do
begin
if (Components[i] is TEdit) then
begin
if (Components[i] as TEdit).Focused then
htmlHelp(self.Handle, ´help.chm´, HH_HELP_CONTEXT, (Components[i] as TEdit).HelpContext);
end
else if (Components[i] is TStringGrid) then
begin
if (Components[i] as TStringGrid).Focused then
htmlHelp(self.Handle, ´help.chm´, HH_HELP_CONTEXT, (Components[i] as TStringGrid).HelpContext);
end;
end;
end;
Problemas :
1) Pra cada componente que for acessar a procedure, teria que acrescentar ele nos IFs
2) Se for clicar c/ o botao direito sem antes ter colocado o focus no lugar certo, vai pegar o help do lugar errado
3) p/ componentes sem ´focused´ ferra a coisa.
Alguma ideia melhor !?!!?
procedure TfrmPrincipal.AjudaClick(Sender: TObject);
var i: integer;
begin
for i := 0 to ComponentCount - 1 do
begin
if (Components[i] is TEdit) then
begin
if (Components[i] as TEdit).Focused then
htmlHelp(self.Handle, ´help.chm´, HH_HELP_CONTEXT, (Components[i] as TEdit).HelpContext);
end
else if (Components[i] is TStringGrid) then
begin
if (Components[i] as TStringGrid).Focused then
htmlHelp(self.Handle, ´help.chm´, HH_HELP_CONTEXT, (Components[i] as TStringGrid).HelpContext);
end;
end;
end;
Problemas :
1) Pra cada componente que for acessar a procedure, teria que acrescentar ele nos IFs
2) Se for clicar c/ o botao direito sem antes ter colocado o focus no lugar certo, vai pegar o help do lugar errado
3) p/ componentes sem ´focused´ ferra a coisa.
Alguma ideia melhor !?!!?
GOSTEI 0
Xanatos
11/06/2004
Bom voce pode criar uma variavel global string que vai conter o helpcontext do componente!!!
no evento onmousemove dos componentes voce atribui o valor do helpcontext
Espero que isso ajude!!!
no evento onmousemove dos componentes voce atribui o valor do helpcontext
Espero que isso ajude!!!
GOSTEI 0
Xanatos
11/06/2004
Opa! ai voce teria um popup para todos eles! e apenas um evento onmousemove! entendeu?
:idea:
:idea:
GOSTEI 0
@dils0n
11/06/2004
Entedi xanatos !
blz, tambem é uma !! mas eu nao sou muito fã de var globais :D mas pelo menos vai dar menos erros !!
Valeu pela força !!
blz, tambem é uma !! mas eu nao sou muito fã de var globais :D mas pelo menos vai dar menos erros !!
Valeu pela força !!
GOSTEI 0
Xanatos
11/06/2004
:D é as alternativas são sempre úteis!!!
GOSTEI 0