![]() |
Delphi 11 (Patch 1) zerstört Formulare
Ich hab hier einen blöden Effekt, ich hab in meinen Formularen öfter
Button etc rechts-ausgerichtet, also Anchors = [akTop, akRight] wenn ich ein Formular aus Delphi 10.4 öffne, verschiebt mir Delphi 11 diese Elemente ganz weit nach rechts aus dem sichtbaren Bereich des Formulares raus. Also Hat der Button dann Left nicht mehr 800 bei einer Forumlarbreite von 850, sondern eben 3000 Kennt das Problem jemand? Ins Jira bei Embarcardero komm ich nicht mehr rein, mein Login funktioniert seit kurzem nicht mehr. Ich finde da auch keine Kontaktseite, wo man sich mal hinwenden könnte. |
AW: Delphi 11 zerstört Formulare
Ich glaub ich habs gefunden, wenn in den Formularen die Eigenschaft "Scaled" auf False steht, dann passiert sowas.
|
AW: Delphi 11 zerstört Formulare
Zitat:
Zitat:
Das Problem ist ein Fehler in der Captcha Überprüfung. |
AW: Delphi 11 zerstört Formulare
Zitat:
Na ich werde mal alle DFMs anpassen |
AW: Delphi 11 zerstört Formulare
Ja, ich habe das gleiche Problem - allerdings arbeite ich auf 125%, so dass die Aussage von Jaenicke bei mir wohl zutrifft. Ein Umstellen auf 100% hilft, ABER: da gibt es wohl noch mehr Probleme, denn "Scaled" macht auch, was es will, denn auch die Anpassung der Schriftgrössen und der dazu passenden Edit-Felder funktioniert nicht wirklich. HighDPI an oder aus ist da ziemlich egal.
Ich gehe jedenfalls mit Delphi 11 noch nicht produktiv und bleibe solange bei Delphi 10.4.2 bis es ein wirkliches Update gibt...Die Ansätze von Delphi 11 finde ich gut, aber unausgereift. Hartmut |
AW: Delphi 11 zerstört Formulare
Hast du das Patch für D11 installiert? Das Patch löst einige Probleme mit Skalierungen.
Ich habe heute wahrscheinlich zum ersten Mal in meinem Leben einen Button rechts ausgerichtet ;-) in D10.4, und dann mit Formular Scaled TRUE und FALSE gespeichert und in D11 (mit installiertem Patch) geladen. Bei meinem D11 ist der Button immer noch OK - ich habe mit diversen Windows Skalierungen getestet. Hast du D11 mal mit Parameter /highdpi:unaware gestartet? (Bei meinen Tests habe ich das nicht getan.) Fliegt dir der Forminhalt dann auch davon? Mich lässt man auch nicht mehr rein ins QP. Dabei wollte ich mich doch bessern und wieder Dinge melden. |
AW: Delphi 11 zerstört Formulare
Patch 1 ist installiert
/highdpi:unaware bringt auch nichts, auch nicht die Windows-Skalierung auf 100% stellen. Sofort wenn man die Unit öffnet, wird das Forumlar "umgebaut" |
AW: Delphi 11 (Patch 1) zerstört Formulare
Ich habe das gerade mein mit einem Formular getestet, das nur einen TButton mit Align alRight enthält.
Der Button wird sowohl bei Scaled=False/True immer korrekt rechts ausgerichtet. Aber bei Scaled=False ist die Größe des Formulars beim Ausführten immer 640 x 480. Bei Scaled=True wird die Größe des DFMs verwendet. |
AW: Delphi 11 (Patch 1) zerstört Formulare
Liste der Anhänge anzeigen (Anzahl: 1)
Hab mal eine Unit angehängt.
btClose steht auf Left 904, nach dem Öffnen sofort auf 1288 setzt man von Hand Scaled = True dann klappts |
AW: Delphi 11 (Patch 1) zerstört Formulare
Laut Beschreibung dachte ich, es geht um Align aber mit Anchors = [akTop, akRight] verhält es sich bei mir auch so.
Nach jedem Laden wird es erneut nach rechs verschoben. Das Form hat dann aber wieder die Größe von 640 x 480. |
AW: Delphi 11 (Patch 1) zerstört Formulare
Ich habe das Form hier in Delphi 11 (Patch 1) geöffnet und der Button steht auf Left = 904. Das Form hat Width = 1030.
Delphi 11 ist normal (also ohne /highdpi:unaware) gestartet und läuft auf einer Skalierung von 150%. Der Formular-Designer steht im High-DPI-Modus Automatisch. Zitat:
Ich wüsste nur gern, welche Kombination das auslöst. |
AW: Delphi 11 (Patch 1) zerstört Formulare
Ja ich meine natürlich Anchors = [akTop, akRight] :? hab heute früh wohl noch gepennt
Zitat:
Nur wenn ich Scaled auf true setzen und dann das Formular lade, funktioniert alle richtig. |
AW: Delphi 11 (Patch 1) zerstört Formulare
Ich habe gerade überprüft, ob die Dateien vom Patch1 auch kopiert wurden.
Das scheint zu stimmen. Allerdings hatte ich auch noch ältere Versionen in VirtualStore gefunden und gelöscht. Komischer Weise werden diese immer wieder dort erstellt??? C:\Users\...\AppData\Local\VirtualStore\Program Files (x86)\Embarcadero\Studio\22.0\bin\vcldesigner280.b pl C:\Users\...\AppData\Local\VirtualStore\Program Files (x86)\Embarcadero\Studio\22.0\bin\rtl280.bpl Diese sind identisch zu denen unter Programme (x86). |
AW: Delphi 11 (Patch 1) zerstört Formulare
Wenn ich das so lese scheint D11 sehr viel verschlimmbessert zu haben. :? :roll:
Ok ich verwende keine Formulare. Von daher erst mal für mich egal. |
AW: Delphi 11 (Patch 1) zerstört Formulare
Zitat:
|
AW: Delphi 11 (Patch 1) zerstört Formulare
Mit Anchors gab es schon immer Probleme.
Die Form wird schon beim Erstellen scaliert/beschnitten, danach kommen die Komponenten drauf und dann vergisst Delphi zu schaun ob die erstellte Größe der gewollten Größe entspricht. Eine Lösung war bisher: ein Panel hinter alles, mit Align=client, und da dann alles rein |
AW: Delphi 11 (Patch 1) zerstört Formulare
Zitat:
Wenn eins der wichtigsten Dinge zum erstellen von Formularen nicht funktioniert unabhängig vom High DPI. :pale: Sorry mußte mal gesagt werden. In meiner Engine war es das erste was ich in Angriff genommen habe. Zitat:
|
AW: Delphi 11 (Patch 1) zerstört Formulare
An HighDPI war damals noch nichtmal zu denken, als es damit anfing.
Alleine die unterschiedlich breiten Rahmen zwischen den unterschiedlichen Windowsversionen reichten schon aus. Später wurde dann zwar ClientHeight/ClientWidth anstatt Height/Width (inkl. Rahmen) gespeichert, aber nachdem man vor 'ner Weile da auch wieder dran rumfummelte und nun mal das Eine oder das Andere speichert, raucht es nun bei FormularVererbung wieder ab und die 2 fertigen extrem einfachen Zeilen Code, als Bugfix wurden abgelehnt, mit der Begründung, dass angeblich alles OK sei, |
AW: Delphi 11 zerstört Formulare
Zitat:
|
AW: Delphi 11 (Patch 1) zerstört Formulare
Zitat:
Ich habe deinen Tipp probiert. mit dem Panel und alles drauf. Geht hier nicht. Der Button wandert genau gleich. Bei meinem System (1920x1080, 125%) wandert der Button um eine Konstante [bei anderen % Werten ebenfalls um eine Konstante]. Bei meinem System und Svens Beispiel (siehe #9): 125%: Der Button wandert um 386 nach rechts 150%: Der Button wandert um 390 nach rechts 175%: Der Button wandert um 392 nach rechts Die Konstante ist nur abhängig von clientwidth. Die neue Position berechnet Delphi 11 (hier für: 1920x1080, 125%) Button.Left(neu) = Button.Left(alt) + (clientwidth-622) "Lösung": Bei meinem System gilt also: Setze clientwidth auf 622 und der Button läuft nicht davon ;-). Wenn ich alle TabSheets lösche, dann wandert der Button nicht. Ich nehme an, dass emba das rasch fixen kann. Faszinierend. |
AW: Delphi 11 (Patch 1) zerstört Formulare
Mal abgesehen von den aktuellen Problemen mit Delphi 11 muss ich doch mal eine Lanze brechen für die Anker im Allgemeinen. Der Aussage, dass diese grundsätzlich nicht funktionieren, muss ich nach meiner Erfahrung klar widersprechen. Ich finde es sogar mehr als angenehm, dass ich mich in Resize-Events nicht um solche Sachen kümmern muss. Alle Elemente, die rechts oder unten angetackert (verankert) sind, wandern da auch artig mit, wenn das Eltern-Element in seiner Größe verändert wird.
Ich will niucht ausschließen, dass es (jenseits von D11) Spezialfälle gibt, in denen die Anker nicht wollen - aber das wird die klare Minderheit der Anwendungsfälle sein. |
AW: Delphi 11 (Patch 1) zerstört Formulare
Ich möchte mich Daniel da anschließen. In der Regel funktionieren Anchor wie sie sollen. Bei D11 gibt es wegen des skalierenden Form-Designers noch Probleme. Wir gehen davon aus, dass diese mit dem Update 1 behoben sein werden.
Bei all den Problemen, die in diesem Forum sicher zu recht geschildert werden, muss man immer die große Masse an problemfreien Anwendungsfällen im Hinterkopf haben, die sich naturgemäß hier nicht zu Wort melden. |
AW: Delphi 11 (Patch 1) zerstört Formulare
Zitat:
Aber man sollte auch nicht alles schön Reden was nicht schön ist. Und wenn Anwender\Entwickler solche Fälle nicht melden würden, was würde dann überhaupt noch an Fehler behoben? Fakt ist jedoch das diese vorhanden sind. Die Leute hier fragen ja nicht danach oder Melden sowas aus Spaß an der Freud. Zitat:
Dafür wurden Anchors ja erfunden damit man es nicht selbst machen muß. Habe ich 100 Button auf der Form und setze diese alle Händisch bei jedem Resize, na dann viel Spaß dabei wenn man nicht selbst ein Anchor>Enum implementiert hat. Das macht aber unter Verwendung der VCL wenig sinn! |
AW: Delphi 11 (Patch 1) zerstört Formulare
So, danke an alle, alles schön analysiert. Aber wie melde ich das ganze jetzt? Ich komm ja nicht ins Jira?
|
AW: Delphi 11 (Patch 1) zerstört Formulare
Zitat:
Zitat:
Grundsätzlich finde ich diese Abschottung des QP eher suboptimal. Klar kann man damit Spam weitestgehend verhindern, aber aktuell verhindert man halt viel zu oft auch den bestimmungsgemäßen Gebrauch. |
AW: Delphi 11 (Patch 1) zerstört Formulare
ah jetzt geht's, Tatsache. Und.. wer hat hier keine Farbschwäche :lol: ich auch
![]() |
AW: Delphi 11 (Patch 1) zerstört Formulare
Zitat:
Ich gehe auf die Seite, bekomme das normale Login. Nach dem Abschicken bekomme ich "Sorry, your userid is required to answer a CAPTCHA question correctly." und das Captcha. Und dann bekomme ich die Meldung, dass die userid fehlen würde. Zitat:
|
AW: Delphi 11 (Patch 1) zerstört Formulare
Nach gefühlt 100 Anmeldeversuchen habe ich voten können.
|
AW: Delphi 11 (Patch 1) zerstört Formulare
Zitat:
|
AW: Delphi 11 (Patch 1) zerstört Formulare
Zitat:
Jetzt lese ich das hier, und versuche dahinzuspringen: Anmeldefehler. Was ist denn da wieder los ? |
AW: Delphi 11 (Patch 1) zerstört Formulare
Zitat:
|
AW: Delphi 11 (Patch 1) zerstört Formulare
Bei mir kommt jetzt, ich hätte keine Berechtigung zur Reportanzeige meiner Issues. Die würfeln dort.
|
AW: Delphi 11 (Patch 1) zerstört Formulare
Zitat:
So mache ich es. (Nicht für VCL gedacht) Für die die es Interessiert.
Delphi-Quellcode:
// Anchor ENUM-Callback-Funktion
function AnchorEnum(WinHandle: HWND; lp: lParam): HWND; stdcall; var pr: TRect; rc: TRect; pP: integer; X, Y, xW, yH: integer; begin if IsIconic(GetParent(WinHandle)) then begin // Stope Aufzaehlung Result := integer(False); Exit; end; pP := SkinEngine.AnchorItem(WinHandle); if pP > -1 then if gProp[pP].anchor > ANCHOR_NONE then begin GetClientRect(WinHandle, rc); GetClientRect(GetParent(WinHandle), pr); X := 0; Y := 0; xW := 0; yH := 0; case gProp[pP].anchor of ANCHOR_WIDTH: //= 1 begin X := gProp[pP].rc.Left; Y := gProp[pP].rc.Top; xW := MAX(pr.Right - gProp[pP].rc.Left - gProp[pP].rc.Right, 0); yH := rc.Bottom; end; ANCHOR_RIGHT: //= 2 begin X := pr.Right - rc.Right - gProp[pP].rc.Right; Y := gProp[pP].rc.Top; xW := rc.Right; yH := rc.Bottom; end; ANCHOR_CENTER_HORZ: //= 3 begin X := (pr.Right div 2) + gProp[pP].centerx; Y := gProp[pP].rc.Top; xW := rc.Right; yH := rc.Bottom; end; ANCHOR_HEIGHT: //= 4 begin X := gProp[pP].rc.Left; Y := gProp[pP].rc.Top; xW := rc.Right; yH := MAX(pr.Bottom - gProp[pP].rc.Top - gProp[pP].rc.Bottom, 0); end; ANCHOR_HEIGHT_WIDTH: //= 5 begin X := gProp[pP].rc.Left; Y := gProp[pP].rc.Top; xW := MAX(pr.Right - gProp[pP].rc.Left - gProp[pP].rc.Right, 0); yH := MAX(pr.Bottom - gProp[pP].rc.Top - gProp[pP].rc.Bottom, 0); end; ANCHOR_HEIGHT_RIGHT: //= 6 begin X := pr.Right - rc.Right - gProp[pP].rc.Right; Y := gProp[pP].rc.Top; xW := rc.Right; yH := MAX(pr.Bottom - gProp[pP].rc.Top - gProp[pP].rc.Bottom, 0); end; ANCHOR_BOTTOM: //= 7 begin X := gProp[pP].rc.Left; Y := pr.Bottom - gProp[pP].rc.Bottom - rc.Bottom; xW := rc.Right; yH := rc.Bottom; end; ANCHOR_BOTTOM_WIDTH: //= 8 begin X := gProp[pP].rc.Left; Y := pr.Bottom - gProp[pP].rc.Bottom - rc.Bottom; xW := MAX(pr.Right - gProp[pP].rc.Left - gProp[pP].rc.Right, 0); yH := rc.Bottom; end; ANCHOR_BOTTOM_RIGHT: //= 9 begin X := pr.Right - rc.Right - gProp[pP].rc.Right; Y := pr.Bottom - gProp[pP].rc.Bottom - rc.Bottom; xW := rc.Right; yH := rc.Bottom; end; ANCHOR_CENTER_HORZ_BOTTOM: //= 10 begin X := (pr.Right div 2) + gProp[pP].centerx; Y := pr.Bottom - gProp[pP].rc.Bottom - rc.Bottom; xW := rc.Right; yH := rc.Bottom; end; ANCHOR_CENTER_VERT: //= 11 begin X := gProp[pP].rc.Left; Y := (pr.Bottom - rc.Bottom) div 2; xW := rc.Right; yH := rc.Bottom; end; ANCHOR_CENTER_VERT_RIGHT: //= 12 begin X := pr.Right - rc.Right - gProp[pP].rc.Right; Y := (pr.Bottom - rc.Bottom) div 2; xW := rc.Right; yH := rc.Bottom; end; ANCHOR_CENTER: //= 13 begin X := (pr.Right div 2) + gProp[pP].centerx; Y := (pr.Bottom div 2) + gProp[pP].centery; xW := rc.Right; yH := rc.Bottom; end; end; if lp <> 0 then DeferWindowPos(lp, WinHandle, 0, X, Y, xW, yH, SWP_NOZORDER or SWP_NOREDRAW) else MoveWindow(WinHandle, X, Y, xW, yH, False); end; Result := integer(True); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:39 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz