Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Frames deplaziert Elemente (https://www.delphipraxis.net/158831-frames-deplaziert-elemente.html)

cybersnacker 4. Mär 2011 16:20

Frames deplaziert Elemente
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Forum,

im Moment sitze ich daran, eine Software von Delphi 6 nach 2009 zu portieren. Einfache Sache dachte ich mir, doch seit geraumer Zeit werde ich von Delphi 2009 vorgeführt. Folgendes Szenario:

Die Software ist für ihre Benutzer in einzelne Ansichten zur Usability designed worden und jene Ansichten wurden auf Basis von Frames modelliert. Das Hauptformular bekommt alle Frames im Status none-visible und none-enabled, über eine Methode kann man dann ein einzelnes Frame sichtbar schalten. Klappt unter Delphi 6 wunderbar und ist auch so schon länger im Einsatz.

Nun kommt es zur Portierung. Faktisch wurden alle Formulare genau nachempfunden, aber jedes mal wenn ich Delphi 2009 schliesse und wieder öffne, werden einzeln platzierte Elemente um ein paar Pixel verschoben. Absolut mysteriös. Ein paar genauere Stichpunkte kann ich dazu noch festhalten:

1. Im Optionenmenü unter VCL Designer ist die Rastergröße auf 4/4 gesetzt. Tatsächlich werden die Elemente um vier Pixel im vergleich zu ihrer ursprünglichen Position verschoben. Ein Verzicht auf die Designer-Richtlinien und der Funktion am Raster ausrichten hilft auch nicht weiter.

2. Richtet man von Hand alles aus und speichert sowie schliesst Delphi, so kann man in der dfm Datei die genwünschten Koordinerungen einsehen, passt also. Startet man Delphi erneut und öffnet das Frame, so bleiben die Werte im dfm auch original getreu, jedoch via ALT+F12 kann man schon wieder sehen, wie einzelne Elemente deplaziert wurden und tatsächlich ist es auch so im Formulardesigner.

3. Es ist egal, ob die Frames im Hauptformular eingebunden sind oder nicht. Er verschiebt mir meine Elemente immer. Da jedoch alle Frames vom Design her immer fast gleich aussehen, ergo gleiche Positionen zu einzelnen "gleichen" Elementen auf verschiedenen Frames, kann ich noch sagen, das er es nicht bei allen Frames macht. Nein, bei vier fast identisch aussehenden Frames gibt es eins, wo die Elemente passen, die übrigen drei weichen ab.

4. Es sind alle Updates installiert, sowie IDEFixPack und DDevExtensions. Keine Abhilfe. Das Netz scheint solch ein Problem auch nicht zu kennen (oder ich bin zu doof, passende Suchkriterien zu bestimmen).

5. Auf die passenden Attribute im Objekt Inspektor denke ich schon zu achten. So ist align immer alNone, Anchors sind passend gesetzt, alignWithMargins immer false sowie AutoSize false.

6. Elemente fixieren hilft mir auch nicht im Hauptformular und den dort eingeführten Frames weiter. Werden die Frames fixiert und somit deren untergeordneten Elemente, so sind sie beim nächsten Laden wieder frei bewegbar sowie deplaziert.

Es geht inzwischen echt an meine Substanz, einerseits denke ich, dass nach über 2 Jahren ich doch nicht der erste Mensch sein kann, dem dies passiert, aber warum finde ich dazu nichts im Netz. Ich glaube auch nicht, dass Delphi einen Automatismus integriert hat, um Elemente abweichend nach ihren Angaben aus der dfm zu plazieren, aber wenn doch, hinter welcher Option verbirgt sich denn dies? Und des Weiteren werden ja meisst die Fehler doch auf OSI Level 8 begonnen;) Rettet meine Haare:)

Ja viel Text um ein einziges Problem... Zum Nachvollziehen noch ein Archiv angehängt, in dem Frame Update01 passen die Elemente genau, bei dem Frame Update02 wird pnl_gridspace.width = 924 und height = 420 im Formulardesigner gesetzt sowie btn_abbrechen.top = 472. Dies halt abweichend zur dfm.

Irgend jemand eine Idee?

Gruss && schoenes WE

// Benno

RWarnecke 4. Mär 2011 17:49

AW: Frames deplaziert Elemente
 
Hallo Benno,

ich habe zwar keine Lösung. Aber ich habe lediglich nur das Frame Update2 in einem Delphi 2010 geöffnet und habe bei der Komponente pnl_gridspace die gleichen Abweichungen zwischen DFM-Datei und OI wie Du. Nur beim Button btn_abbrechen, wird alles korrekt angezeigt.

