Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   ajustar componentes en form (https://www.clubdelphi.com/foros/showthread.php?t=70449)

Rofocale 21-10-2010 10:19:32

ajustar componentes en form
 
Hola alguien me podria decir como hacer para que todos los componentes que estan dentro del form principal se ajusten al tamaño de pantalla dependiendo si tambien quiero maximizar el form o redimenzionar el form en tiempo de ejecucion.... y si quiero cambiar de pantalla que esta tambien se adapte a esta pantalla..
alguien me puede ayudar ? porque ayer estuve probando mi programa en una pantalla de 21'' y se descuadraba muchas cosas y el programa lo hice con una pantalla de 19''

bueno gracias
espero me ayuden

Galahad 21-10-2010 11:12:34

ajustar componentes a pantalla
 
Este problema se ha comentado muchas veces en el foro, te recomiendo que hagas pruebas con la propiedad 'Anchors' de los componentes, utiliza el buscador del foro, por ejemplo aqui se trata este tema.

Saludos...

Rofocale 27-10-2010 21:27:27

he probado la propiedad anchors y tambien en algunos posts que encontre en este foro el codigo que encontre lo utilize pero sin tener exito, se resescala un poco pero igual sigue viendose feo..

he visto programas muy simples y todos funcionan para cualquier resolucion.. y no puedo encontrar nada adecuado para poder hacerlo con mi aplicacion :(

alguien me ayuda ? alguien que halla hecho un programa en delphi que se ajuste a cualquier resolucion.. y cuando se resscale tambien se reescale sin que los componentes se escondan ?

gracias espero ayuda..

ecfisa 27-10-2010 21:40:03

Hola.

Con una busqueda en el foro con la palabra 'redimensión', encontré estos temas relacionados a componentes:
LINK 1
LINK 2
LINK 3
LINK 4
LINK 5

No son todos, la búsqueda me arrojó 146 páginas...


Saludos. :)

Rofocale 28-10-2010 03:34:54

hola ecfisa probe tu codigo

Código Delphi [-]
procedure TForm1.FormCanResize(Sender: TObject; var NewWidth,
  NewHeight: Integer; var Resize: Boolean);
var
  i:Integer;
begin
  for i:= 0 to ComponentCount - 1 do
  begin
    TControl(Components[i]).Left:= Round(NewWidth * TControl(Components[i]).Left / Width);
    TControl(Components[i]).Top:=  Round(NewHeight * TControl(Components[i]).Top / Height);
  end;
end;

y me da error access violation
estoy usando delphi 2010
:(

ecfisa 28-10-2010 05:22:49

Hola Rofocale.

Yo uso Delphi 7 y por supuesto no me dá ese error. No sé que pueda estar pasando, no creo que Delphi 2010 haya
cambiado tanto como para no aceptar un código tán simple. Supongo que las propiedades TForm.ComponentCount y
TForm.Components debe soportarlas.

Fijate así, sólo para probar, por que sinceramente no tengo idea de Delphi 2010.
Código Delphi [-]
procedure TForm1.FormCanResize(Sender: TObject; var NewWidth,
  NewHeight: Integer; var Resize: Boolean);
var
  i:Integer;
begin
 for i:= 0 to Self.ComponentCount - 1 do
  begin
    TControl(Self.Components[i]).Left:=
      Round(NewWidth * TControl(Self.Components[i]).Left / Self.Width);
    TControl(Self.Components[i]).Top:=
      Round(NewHeight * TControl(Self.Components[i]).Top / Self.Height);
  end;
end;

De todos modos este código ajusta las posiciones de los componentes, no el tamaño.

Saludos. :)

Rofocale 28-10-2010 10:53:15

no funciona ecfisa..dice Access Violation at address...
:(

ecfisa 28-10-2010 20:28:53

Cita:

Empezado por Rofocale (Mensaje 380701)
no funciona ecfisa..dice Access Violation at address...
:(

Hola Rofocale.

Leyendo con atención el link , se puede apreciar el comentario del compañero FaKWeb que dice:
Cita:

Gracias por las respuestas... En la web de Torry, encontre algunos que podrian haberme servido.. Igual, por plena curiosidad proble el ide Delphi 10, y quede totalmente conforme.. Tiene todas esas opciones, de forma nativa, con solo controlar un par de parametros.. Para tenerlo en cuenta a la hora de cambiar el IDE.. Gracias a todos...
Quizá el problema se desata al intentar forzar una acción que ya está contemplada por Delphi 2010...

Revisá en la ayuda y en el User's Guide de Delphi si dice algo sobre el tema. Me es imposible darte otra sugerencia, ya que como te comenté antes,
no tengo Delphi 2010 para probar el código.


Saludos. :)

Matorral 08-12-2010 18:00:12

Hola Rofocale.

He probado el código y también me daba el mismo error. En mi caso me lo daba porque intentaba asignar valores (left y top) a propiedades readonly de componentes que no pertenecían a la clase TControl.

He cambiado el código y ya me funciona.

Código:


Código Delphi [-]

procedure TPrincipal.FormCanResize(Sender: TObject; var NewWidth,
  NewHeight: Integer; var Resize: Boolean);
var i:Integer;
var ClassRef: TClass;
var lEsControl:boolean;
begin
  for i:= 0 to ComponentCount - 1 do begin
    lEsControl:=False;
    ClassRef := Components[i].ClassType;
    while ClassRef <> nil do begin
      if ClassRef = TControl then
        lEsControl:=True;
      ClassRef := ClassRef.ClassParent;
    end;
    if lEsControl then begin
      TControl(Components[i]).Left:=
          Round(NewWidth * TControl(Components[i]).Left / Principal.Width);
      TControl(Components[i]).Top:= 
          Round(NewHeight * TControl(Components[i]).Top / Principal.Height);
    end;
  end;
end;

Espero que no sea demasiado tarde y te sirva el código.

Un saludo.

ecfisa 08-12-2010 19:11:46

Hola Matorral.

No había pensado en la posibilidad de un componente que no derive de TControl como por ejemplo TIBQuery o TDataSource.
Seguramente el error que le dá a Rofocale viene por ahi...

Se puede solucionar con una simple verificación:
Código Delphi [-]
procedure TForm1.FormCanResize(Sender: TObject; var NewWidth,
  NewHeight: Integer; var Resize: Boolean);
var
  i:Integer;
begin
  for i:= 0 to Self.ComponentCount - 1 do
    if Components[i] is TControl then
    begin
      TControl(Components[i]).Left:=
        Round(NewWidth * TControl(Components[i]).Left / Width);
      TControl(Components[i]).Top:=
        Round(NewHeight * TControl(Components[i]).Top / Height);
    end;
end;

Un saludo.


La franja horaria es GMT +2. Ahora son las 04:45:20.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi