leovicio 0 Denunciar post Postado Abril 8, 2010 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 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
Raficcha 1 Denunciar post Postado Abril 8, 2010 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
leovicio 0 Denunciar post Postado Abril 10, 2010 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 :) 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
Raficcha 1 Denunciar post Postado Abril 12, 2010 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
leovicio 0 Denunciar post Postado Abril 19, 2010 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
Raficcha 1 Denunciar post Postado Abril 19, 2010 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
leovicio 0 Denunciar post Postado Abril 20, 2010 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 Compartilhar este post Link para o post Compartilhar em outros sites