Hast Du mal die Frames neu erstellt und die Werte direkt in der DFM-Datei eingetragen ?

cybersnacker 4. Mär 2011 19:29

AW: Frames deplaziert Elemente
 
Zitat:

Zitat von RWarnecke (Beitrag 1085956)
Hast Du mal die Frames neu erstellt und die Werte direkt in der DFM-Datei eingetragen ?

danke Rolf für Deine Anregungen...

Jedoch drehe ich schon seit einigen Tagen an diesem Problem. Zuerst dachte ich es läge an dem vollzogenem C&P aus Delphi 6. Darauf hin habe ich jedoch die Frames alle neu per Hand erstellt, sowohl aus der IDE heraus als wie auch mal die dfm's zu Fuss editiert.

Es gibt hier bei mir noch etliche weitere Frames, wo einzelne Kontroll-Elemente abweichen.

Lustig ist auch die Beobachtung, verschiebt man die Werte entgegengesetzt der von Delphi vorgenommenen Änderung, so stehen die Elemente beim nächsten Laden an der richtigen Position, um bei darauffolgendem Öffnen des Projektes in der IDE wieder verschoben zu werden, bis es einer fiktiven Position Delphis genehm ist.

Sehr dubios...

Eine Idee ist mir eben noch kurz vor Feierabend ins Auge gestochen; anscheinend gibt es die Eigenschaften explizit(width|height|top|...) die Delphi für einige Controls in die dfm's unter Umständen einbaut. Vielleicht kann man damit was drehen.
Lässt sich von mir zuhause dank fehlendem Delphi und favorisierendem Lazarus über das WE nur nicht nachvollziehen.

Gruß

RWarnecke 4. Mär 2011 19:55

AW: Frames deplaziert Elemente
 
Zitat:

Zitat von cybersnacker (Beitrag 1085976)
Eine Idee ist mir eben noch kurz vor Feierabend ins Auge gestochen; anscheinend gibt es die Eigenschaften explizit(width|height|top|...) die Delphi für einige Controls in die dfm's unter Umständen einbaut.

Hallo Benno,

was mir noch aufgefallen ist, bei der Komponente pnl_gridspace benutzt Du Anchors innerhalb eines Panels, könnte das eventuell auch noch ein Grund sein ? Ich habe ein ähnliches Problem in einem Programm, dass im Designer die Komponenten nicht richtig dargestellt werden und im Programm aber richtig dargestellt werden. Wie sieht das ganze denn aus, wenn Du das Programm anzeigen lässt ?

stahli 4. Mär 2011 20:03

AW: Frames deplaziert Elemente
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe die Frames mal mit D2009 geöffnet und nichts ungewöhnliches festgestellt.
Eigentlich hätte sich doch auch Dein D6er Projekt mit 2009 grundsätzlich öffnen und bearbeiten lassen müssen...!?

Vielleicht passt mit Deiner D2009-Installation etwas nicht?

RWarnecke 4. Mär 2011 20:06

AW: Frames deplaziert Elemente
 
Hallo Stahli,

hast Du die Werte aus dem OI mit den Werten in der DFM-Datei verglichen, mal ganz doof gefragt ? :duck:

stahli 4. Mär 2011 20:33

AW: Frames deplaziert Elemente
 
Aha, anscheinend macht die Nutzung komplexer (verschachtelter) Anchors Probleme.
Genauer habe ich das aber nicht untersucht (keine Zeit).

Evtl. wäre alClient/alTop mit AlignWithMargins unproblematischer.

cybersnacker 7. Mär 2011 13:59

AW: Frames deplaziert Elemente
 
Hallo,

Wochenende wieder vorbei und weiter mit diesem Thema, zumindest für mich;)

Gut, mit den Aussagen Eurerseits schliesse ich hiermit einen Anwendungsfehler meinerseits aus (und ja, auch bei laufender Anwendung werden die Kontrollelemente alle delpaziert) und muss mir jetzt einen alternativen Weg zur Anzeige von Formularen machen.

Der Tipp von Stahli ist da schon einmal wertvoll: AlignWithMargins. Wird gleich ausprobiert.

Aber was gibt es in der Welt der Delphi-Entwicklung denn sonst noch an gängigen Möglichkeiten, komplexe Formulare darzustellen. Designtechnisch widerstrebe ich ein wenig, alles auf Panels zu entwerfen, um diese sichtbar/ausgeblendet zu schalten oder auch mit normalen Forms, um bei einem Wechsel zum nächsten die Position zu übermitteln und hide/show...?


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:03 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