Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Boyutlandırma Sorunu
#1
Merhaba, 


Rectangle otomatik olarak nasıl boyutlandırırım?

Samsung A52 Test için Rectangle Height ve Width 50x50 yapınca göze normal geliyor. Fakat Samsung A05s test Rectangle Height ve Width 50x50 yapınca çok büyük görünüyor.
A05s gibi çözünürlüğü düşük telefonlarda yanyana birden fazla Rectangle kullanınca ekranda kötü görünecek.



Bu sorunu nasıl çözerim ustalarımın yardımını rica ederim.

procedure TFormMain.ResolutionSetting;
var
  ScreenService: IFMXScreenService;
  DPI: Single;
begin
  try
    if TPlatformServices.Current.SupportsPlatformService(IFMXScreenService, IInterface(ScreenService)) then
    begin
      DPI := ScreenService.GetScreenScale;
      case Round(DPI) of
        420 .. 479:
          begin
            RectangleSettings.Height := 50;
            RectangleSettings.Width := 50;
          end;
        480 .. 500:
          begin
            RectangleSettings.Height := 40;
            RectangleSettings.Width := 40;
          end;
        501 .. 600:
          begin
            RectangleSettings.Height := 30;
            RectangleSettings.Width := 30;
          end;
      end;
    end;
  except
    on E: Exception do
      LogError('Hata: ' + E.ClassName + ' - ' + E.Message);
  end;
end;
Cevapla
#2
(27-03-2025, Saat: 11:47)Coban Adlı Kullanıcıdan Alıntı: Merhaba, 


Rectangle otomatik olarak nasıl boyutlandırırım?

Samsung A52 Test için Rectangle Height ve Width 50x50 yapınca göze normal geliyor. Fakat Samsung A05s test Rectangle Height ve Width 50x50 yapınca çok büyük görünüyor.
A05s gibi çözünürlüğü düşük telefonlarda yanyana birden fazla Rectangle kullanınca ekranda kötü görünecek.



Bu sorunu nasıl çözerim ustalarımın yardımını rica ederim.

procedure TFormMain.ResolutionSetting;
var
  ScreenService: IFMXScreenService;
  DPI: Single;
begin
  try
    if TPlatformServices.Current.SupportsPlatformService(IFMXScreenService, IInterface(ScreenService)) then
    begin
      DPI := ScreenService.GetScreenScale;
      case Round(DPI) of
        420 .. 479:
          begin
            RectangleSettings.Height := 50;
            RectangleSettings.Width := 50;
          end;
        480 .. 500:
          begin
            RectangleSettings.Height := 40;
            RectangleSettings.Width := 40;
          end;
        501 .. 600:
          begin
            RectangleSettings.Height := 30;
            RectangleSettings.Width := 30;
          end;
      end;
    end;
  except
    on E: Exception do
      LogError('Hata: ' + E.ClassName + ' - ' + E.Message);
  end;
end;

Nesnelerin Properties lerinde en üstte yer alan "Align" seçeneğini "Client" yapmayı deneyin.
Cevapla
#3
(27-03-2025, Saat: 12:36)enigma Adlı Kullanıcıdan Alıntı:
(27-03-2025, Saat: 11:47)Coban Adlı Kullanıcıdan Alıntı: Merhaba, 


Rectangle otomatik olarak nasıl boyutlandırırım?

Samsung A52 Test için Rectangle Height ve Width 50x50 yapınca göze normal geliyor. Fakat Samsung A05s test Rectangle Height ve Width 50x50 yapınca çok büyük görünüyor.
A05s gibi çözünürlüğü düşük telefonlarda yanyana birden fazla Rectangle kullanınca ekranda kötü görünecek.



Bu sorunu nasıl çözerim ustalarımın yardımını rica ederim.

procedure TFormMain.ResolutionSetting;
var
  ScreenService: IFMXScreenService;
  DPI: Single;
begin
  try
    if TPlatformServices.Current.SupportsPlatformService(IFMXScreenService, IInterface(ScreenService)) then
    begin
      DPI := ScreenService.GetScreenScale;
      case Round(DPI) of
        420 .. 479:
          begin
            RectangleSettings.Height := 50;
            RectangleSettings.Width := 50;
          end;
        480 .. 500:
          begin
            RectangleSettings.Height := 40;
            RectangleSettings.Width := 40;
          end;
        501 .. 600:
          begin
            RectangleSettings.Height := 30;
            RectangleSettings.Width := 30;
          end;
      end;
    end;
  except
    on E: Exception do
      LogError('Hata: ' + E.ClassName + ' - ' + E.Message);
  end;
end;

Nesnelerin Properties lerinde en üstte yer alan "Align" seçeneğini "Client" yapmayı deneyin.




