Jump to content
Fórum Script Brasil
  • 0

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


Paulo Vasques
 Share

Question

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 to comment
Share on other sites

3 answers to this question

Recommended Posts

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

Edited by Paulo Vasques
Link to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share



  • Forum Statistics

    • Total Topics
      150.9k
    • Total Posts
      648.8k
×
×
  • Create New...