AW: Formulare in hohen DPI korrekt anzeigen
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. |
AW: Formulare in hohen DPI korrekt anzeigen
Ich merke gerade erst...
ich kann das mit den Labels nicht machen, da ich einen RadioButton verwende und kein Label. |
AW: Formulare in hohen DPI korrekt anzeigen
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 :thumb:
Delphi-Quellcode:
Erklärung:
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; 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. |
AW: Formulare in hohen DPI korrekt anzeigen
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. |
AW: Formulare in hohen DPI korrekt anzeigen
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; |
AW: Formulare in hohen DPI korrekt anzeigen
Das würde mich auch brennend interessieren, ob man ein Control, sagen wir mal ein Edit, mit Format() an eine gewisse Stelle packen kann.
|
AW: Formulare in hohen DPI korrekt anzeigen
Zitat:
Delphi-Quellcode:
Aber keine Ahnung ob es da was passendes gibt. Eine For-Schleife ist in dem Fall ja auch gut.
Format('%s.' + IntToStr(BlankCount), [' ']);
Edit: Der Format Befehl kann ja führende Nullen ausgeben, deshalb kam ich da drauf. |
AW: Formulare in hohen DPI korrekt anzeigen
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. |
AW: Formulare in hohen DPI korrekt anzeigen
Zitat:
Delphi-Quellcode:
, aber sicher, daß es nach dem "s" stehen soll?
Format('%s.*', [' ', BlankCount]);
Delphi-Quellcode:
:angle:
Format('%.*s', [BlankCount, ' ']);
Delphi-Quellcode:
Format('%1.2s', ['3']) = Format('%*.*s', [1, 2, '3'])
|
AW: Formulare in hohen DPI korrekt anzeigen
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:17 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