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