Recent

Author Topic: [Solved] Control positionning issue  (Read 638 times)

Philippe1

  • Newbie
  • Posts: 3
[Solved] Control positionning issue
« on: November 02, 2024, 06:51:52 pm »
Hello
I have Lazarus 3.6 on a Windows 11 64 bits PC.
I have an application that has curious behavior. I compile for Windows 32 bits and when distributing the installator (Inno Setup), on some computers, the Tcomboboxes don't keep the same place as assigned on the form (by code neither by anchor). Is it an issue somebody else had ?
Thanks
Philippe
« Last Edit: November 04, 2024, 10:10:58 am by Philippe1 »

TRon

  • Hero Member
  • *****
  • Posts: 3618
Re: Control positionning issue
« Reply #1 on: November 02, 2024, 07:54:38 pm »
Is this perhaps the same behaviour as described in this thread ?
This tagline is powered by AI

Philippe1

  • Newbie
  • Posts: 3
Re: Control positionning issue
« Reply #2 on: November 04, 2024, 10:08:13 am »
Hello,
This is an up for my post. I solved the issue by creating the 3 comboboxes at runtime.
Code: Pascal  [Select][+][-]
  1. unit Unit1;
  2.  
  3. {$mode objfpc}{$H+}
  4.  
  5. interface
  6.  
  7. uses
  8.  
  9.   {$IFDEF UNIX}
  10.   cthreads,clocale,
  11.   {$ENDIF}
  12.   interfaces, // this includes the LCL widgetset
  13.  
  14.   Windows, Classes, SysUtils, Forms, Controls, Graphics, Dialogs, IniFiles,
  15.   LCLTranslator, Graph, RegExpr, StdCtrls, ExtCtrls, MaskEdit, LCLType, LCLIntf,
  16.   Variants, Math, LR_Class, LR_PGrid, DBGrids, fpjson, JSONParser,
  17.   blcksock, FileUtil, unit2, Process, fphttpclient ;
  18.   //LR_Class, LR_DBSet, Grids, Variants, Math, GetText, LR_DSet, LR_Desgn;
  19.  
  20.   type
  21.  
  22.       TArrayStr = array of string;
  23.  
  24.      { TForm1 }
  25.  
  26.      TForm1 = class(TForm)
  27.             btnExit: TButton;
  28.             btnClear: TButton;
  29.             BtCalculate: TButton;
  30.             BtPrint: TButton;
  31. .../...
  32.             LbDelta: TLabel;
  33.             LbMTAccuracy: TLabel;
  34.             LbETAccuracy: TLabel;
  35.             LbSelectLanguage: TLabel;
  36.             procedure CbETAccuracyChange(Sender: TObject);
  37.             procedure CbLanguageChange(Sender: TObject);
  38.             procedure CbMTAccuracyChange(Sender: TObject);
  39.  .../...
  40.     private
  41.            CbLanguage: TCombobox;
  42.            CbETAccuracy: TComboBox;
  43.            CbMTAccuracy: TComboBox;
  44.            MaskEditArray: array[1..40] of TMaskEdit;  // Tableau de 40 TMaskEdit
  45.            procedure GenerateReport;
  46.     public
  47.     end;
  48.  
  49.  

