Fórum Problema com eventos componente #335781

06/01/2007

0

Olá pessoal estou com seguinte duvida:
Criei um componente que desenha figuras de acordo com a escolha de um determinado botão. Ao clicar em um botão crio o componente dentro de um ScrollBox, até aí blz, o problema e que não consigo implementar os eventos do componente que crie em tempo de execução. como exemplo o evento onclick.
Como devo Proceder?
Se puderem me ajudar...
Valeu pela Atenção.


Robsbq

Robsbq

Responder

Posts

07/01/2007

Aroldo Zanela

Colega,

Veja um exemplo de criação de componentes dinamicamente numa ScrollBox e associando o manipulador de eventos OnClick:

Const LimiteVertical = 15;
var Botoes: Array of TBitBtn;
I, Leitos: Integer;
    nTop, nLeft: Integer;
nHorizontal, nVertical: Integer;
begin
qLeitos.Open;
  qLeitos.FetchAll;

  Leitos := qLeitos.RecordCount;
  SetLength(Botoes, Leitos);

  nVertical:= 0;
  nHorizontal := 0;
  For I := 0 to Leitos-1 do
  begin
  if nVertical>=LimiteVertical then
    begin
    nVertical:= 0;
      nHorizontal := nHorizontal + 100;
    end;
  nTop := 10 + (nVertical*30);
  Botoes[I]:= TBitBtn.Create(Self);
    Botoes[I].Parent:= ScrollBox;
    Botoes[I].Left:= 10+nHorizontal;
    Botoes[I].Top:= nTop;
    Botoes[I].Hint:= qLeitosLEI_DESCRICAO.Value;
    Botoes[I].Caption:= qLeitosLEI_NUMERO.Value;
    Botoes[I].ShowHint:= true;
    Botoes[I].Margin:= 4;
    Botoes[I].Tag:= qLeitosLEI_ID.Value;
    Botoes[i].OnClick   := DadosComplementares;

    ImageList.GetBitmap(0,Botoes[I].Glyph);

  Inc(nVertical);

    qInternacoes.Close;
    qInternacoes.ParamByName(´LEITO´).AsInteger:= qLeitosLEI_ID.Value;
    qInternacoes.Open;
    if qInternacoes.RecordCount>0 then
    begin
    Botoes[I].Hint:= Botoes[I].Hint + 13 +
       ´Médico: ´+qInternacoesFUN_NOME.Value + 13 +
                               ´Paciente: ´+qInternacoesPAC_NOME.Value + 13 +
                               qInternacoesINT_INICIO.AsString; 
    ImageList.GetBitmap(1,Botoes[I].Glyph);
    end;
    qLeitos.Next;
  end;


Procedure DadosComplementares:

procedure TForm14.DadosComplementares(Sender: TObject);
var I, N: Integer;
begin
  vle.Strings.Clear;
  qInternacoes.Close;
  qInternacoes.ParamByName(´LEITO´).AsInteger:= (Sender as TBitBtn).Tag;
  qInternacoes.Open;
  if qInternacoes.RecordCount<=0 then exit;
  N := qInternacoes.FieldCount-1;
  for I := 0 to N do
  begin
  if qInternacoes.Fields[I].Tag=1 then
    begin
    vle.InsertRow(qInternacoes.Fields[I].DisplayName, qInternacoes.Fields[I].AsString, true);
    end;
  end;
end;



Responder

Gostei + 0

07/01/2007

Robsbq

vou tentar ser mais claro.
Tenho um componente que se chama AutomataControl, na minha janela principal tenho 4 botões, ao clicar em um desses botoes chamo o metodo insertState aonde instancio um objeto desse componente, para cada botao que escolher esse componente toma formas diferentes, aí vou adicionado-os dentro de um scrollbox
só que depois não estou conseguindo manipular eventos com os componentes que instancio, como exemplo quero clicar num desses objetos e fazer aparecer um mensagem ´oi´ algo assim.
Vou mandar a parte do codigo aonde crio o componente isso pode te ajudar e entender.

procedure InsertState (StateType: TAutomataControlType;PosX,PosY:integer; StName:String);
var
temp: TAutomataControl;
begin
temp := TAutomataControl.Create (FrmMain.ScrollBox1);
with temp do
begin
ControlType := StateType;
Parent := FrmMain.ScrollBox1;
Name := ´ac´ + IntToStr (Parent.ControlCount);
SetBounds (PosX, PosY, Width, Height);
end;
end;

Valeu pela atenção.....


Responder

Gostei + 0

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

Aceitar