AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Formulare in hohen DPI korrekt anzeigen
Thema durchsuchen
Ansicht
Themen-Optionen

Formulare in hohen DPI korrekt anzeigen

Ein Thema von Jim Carrey · begonnen am 19. Okt 2016 · letzter Beitrag vom 21. Okt 2016
Antwort Antwort
Seite 2 von 3     12 3      
Jim Carrey
(Gast)

n/a Beiträge
 
#11

AW: Formulare in hohen DPI korrekt anzeigen

  Alt 19. Okt 2016, 19:22
Ich werde das gleich in jedem Fall mal ausprobieren.
Dann habe ich zwar statt einem Label 2 + ein Panel, aber das ist es mir wert.

Ich gebe dann gleich Bescheid was draus geworden ist.
  Mit Zitat antworten Zitat
Jim Carrey
(Gast)

n/a Beiträge
 
#12

AW: Formulare in hohen DPI korrekt anzeigen

  Alt 19. Okt 2016, 20:15
Ich merke gerade erst...
ich kann das mit den Labels nicht machen, da ich einen RadioButton verwende und kein Label.
  Mit Zitat antworten Zitat
Jim Carrey
(Gast)

n/a Beiträge
 
#13

AW: Formulare in hohen DPI korrekt anzeigen

  Alt 20. Okt 2016, 15:52
Ich habe mir jetzt eine Funktion geschrieben, welche für mich die Arbeit mit dem Leerzeichen-Problem übernimmt.

Zur Erinnerung mein Aufbau:
[RadioButton_mit_einem___(EDIT_FELD)__ganz_langem_T ext]

Ihr dürft mich später erschlagen für meine Dummheit
Delphi-Quellcode:
function calcSpacesNeeded(aEdit: TEdit): string;
var
 iEditWidth, iTmpWidth: Integer;
 i: Integer;
 s: string;
begin
 s := '';
 iEditWidth := aEdit.Width;

 for i := 0 to iEditWidth do
  begin
   s := s + ' ';

   iTmpWidth := Form3.Canvas.TextWidth(s);

   if iTmpWidth >= iEditWidth then
    begin
     s := s + ' ';
     Break;
    end;
  end;

 Result := s;
end;

RadioButton1.Caption := 'Radiobutton mit einem ' + calcSpacesNeeded(Edit1) + ' ganz langem Text';
Edit1.Left := 123;
Erklärung:
mein Code geht in einer for-Schleife von 0 bis "Width des Edits" in Pixeln durch.
Bei jedem Durchgang wird die aktuelle Width der Variablen "s" geprüft. Ist sie kleiner als die des Edits, so wird der Variablen "s" ein Leerzeichen angefügt.
Sobald Width des Konstrukts der Variablen "s" größer oder gleich der des Edits ist, ist Schluss. Vorher werden der Variablen "s" aber noch 8 weitere Leerzeichen angefügt (hat bei mir einen Sinn, da ich meine Edits modifiziere).

Das klappt bei 96 DPI und 120 dpi perfekt.
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.610 Beiträge
 
Delphi 10.3 Rio
 
#14

AW: Formulare in hohen DPI korrekt anzeigen

  Alt 20. Okt 2016, 15:56
Ich würde keine Schleife zum Überprüfen machen. Ich würde mir einmal die Breite des Leerzeichens auf dem speziellen Canvas merken und dann die Größe des Editfeldes durch die Breite des Leerzeichens teilen. Somit bekommst du die Anzahl der Leerzeichen (plus eventuell noch 2 für einen Freiraum rechts und links vom Edit) und brauchst dann nur noch eine Schleife um die Anzahl der Leerzeichen zu erzeugen.

Ob es mit dem Format Befehl auch geht weiß ich nicht genau. Könntest du aber mal ausprobieren.

Vorteil dieser Methode ist, dass du nicht jedes Mal wieder die Breite auf dem Canvas überprüfen musst. Die ändert sich nämlich nicht mehr.
  Mit Zitat antworten Zitat
Jim Carrey
(Gast)

n/a Beiträge
 
#15

AW: Formulare in hohen DPI korrekt anzeigen

  Alt 20. Okt 2016, 16:01
Gute Idee, Danke dir =)

Delphi-Quellcode:
function calcSpacesNeeded(aControl: TControl): string;
var
 i, iTmpWidth, iSpaceWidth: Integer;
 sTmp: string;
 Canvas: TCanvas;
begin
 Canvas := TCanvas.Create;

 try
  Canvas.Handle := GetDC(0);

  try
   Canvas.Font := MainForm.Font;
   iSpaceWidth := Canvas.TextWidth(' ');
  finally
   ReleaseDC(0, Canvas.Handle);
  end;
 finally
  Canvas.Free;
 end;

 sTmp := '';
 iTmpWidth := aControl.Width div iSpaceWidth;

 for i := 0 to iTmpWidth do
  begin
   sTmp := sTmp + ' ';
  end;

 sTmp := sTmp + ' '; // 8 Leerzeichen, <Delphi> zeigt aber nur 1 an
 Result := sTmp;
end;

Geändert von Jim Carrey (20. Okt 2016 um 16:07 Uhr)
  Mit Zitat antworten Zitat
Jim Carrey
(Gast)

n/a Beiträge
 
#16

AW: Formulare in hohen DPI korrekt anzeigen

  Alt 20. Okt 2016, 16:33
Das würde mich auch brennend interessieren, ob man ein Control, sagen wir mal ein Edit, mit Format() an eine gewisse Stelle packen kann.
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.610 Beiträge
 
Delphi 10.3 Rio
 
#17

AW: Formulare in hohen DPI korrekt anzeigen

  Alt 20. Okt 2016, 16:56
Das würde mich auch brennend interessieren, ob man ein Control, sagen wir mal ein Edit, mit Format() an eine gewisse Stelle packen kann.
Nein, das bestimmt nicht. Der Format Befehl ist dazu da, einen String entsprechend dem Wunsch zu formatieren und zurückzugeben. Ich dachte mit mit dem Format Befehl nur, dass der so in etwas aussehen könnte.

Format('%s.' + IntToStr(BlankCount), [' ']); Aber keine Ahnung ob es da was passendes gibt. Eine For-Schleife ist in dem Fall ja auch gut.

Edit: Der Format Befehl kann ja führende Nullen ausgeben, deshalb kam ich da drauf.
  Mit Zitat antworten Zitat
Jim Carrey
(Gast)

n/a Beiträge
 
#18

AW: Formulare in hohen DPI korrekt anzeigen

  Alt 20. Okt 2016, 17:16
Ach so ok. Ja stimmt. Wäre auch zu schön gewesen, wenn es das geben würde. Wäre aber auch irgendwie idiotisch.

Habe mir das jedenfalls selber gebastelt. Ich muss zwar zwischen Label (ComboBox/RadioButton) und Edit unterscheiden, aber das macht mir nix.
Soweit ich das jetzt beurteilen kann, funktioniert es einwandfrei mit jeglicher DPI.

Vor dieser Aufgabe habe ich mich immer gescheut aber nun mache ich es, da immer mehr Anwender meiner Software hohe DPI-Einstellungen haben. Warum auch immer zum Teufel man das macht.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.140 Beiträge
 
Delphi 12 Athens
 
#19

AW: Formulare in hohen DPI korrekt anzeigen

  Alt 20. Okt 2016, 17:23
Zitat:
Format('%s.' + IntToStr(BlankCount), [' ']);
Format('%s.*', [' ', BlankCount]); , aber sicher, daß es nach dem "s" stehen soll?


Format('%.*s', [BlankCount, ' ']);
Format('%1.2s', ['3']) = Format('%*.*s', [1, 2, '3'])
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Jim Carrey
(Gast)

n/a Beiträge
 
#20

AW: Formulare in hohen DPI korrekt anzeigen

  Alt 20. Okt 2016, 17:56
Zitat:
Format('%s.' + IntToStr(BlankCount), [' ']);
Format('%s.*', [' ', BlankCount]); , aber sicher, daß es nach dem "s" stehen soll?


Format('%.*s', [BlankCount, ' ']);
Format('%1.2s', ['3']) = Format('%*.*s', [1, 2, '3'])
Jezt verstehe ich gar nichts mehr
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:42 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz