Fórum Função comum a varios componentes #237357

11/06/2004

0

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


@dils0n

@dils0n

Responder

Posts

11/06/2004

@dils0n

Pra quem nao entendeu ainda, é tipo um ´O que é isso´ no Windows - qualquer componente pode ter essa função associada a um PopUp ....


Responder

Gostei + 0

11/06/2004

@dils0n

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


Responder

Gostei + 0

11/06/2004

Xanatos

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!!!


Responder

Gostei + 0

11/06/2004

Xanatos

Opa! ai voce teria um popup para todos eles! e apenas um evento onmousemove! entendeu?
:idea:


Responder

Gostei + 0

14/06/2004

@dils0n

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 !!


Responder

Gostei + 0

14/06/2004

Xanatos

:D é as alternativas são sempre úteis!!!


Responder

Gostei + 0

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

Aceitar