@enigma Öneri için teşekkür ederim.
Olmayacağını bilmeme rağmen denedim ve olmadı. Telefonun çözünürlüğüne göre TRectangle Width ve Height otomatik olarak ayarlanmasını istiyorum.




var
SizeWiHi: Integer;// Global

procedure TFormMain.ResolutionSetting;
var
  DPI: Single;
  ScreenService: IFMXScreenService;
begin
  try
    SizeWiHi := 50;  // Starndart
    if TPlatformServices.Current.SupportsPlatformService(IFMXScreenService, IInterface(ScreenService)) then
    begin
      DPI := ScreenService.GetScreenScale;
      case Round(DPI) of
        420 .. 479:
          begin
            SizeWiHi := 50;
          end;
        480 .. 500:
          begin
            SizeWiHi := 45;
          end;
        501 .. 600:
          begin
            SizeWiHi := 40;
          end;
      end;
    end;
  except
    on E: Exception do
      LogError('Hata: ' + E.ClassName + ' - ' + E.Message);
  end;
end;

for var IText := 1 to Length(Titles) do
        begin
          ExtRectangle := TRectangle.Create(NewLayout);
          ExtRectangle.Width := SizeWiHi;
          ExtRectangle.Height := SizeWiHi;
Cevapla
#4
procedure TForm1.Button1Click(Sender: TObject);
begin
 With TRectangle.Create(Layout1) do
 begin
   Align := TAlignLayout.Top;
   Fill.Color := $FF78B6D6;
   Margins.Left := 10;
   Margins.Top := 4;
   Margins.Right := 10;
   Margins.Bottom := 4;
   Parent := Layout1;
 end;

end;

   
Begin : = end / 2;
Cevapla
#5
Eskiden benzer bir konuya yazdığım ScaledLayout ilgili cevabı bu linkten incelemek isteyebilirsiniz.
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif
Cevapla
#6
Merhaba,

Bu konuda çok çeşitli yollar mevcut. Bunlardan bir tanesi ScaledLayout kullanmak ve her bileşeni ScaledLayout içerisinde hizalamak. Gerisini bileşen halledecektir. Fakat alternatiflerden bir tanesi ise Layout bileşeninin scale özelliğinden faydalanmak ;

- Ekrana bir adet TLayout bileşeni ekleyin.
- Align özelliğini Client yapın.
- Tüm tasarımlarınızı TLayout bileşeni içerisinde gerçekleştirin.
- FormResize kısmına aşağıdaki kodları ekleyin ve kendi istediğiniz boyutta şekillendirin.

   

procedure TForm1.FormResize(Sender: TObject);
var
 wd: integer;
begin
 wd := Self.Width;
 case wd of
   0 .. 700:
     begin
       Layout1.Scale.X := 1;
       Layout1.Scale.Y := 1;
     end;
   701 .. 1200:
     begin
       Layout1.Scale.X := 1.4;
       Layout1.Scale.Y := 1.4;
     end;
   1201 .. 1920:
     begin
       Layout1.Scale.X := 1.8;
       Layout1.Scale.Y := 1.8;
     end;
 else
   begin
     Layout1.Scale.X := 1;
     Layout1.Scale.Y := 1;
   end;
 end;
end;

Alternatif :
- Ekrana TScaledLayout ekleyin.
- Align özelliğini önce Client sonra Fit yapın.
- İçerisinde istediğiniz arayüz tasarımını gerçekleştirin.
- Test edin.
Serhat YANALAK - FMX Software Developer
Cevapla
#7
Emeği gecen herkese teşekkür ederim. Sorunu sanırım bu şeilde çödüm.

function TFormMain.CalculateBoxSize: Integer;
begin
  if LayoutUser.Width < 3000 then
    Result := 40
  else if LayoutUser.Width < 325 then
    Result := 45
  else
    Result := 50;

  // Minimum boyut sınırı
  Result := Max(Result, 35);
end;


 SizeWiHi := CalculateBoxSize;
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Tam ekran sorunu Altıner 31 1.686 25-01-2025, Saat: 16:29
Son Yorum: mrmarman
  FMX'de Proxy Kullanarak Web Sayfası Açma Sorunu Dmak42 1 175 29-12-2024, Saat: 12:47
Son Yorum: mrmarman
  IOS 17 Crash Sorunu Çözümü emrahozten 7 1.577 22-11-2024, Saat: 21:04
Son Yorum: mcuyan
  Klavye sorunu Mr.X 4 397 25-10-2024, Saat: 13:37
Son Yorum: Mr.X
  İç içe görsel bileşenlerde kaydırma çakışması sorunu çözümü (Listbox, scrollbox) Mr.X 1 259 11-08-2024, Saat: 19:53
Son Yorum: frmman



Konuyu Okuyanlar: 1 Ziyaretçi