Then
Code: Pascal  [Select][+][-]
  1. {Procedure of TForm}
  2.  
  3. procedure TForm1.FormCreate(Sender: TObject);
  4. var
  5.   i, index, intLine: Integer;
  6.   ScreenWidth, ScreenHeight: Integer;
  7.   OSInfo: TOSVersionInfo;
  8.   Labelx: array[1..10] of Tlabel;
  9.   bolOK: Boolean;
  10.  
  11. begin
  12.      DefaultFormatSettings.DecimalSeparator := '.';
  13.      OSInfo.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
  14.      if GetVersionEx(OSInfo) then
  15.        OSName := 'Windows'
  16.      else
  17.        OSName := 'Autre';
  18.     {
  19.     gd := Detect;
  20.     InitGraph(gd, gm, '');
  21.  
  22.     if GraphResult <> grOk then
  23.     begin
  24.          ShowMessage('Erreur d''initialisation graphique.');
  25.          halt(1);
  26.     end; }
  27.  
  28.     ScreenWidth := Screen.Width - 400;
  29.     ScreenHeight := Screen.Height - 100;
  30.     //width := GetMaxX + 1;
  31.     //height := GetMaxY + 1;
  32.     Form1.Width := ScreenWidth - 100;
  33.     Form1.Height := ScreenHeight - 100;
  34.  
  35. .../...
  36.  
  37.     // Créer l'instance de TComboBox
  38.     CbLanguage := TComboBox.Create(Form1);
  39.  
  40.     // Définir le parent pour qu'il soit visible
  41.     CbLanguage.Parent := Self;
  42.  
  43.      CbLanguage.Left := LbSelectLanguage.Left;
  44.      CbLanguage.Top := LbETAccuracy.Top;
  45.      CbLanguage.Width := LbSelectLanguage.Width;
  46.      CbLanguage.Clear;
  47.      CbLanguage.Items.Add('English');
  48.      CbLanguage.Items.Add('Français');
  49.      CbLanguage.Items.Add('Deutch');
  50.      CbLanguage.OnChange := @CbLanguageChange;
  51.  
  52.      strValeur := OpenReadInI('Parametres', 'Language', 'English');
  53.      case strValeur of
  54.           'English': begin
  55.                      lang := 'en';
  56.                      CbLanguage.ItemIndex:= 0;
  57.                      end;
  58.           'Français': begin
  59.                       lang := 'fr';
  60.                       CbLanguage.ItemIndex:= 1;
  61.                      end;
  62.           'Deutch': begin
  63.                     lang := 'de';
  64.                     CbLanguage.ItemIndex:= 2;
  65.                     end;
  66.      else
  67.          begin
  68.               lang := 'en';
  69.               CbLanguage.ItemIndex:= 0;
  70.          end;
  71.      end;
  72.      CbMTAccuracy := TComboBox.Create(Form1);
  73.  
  74.      // Définir le parent pour qu'il soit visible
  75.      CbMTAccuracy.Parent := Self;
  76.      CbMTAccuracy.Left := LbDelta.Left;
  77.      CbMTAccuracy.Top := LbMTAccuracy.Top;
  78.      CbMTAccuracy.Width := LbDelta.Width;
  79.      CbMTAccuracy.Clear;
  80.      CbMTAccuracy.Items.Add('1/100');
  81.      CbMTAccuracy.Items.Add('1/1000');
  82.      CbMTAccuracy.Items.Add('1/10000');
  83.      CbMTAccuracy.Items.Add('1/100000');
  84.      CbMTAccuracy.Items.Add('1/1000000');
  85.      strValeur := OpenReadInI('Parametres', 'MT_accuracy', '1/1000');
  86.      CbMTAccuracy.Text := strValeur;
  87.      case CbMTAccuracy.Text of
  88.            '1/100':
  89.              begin
  90.                strMaskMT := '!00:00:00.00;1;_';
  91.                MTPrecision := 2;
  92.              end;
  93.          '1/1000':
  94.              begin
  95.                strMaskMT := '!00:00:00.000;1;_';
  96.                MTPrecision := 3;
  97.              end;
  98.           '1/10000':
  99.              begin
  100.                strMaskMT := '!00:00:00.0000;1;_';
  101.                MTPrecision := 4;
  102.              end;
  103.           '1/100000':
  104.              begin
  105.                strMaskMT := '!00:00:00.00000;1;_';
  106.                MTPrecision := 5;
  107.              end;
  108.           '1/1000000':
  109.              begin
  110.                strMaskMT := '!00:00:00.000000;1;_';
  111.                MTPrecision := 6;
  112.              end;
  113.      end;
  114.      // Créer l'instance de TComboBox
  115.      CbETAccuracy := TComboBox.Create(Form1);
  116.  
  117.      // Définir le parent pour qu'il soit visible
  118.      CbETAccuracy.Parent := Self;
  119.      CbETAccuracy.Left := LbDelta.Left;
  120.      CbETAccuracy.Top := LbETAccuracy.Top;
  121.      CbETAccuracy.Width := LbDelta.Width;
  122.  
  123.      CbETAccuracy.Clear;
  124.      CbETAccuracy.Items.Add('1/1000');
  125.      CbETAccuracy.Items.Add('1/10000');
  126.      CbETAccuracy.Items.Add('1/100000');
  127.      CbETAccuracy.Items.Add('1/1000000');
  128.      strValeur := OpenReadInI('Parametres', 'ET_accuracy', '1/1000');
  129.      CbETAccuracy.Text := strValeur;
  130.      case CbETAccuracy.Text of
  131.           '1/1000':
  132.              begin
  133.                strMaskET := '!00:00:00.000:;1;_';
  134.                ETPrecision := 3;
  135.              end;
  136.           '1/10000':
  137.              begin
  138.                strMaskET := '!00:00:00.0000;1;_';
  139.                ETPrecision := 4;
  140.              end;
  141.           '1/100000':
  142.              begin
  143.                strMaskET := '!00:00:00.00000;1;_';
  144.                ETPrecision := 5;
  145.              end;
  146.           '1/1000000':
  147.              begin
  148.                strMaskET := '!00:00:00.000000;1;_';
  149.                ETPrecision := 6;
  150.              end;
  151.      end;
  152.  

I tested on several PCs with different screen resolution and it seems to be working.
There is definitely an issue when the controls are designed into the form.

Thanks for helping
Philippe    :)


 

TinyPortal © 2005-2018