Dialog Editor ( Z - Achsen Anordnung )
-
Hallo,
und zwar hab ich folgendes Problem ( ist mir schon sehr lange aufgefallen aber wurde immer verdrängt
)
Wenn ich im Visual Studio 2010 im Dialog Editor arbeite und z.B. mehrere Labels übereinander lege dann wird es im Dialog Editor richtig dargesetellt. Aber sobald ich dann das Programm aufmache und testen will dann sind die ganzen Dialog Ebenen wie spiegelverkehrt ( Z-Achse ). Das heisst das Label Hintergrund verdeckt alles. Mit VC++6.0 habs ich nochmal probiert und da funktioniert es. Aber beim 2008 / 2010 nicht.
Ist das Problem bekannt oder kann man was dagegen tun?. Weil ist halt echt nervig und Zeitaufwändig wenn man sozusagen im blinden den Dialog gestalten muss
.
Die Tab / Focus Reihenfolge mit CTRL + D hab ich schon probiert aber ändert nichts.
Hoffe ihr könnt mir weiterhelfen
Gruss Pmb
-
1. Überlappende Controls benötigen WS_CLIPCHILDREN. Andernfalls hast Du eine "Lottoausgabe", das Ergebnis ist undefiniert und das ist auch so dokumentiert.
2. Disable die Controls, die Du nicht sehen willst, dann hast Du auch keine Probleme dieser Art.
-
Disablen funktioniert nicht. Das Steuerelement bleibt trotzdem im Hintergrund obwohl es im Dialog Editor im Vordergrund ist. Wie meinst du das mit WS_CLIPCHILDREN ? Ich habe halt in den Dialog Eigenschaften Clip Children auf TRUE gesetzt. Oder meinst du direkt im Code mit SetWindowPos mit &wndtop, &wndbottom etc. ?
Gruss Pmb
-
Gleich zwei Fehler in meinem Posting.
Irgendwiebin ich heuete nicht gut drauf. Sorry!1. Meinte ich WS_CLIPSIBLINGS
2. Meine ich nicht disable sondern verbergen ShowWindow(SW_HIDE)
-
Hallo Martin also die Property ClipSibling hab ich auf TRUE gesetzt.
Aber wegen dem SW_HIDE.. Bei normalen Steuerelementen funktioniert das schon aber
die Label sind ActiveX Steuerelemente ( MSFORMS 2.0 Label ). Wenn ich da drauf
zu greife mit GetDlgItem(IDC_LABEL1)->ShowWindow(SW_HIDE); dann steigt mir das Programm aus.
-
1. Warum benutzt Du Wndows Forms Labels?
2. Wenn es Window-Less ActiveX Controls sind, dann solltest Du diese entwederr in ein eigenes Fenster legen, das Du dann verbergen kannst oder die entsprechende ActiveX-Methode verwenden.
3. Wenn Sich diese ActiveX Labels überlappen dann muss es Chaos geben. Diese sind Windowless und nicht gegeneinander abgesichert durch Clipping DCs.Mit scheint Du solltest Dein Gesamtkonzept überdenken.
Warum musst Du denn soviele Controls gleich anzeigen?
Warum verwendest Du keine PropertySheets wenn es um soclh Funktionen geht?
-
Hallo Martin,
Ja schon aber das ist halt bissle schwierig bei mir. Es handelt sich um ca. 50 - 100 alte Programme wo noch aus früheren Zeiten stammen, wo ich updaten muss. Früher war das hier irgendwie ne gängige Methode, dass man die Form Labels nimmt, um z.B Hintergrundfarben zu ändern oder Bilder mit Text drauf anzeigen zu lassen z.B. für eine Gut / Schlecht Auswertung. So blöd es auch klingt :). Diese Programme werden jetzt halt nach und nach aufs neue 2010 er Studio umgestellt ( vom 6.0 ). Beim 6.0 war das früher so, dass man im Dialog Editor die Labels so übereinander anordnen konnte wie man wollte und Sie dann im Programm selber auch in dieser Reihenfolge auftauchten.
Aber ab Studio 2008 gabs halt wie du das so schön ausgedrückt hast "CHAOS". Und alle umzuschreiben, so dass die Hintergrundfarben einfach über den Dialog Hintergrund geändert werden oder die Labels durch ganz normale Static Text mit CFont geändert werden, würde einfach sehr lange dauern, weil auch immer alles noch über Variablen verknüpft ist. Habe halt gehofft,dass es da irgendwie eine einfache Möglichkeit gibt, aber wohl eher nicht. Weil das klingt schon plausibel was du geschrieben hast mit den Clipping DCs. Dann muss ich mal schauen wie ich das am besten hinbiegen kann
Danke trotzdem nochmal
Gruss Pmb
-
pmb schrieb:
Beim 6.0 war das früher so, dass man im Dialog Editor die Labels so übereinander anordnen konnte wie man wollte und Sie dann im Programm selber auch in dieser Reihenfolge auftauchten.
Da hat sich nichts, aber auch gar nichts geändert. Einzig relevant ist die Z-Ordser. Eine andere Reihenfolge gibt es nicht.
Und überlappende ActiveX Controls müssen schon immer zu Problemen führen.pmb schrieb:
Aber ab Studio 2008 gabs halt wie du das so schön ausgedrückt hast "CHAOS". Und alle umzuschreiben, so dass die Hintergrundfarben einfach über den Dialog Hintergrund geändert werden oder die Labels durch ganz normale Static Text mit CFont geändert werden, würde einfach sehr lange dauern, weil auch immer alles noch über Variablen verknüpft ist. Habe halt gehofft,dass es da irgendwie eine einfache Möglichkeit gibt, aber wohl eher nicht. Weil das klingt schon plausibel was du geschrieben hast mit den Clipping DCs. Dann muss ich mal schauen wie ich das am besten hinbiegen kann
Es gibt einen Bunch von CStatic Controls, die alles das könen ohne ActiveXe zu sein. Und das geht schneller und simpler.
siehe www.codeproject.com.