Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

leovicio

Alinhamento de Componentes

Recommended Posts

Alguem sabe como faço para alinha componentes dinamicamente quando meu programa for maximizado ou alterado o tamanho da janela

 

Imagens mostrando o que quero fazer

 

e tipo uma tabela

 

exemplos de redimencionamento da janela

Imagem Postada

 

Imagem Postada

 

Imagem Postada

 

Imagem Postada

 

 

acho que da para intender

 

ja que to pedindo hehe

 

como fazer para tipo duplica o componenente fazer uma copia exata

 

exemplo tenho um quadradinho daquela da imagen com os dados queria fazer a copia dele e alinha altomaticamente

Compartilhar este post


Link para o post
Compartilhar em outros sites

Experimente utilizar um pouco de matemática e as opções Top, Left, Width, Height dos seus componetnes.

 

:D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mechi de la mechi de ca e saiu isso

 

Se alguem poder da umas dica ou deichar isso ai melhor (mais limpo) eu agradeço :)

 

 

Imagem Postada

 

Imagem Postada

 

Imagem Postada

 

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    qtidadeitensadd: TEdit;
    bt_calcula: TButton;
    Panel1: TScrollBox;
    Label1: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure bt_calculaClick(Sender: TObject);
    procedure FormResize(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  ncompo,largurac,alturac,comjacri,componlinha:integer;
  nomecampo:string;
implementation

{$R *.dfm}

procedure TForm1.bt_calculaClick(Sender: TObject);
var
colunas,linhas,largurapanel,L,C,topc,leftc,totalcompon:integer;
largp,lagurac:real;
campo:TPanel;
begin
comjacri:=1;
ncompo:=StrToInt(qtidadeitensadd.Text);
totalcompon:=ncompo;
largurapanel:=Panel1.Width;
//largp:=largurapanel / (largurac+5);
//ShowMessage(floattostrf(largp,ffFixed,18,3));

colunas:= largurapanel div (largurac+5);
linhas:= ncompo div colunas;
//lagurac:= ncompo / colunas;


ncompo:=1;
//ShowMessage('Colunas:'+IntTostr(colunas)+' Linhas:'+IntTostr(linhas));
topc:=0;


for L := 1 to linhas+1 do
begin
leftc:=0;
for C := 1 to colunas do
begin
 campo:= TPanel.Create(Self);
campo.Parent:= panel1;
campo.Width:=largurac;
campo.Height:=alturac;
campo.Name:=nomecampo+intToStr(ncompo);
campo.Caption:=nomecampo+intToStr(ncompo);
campo.Top:=topc;
campo.Left:=leftc;
inc(ncompo);
leftc:=(largurac+5)*C;
if ncompo>totalcompon then
exit;

end;
topc:=(alturac+5)*L;

end;




end;

procedure TForm1.FormCreate(Sender: TObject);
begin
ncompo:=1;
nomecampo:='maq';
largurac:=160;
alturac:=120;
componlinha:=1;
comjacri:=0;
end;

procedure TForm1.FormResize(Sender: TObject);
var
largurapanel,qtddtotalc,colunas,linhas,C,L,leftc,totalcompon,topc:integer;
begin
if comjacri=1 then     begin

ncompo:=StrToInt(qtidadeitensadd.Text);
totalcompon:=ncompo;
largurapanel:=Panel1.Width;

colunas:= largurapanel div (largurac+3);
 if colunas>=1 then begin
linhas:= ncompo div colunas;

ncompo:=1;
topc:=0;


for L := 1 to linhas+1 do
begin
leftc:=0;
for C := 1 to colunas do
begin
Tpanel(FindComponent( nomecampo+IntToStr(ncompo) )).Top:=topc;
Tpanel(FindComponent( nomecampo+IntToStr(ncompo) )).Left:=leftc;
inc(ncompo);
leftc:=(largurac+5)*C;
if ncompo>totalcompon then
exit;

end;
topc:=(alturac+5)*L;

end;
end;

end;
end;
end.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu achei lgl d+. :D. Você disse em "deixar mais limpo", mas eu não entendi muito bem. Poderia explica melhor ai, ai a gnt tenta dar umas dicas.:DDDD

Compartilhar este post


Link para o post
Compartilhar em outros sites

beleza criei esses componentes dinamicamente agora como colocar um popupmenu em cada 1 deles e nesse popupmenu identifica qual component foi clicado?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode criar também os TPopupMenu's dinamicamente e adicionalos por um for aos seus componentes.

Compartilhar este post


Link para o post
Compartilhar em outros sites

consegui pega o nome do component que chamo o popup

 

na hora de cria o component definio o menu popup para ele

campo.PopupMenu:=PopupMenu1;

 

 

em um botão do popup coloquei esssa função que me mostra qual nome do component que foi gerado o popup

 

var

idx:integer;

 

begin

idx:=PopupMenu1.PopupComponent.ComponentIndex;

if Components[idx] is Tpanel then

ShowMessage( Tpanel(Components[idx]).Name); //mostra nome do component

 

Dei uma comentada no codigo para ve se alguem entende ehehhe

 

Troquei o Panel por um Frame criado dinamicamente apartir de um modelo ja pronto

 


 private
  procedure criamaquinas();
   var
  ncompo,largurac,alturac,comjacri:integer;
  nomecampo:string;







procedure Tmainform.criamaquinas();
var
colunas,linhas,largurapanel,L,C,topc,leftc,totalcompon:integer; //variaveis usadas na bagaça
Maquina:TframePC; //define a variavel Maquina Como um Frame
begin
comjacri:=1;//informa que ja foi criado algum componente
ncompo:=15; //NUmero de componentes a sererem criados definido so para teste
totalcompon:=ncompo; //numero total de componentes
largurapanel:=scrollmaquinas.Width;   //largura do scroll onde vai aparece os componentes

colunas:= largurapanel div (largurac+5); //quantidade de colunas no scrol
linhas:= ncompo div colunas; //quantidade de linhas no scroll

ncompo:=1;  //numero do primeiro componente

topc:=0; //TOP do primero componente


{Magica para cria os componentes heheh}
for L := 1 to linhas+1 do //gera as linhas
begin
leftc:=0; //LEFT do primero componente
for C := 1 to colunas do   //gera as colunas
begin
 Maquina:= TframePC.Create(Self); //cria o componente
 Maquina.Visible:=false; //esconde o componente ate ele esta alinhado
Maquina.Parent:= scrollmaquinas; //define parente do scroll
Maquina.Width:=largurac;   // largura do componente
Maquina.Height:=alturac;   //altura do componente
//Maquina.PopupMenu:=PopupMenu1; //popup menu dos componente
Maquina.Name:=nomecampo+intToStr(ncompo); //nome do componente ## junto o nome + o numero ##
//Maquina.panel1.Caption:=nomecampo+intToStr(ncompo);
//Maquina.panel1.Width:=largurac;
//Maquina.panel1.Height:=alturac;
Maquina.Top:=topc; //TOP do componente
Maquina.Left:=leftc; //Left do Componete
 Maquina.Visible:=true;     //exibe o componente
inc(ncompo); //incremente o numero de componentes
leftc:=(largurac+5)*C;  //Altera o Left para o proximo componente
if ncompo>totalcompon then //verifica se todos os componente ja foram criandos então sai do loop
exit; //sair

end;
topc:=(alturac+5)*L;   // altera o TOP para o proximo componente

end;

end;

procedure Tmainform.FormCreate(Sender: TObject);
begin
{ Configurações da lista de Maquinas}
nomecampo:='maq'; //nome do componente
largurac:=160;  //largura do componente
alturac:=120;   //altura do componente
{Fim configuração Lista de Maquinas}
end;

procedure Tmainform.FormResize(Sender: TObject);
var
largurapanel,colunas,linhas,C,L,leftc,totalcompon,topc:integer;
begin
if comjacri=1 then     begin

totalcompon:=ncompo-1; //total de componentes
largurapanel:=scrollmaquinas.Width; //largura do scrool onde aparece os componentes

colunas:= largurapanel div (largurac+4);  // quantidade de colunas o Numero 4 e para compensa da Distancia de 1 componente no outro
 if colunas>=1 then begin   //se o numero de paineis der para fazer outra linha entao
linhas:= ncompo div colunas;  //quantidade de linhas

ncompo:=1; //numero do primero componente
topc:=0;  //TOP do componente


for L := 1 to linhas+1 do   //Cria as linhas
begin
leftc:=0;
for C := 1 to colunas do   //cria as colunas
begin
Tpanel(FindComponent( nomecampo+IntToStr(ncompo) )).Top:=topc;  //procura o TOP do componente a ser organizado
Tpanel(FindComponent( nomecampo+IntToStr(ncompo) )).Left:=leftc; //procura o Left do componente a ser organizado
inc(ncompo); //incrementa o numero do componente
leftc:=(largurac+5)*C; //Left do proximo Componente
if ncompo>totalcompon then   //se ja organizou todos os componentes então sai do loop
exit;

end;
topc:=(alturac+5)*L;    //TOP do componente o NUmero 5 e a distantica de um componente no outro

end;
end;

end;
end;

Imagem de como ta ficando meu programinha

 

Imagem Postada

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.