Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Ajuda com criação de componentes em tempo real


Paulo Vasques

Pergunta

Criei vários componentes em tempo de execução como Panel, Label, Button, etc... quanto a criação beleza, funciono tudo perfeito da maneira que esperava, porem não estou conseguindo criar os procedimentos, por exemplo, se eu crio uma procedure que troca a cor de uma Panel quando passar o mouse em cima, ela esta trocando a cor de todas as Panel criadas. alguém pode me ajudar nisto, he muito urgente.

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

Galera tentando fazer aqui acho que consegui de uma olhada em como fico o código:

vou postar o código inteiro da unit para outros que também quiser implementar.

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    ScrollBox1: TScrollBox;
    procedure PanelClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  Panel_teste : array [1..100] of TPanel;

implementation

{$R *.dfm}

procedure TForm1.PanelClick(Sender: TObject);
var I : Integer;
begin
  for I := 1 to 100 do
    begin
    if Panel_teste[I].MouseInClient then
    begin
      Panel_teste[I].Color := clYellow;
      Break;
    end;
    end;

end;

procedure TForm1.FormCreate(Sender: TObject);
var I, Panel_left, Panel_top : Integer;
begin
Panel_left := 5;
Panel_top := 5;
  for I := 1 to 100 do
    begin
       Panel_teste[I]:= TPanel.Create(ScrollBox1);
       with Panel_teste[I] do begin
         Visible := true;
         Left := Panel_left;
         Top := Panel_top;
         Width := 179;
         Height := 100;
         BevelOuter := bvNone;
         Caption := '';
         Color := cl3DLight;
         TabOrder := 1;
         Name := 'Panel_'+IntToStr(I);
         OnClick := PanelClick;
         ParentBackground := False;
         Parent := ScrollBox1;
       end;
    Panel_left := Panel_left + 190;
    if Panel_left > Screen.Width then
    begin
      Panel_left := 5;
      Panel_top := Panel_top + 112;
    end;
    end;
end;

end.

Então este código passo a dar certo depois que coloquei o array só não sei dizer se esta foi a melhor solução pois como vocês podem ver ele vai ter que percorrer um laço que vai de 1 a 100 para testar em qual panel esta, em alguns casos este laço pode ser até maio.

Editado por Paulo Vasques
Link para o comentário
Compartilhar em outros sites

  • 0

é uma solução boa, mas voce tambem pode testar o tipo do componente

exemplo

var i: Integer;
begin
   for i := 0 to ComponentCount - 1 do
   begin
      if Components[i] is TPanel then
         TPanel(Components[i]).Enabled := false;

      if Components[i] is TEdit then
         TEdit(Components[i]).Enabled := false;

      if Components[i] is TCurrencyEdit then
         TCurrencyEdit(Components[i]).Enabled := false;

      if Components[i] is TDBLookupComboBox then
         TDBLookupComboBox(Components[i]).Enabled := false;
   end;
end;

abraço

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...