Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   determinar ancho de formulario en funcion a espacio de caracteres (https://www.clubdelphi.com/foros/showthread.php?t=94707)

oscarac 31-05-2020 22:36:55

determinar ancho de formulario en funcion a espacio de caracteres
 
buenas tardes

estoy tratando de generar un formulario multi proposito, es decir que por intermedio de parametros pueda mostrar informacion de cualquier tabla, los campos a mostrar los definiria en los parametros

ya tengo en la cabeza la forma de hacerlo (ya lo hice en foxpro) el tema es que aun no sé como determinar el ancho del form (dentro habrá una grilla) en funcion a la cantidad de campos que muestre

no se si me dejo entender

newtron 01-06-2020 09:10:50

Una forma sería usar un tipo letra no proporcional y hacer el cálculo en función de la longitud de los campos+separaciones. Si usas un tipo de letra proporcional la verdad es que no se me ocurre cómo podrías hacer eso.


Saludos

Edito: Estoy pensando en que si usas un tipo de letra no proporcional puedes intentar averiguar el ancho de cada campo en función de su número de caracteres y cuanto mediría rellenándolo con la letra más ancha que encuentres, siempre te sobraría espacio pero sería una forma.

duilioisola 02-06-2020 15:28:47

Tienes a tu disposición TCanvas.TextWidth(const Text: string) : integer;
Devuelve el largo en pixels de un texto en el tipo de letra del Canvas.

Podrías recorrer los campos y obtener el ancho de cada uno según la cantidad de caracteres que permita contener.
Código Delphi [-]
S := StringOfChar('A', LongitudCampo);
AnchoEnPixels := Form1.Canvas.TextWidth(s);

Supongo que para un largo aproximado podrías hacer algo como lo siguiente:

Código Delphi [-]
procedure TForm1.FormShow(Sender: TObject);
var
   Bordes : integer;
   Campos : integer;
   AnchoCampo : integer;
begin
  // Cuanto espacio quiero dejar para bordes
  Bordes := 10;

  // Cuantos campos hay en el grid
  Campos  := 5;

  // Ancho de un campo 
  AnchoCampo := Form1.Canvas.TextWidth('El ancho de este string');

  // Establezco ancho de formulario
  Form1.Width := (Bordes * 2) + (AnchoCampo * Campos);
end;


La franja horaria es GMT +2. Ahora son las 04:12:48.

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