Fórum Alinhamento de Buttons #287484
08/07/2005
0
Tenho telas que possuem 4 a 6 botoes na parte inferior da tela alinhados evidamente na horizontal.
Só q a partir de agora vou ter q tornar sempre u1 ou 2 botões destes invesiveis.
Vou definir se são visiveis ou não na criação do form.
Como alinhá-los corretamente com seu devido espaçamento na horizontal somente os visíveis?
** como tenho telas q tem 6, 7,5 botoes eu precisaria duma formula que se aplicasse a todas as telas pra fazer esse alinhamento.
agradecido
Diogo
Diogoalles
Curtir tópico
+ 0Posts
08/07/2005
Marco Salles
Não sei se entendi direito. Mas aqui vai
Altere a propriedade Tag de todos os botoes que ficarão visiveis e Invisiveis...Mas somente os botoes que devam de fato ficar aninhados
na parte inferior da tela... Para esses botoes coloque a propriedade Tag igual a Um.... Faça esta alteração no próprio objeto Inspector
Escreva o método Geral... Este método vale ate mesmo em RumTime e independe da quantidade de botoes
Procedure AlinhaBotoes; var TamanhoDoBotoes:Integer; i:Integer; Contar:Integer; Acrescentar:Integer; invisiveis:Integer; begin i:=0; Contar:=0; invisiveis:=0; while i <= Form1.ComponentCount -1 do begin if Form1.Components[i] is TButton then if TButton(Form1.Components[i]).tag = 1 Then if TButton(Form1.Components[i]).visible = True Then contar:=contar+1 else invisiveis:=invisiveis+1; i:=i+1; end; tamanhoDoBotoes:=((Form1.Width - contar-invisiveis) div contar); i:=0; acrescentar:=-1; while i <= Form1.ComponentCount -1 do begin if Form1.Components[i] is TButton then if TButton(Form1.Components[i]).tag = 1 Then if TButton(Form1.Components[i]).visible = True Then begin TButton(Form1.Components[i]).Width:=tamanhoDoBotoes; TButton(Form1.Components[i]).top:=312; ******Exemplo TButton(Form1.Components[i]).Left:=acrescentar; Acrescentar:=Acrescentar+tamanhoDoBotoes; end; i:=i+1; end ; end;
***** Pode ser qualque valor , ou nen precisa , se esse botoes ja estiverem Incialmente Prealinhados a nivel de projeto
[b:8146a60429]Exemplo em Rum Time[/b:8146a60429]
Esconde o botão1 Alinhandos os demais
procedure TForm1.Button8Click(Sender: TObject); begin Button1.Visible:=False; AlinhaBotoes; end;
Reapresenta o botão1 , Alinhandos novamente
procedure TForm1.Button9Click(Sender: TObject); begin Button1.Visible:=True; AlinhaBotoes; end;
Gostei + 0
09/07/2005
Diogoalles
só q o resultado não é o esperado pq tenho vários botoes na tela e gostaria de alinhar somente os botões q estão em um determinado panel.
como eu faria então já q está verificando todos os botões do form (if Form1.Components[i] is TButton then) ?
agradecido
Diogo
Gostei + 0
09/07/2005
Diogoalles
funcionou..valeu
Gostei + 0
12/07/2005
Diogoalles
ainda estou com um problema no alinhamento dos botoes
alterei um pouco a função passada pelo nosso colega Marco.
ficou assim:
procedure TFrm1.AlinhaBotoes(Frm:TForm;W:Integer); // W é o width do frm ou do panel onde estão os botões a serem alinhados var Contar,i,j,k,l,m : Integer; begin k := 0; j := 0; l := 0; i := 0; Contar := 0; while i <= Frm.ComponentCount -1 do begin if Frm.Components[i] is TButton then if TButton(Frm.Components[i]).tag = 1 then if TButton(Frm.Components[i]).visible = True then begin contar := contar + 1; if not(k > 0)then k := TButton(Frm.Components[i]).Width; end; i := i + 1; end; j := W div contar; l := j - k; l := l div 2; m := 0; i := 0; while i <= Frm.ComponentCount -1 do begin if Frm.Components[i] is TButton then if TButton(Frm.Components[i]).tag = 1 then if TButton(Frm.Components[i]).visible = True then begin if m = 0 then begin TButton(Frm.Components[i]).Left := l; end else begin TButton(Frm.Components[i]).Left := (j*m) + l; end; m := m + 1; end; i := i + 1; end; end;
o problema q acontece é que os botoes ñ estão sendo alinhados pela sua ordem...
ou seja,
o taborder deles está 0,1,2,3,4,5,6
se os btns com ordem 1 e 3 estiverem invisiveis eles ñ são alinhados 0,2,4,5,6. são alinhados por exemplo 4,5,0,6,2..
a função ComponentCount pega q order para ler os componentes e alinhá-los na minha função?
obrigado
Diogo
Gostei + 0
12/07/2005
Marco Salles
Outra opção é alterar essa ordem em rumTime...
entendeu :?: :?: :?:
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)