AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Ausrichtung des Splitters unter Dot.Net

Ein Thema von Delbor · begonnen am 9. Dez 2006 · letzter Beitrag vom 12. Dez 2006
Antwort Antwort
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.186 Beiträge
 
Delphi 11 Alexandria
 
#1

Ausrichtung des Splitters unter Dot.Net

  Alt 9. Dez 2006, 11:27
Hi zusammen
Wie ich festgestellt habe, ist mein Problem uralt, wie dieser link beweist - gelöst scheint es für das DotNet-Framework 1.1 noch nicht zu sein( und wird es wohl auch nicht mehr).
Wie ich hier festgestellt habe, gäbe es sehr wohl eine Möglichkeit, unter BDS2006/Turbo Delphi-DotNet mit dem DotNet-Framework 2.0 zu arbeiten. Man müsste sich nur ganz sicher sein, dass keine Generics verwendet werden müssen.

Trotzdem noch mal kurz: das Problem ist ja, dass sich der Splitter in jedem Fall an Left (bzw. Top/Rigth oder Bottom) des Containers ausrichtet, statt, wie es der Delphi32-TSplitter tut, an der jeweiligen Position des nicht von weiteren Komponenten belegten Clientbereichs des Containers.

Hat irgendwer eine passable Lösung für dieses Problem bereit? Für allfällige Anregungen schon mal vielen Dank!

Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Ein uralter 'Zopf' - aber leider immer noch aktuell...

  Alt 9. Dez 2006, 12:04
Könntest du bitte den Titel ändern so das er aussagekräftig ist und man anhand des Titels weiß worum es geht? Danke!
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.186 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Ausrichtung des Splitters unter Dot.Net

  Alt 9. Dez 2006, 20:18
Hi zusammen
Inzwischen habe ich eine Antwort gefunden, die mir das Problem nicht löst, aber immerhin den Weg dazu aufzeigt.

Zum einen erstelle ich dynamisch Panels, auf denen ich ein oder mehrere RichTextBoxen ebenfalls dynamisch erstelle. Pro Panel entsteht so quasi eine "Tabellenzeile". Zwischen zwei so generierten Panels erzeuge ich jeweils einen Splitter, um die Höhe der Panels (und der Edits) zur Laufzeit ändern zu können. Dabei gilt folgendes: zuerst wird das Panel und die Edits erstellt, und erst danach der Splitter. Der soll zwar Top andocken, aber nicht im absoluten Top des Containers, sondern im ContainerTop plus der Höhe des erzeugten Panels. (Was er nicht tut).

Ähnliches habe ich per Drag&Drop zur Designzeit gemacht: zwei Panels auf der Form, getrennt durch einen Splitter. Wird dieser angelegt, klebt er sich erst mal Left an den Container, egal, ob da schon was ist oder nicht.
Lösung: rechte Maustaste > 'nach hinten setzen'.
Per Code müsste hier die Z-Order des Elements/der Elemente festgelegt werden. Nur - das einzige, was ich dazu fand, stammt aus der Win-API, was unter DotNet doch ziemlich daneben ist.

Weiss jemand, wie sich die Z-Ordnung unter DotNet beeinflussen lässt? Für eure Antworten schon mal fielen Dank!

Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#4

Re: Ausrichtung des Splitters unter Dot.Net

  Alt 9. Dez 2006, 21:01
Zitat von Delbor:
Weiss jemand, wie sich die Z-Ordnung unter DotNet beeinflussen lässt?
Ein Control wird immer"obendrauf" eingefügt. Dadurch landet es auch ganz oben wenn alle Controls DockStyle.Top haben.
Du kannst ein Control nach vorne oder hinten holen, indem du BringToFront oder SendToBack aufrufst.

btw: Hier im Forum suchenDockStyle

btw2:
Zitat von Delbor:
Wie ich festgestellt habe, ist mein Problem uralt, wie dieser link beweist - gelöst scheint es für das DotNet-Framework 1.1 noch nicht zu sein( und wird es wohl auch nicht mehr).
Das hängt aber nicht mit dem Problem zusammen, sondern vielmehr mit dem Autor des Threads. Bei dem antworte ich höchstens aus Versehen.
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.186 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Ausrichtung des Splitters unter Dot.Net

  Alt 12. Dez 2006, 13:39
Hi zusammen

@ Elvis: Dein Hinweis hat mir sehr geholfen! Danke! Nun sieht die Sache wie folgt aus:
Delphi-Quellcode:
procedure TWinForm.MenItemFourCells_Click(sender: System.Object; e: System.EventArgs);
   var Pnl : System.Windows.Forms.Panel; RTFEdit: System.Windows.Forms.RichTextBox;SPL:System.Windows.Forms.Splitter;
       i: integer;
begin
   Pnl := PanelCreate(Pnl);
   Pnl.BringToFront;
   CreateHSplitter(SPL);
   SPL.BringToFront;
Damit wird bei jedem Proceduraufruf ein Panel erzeugt, an dessen unterem Rand aussen ein horizontaler Splitter klebt.Eine Besonderheit gibt's dabei allerdings: das oder die Panel(s) lassen sich zur Laufzeit nur so lange vergrössern, bis der unterste Rand den bei Dockpadding festgelegten Wert erreicht haben. Erstelle ich zur Laufzeit mehr Panels, als im Clientbereich angezeigt werden können, werden die Scrollbars aktiviert, und ich kann ohne Probleme scrollen - nur die Splitter funktionieren nicht mehr; das heisst, ich kann die Hoehe der Panels nicht mal mehr verkleinern.
Das aber eigentlich mehr so am Rande.
Vielmehr erstaunt mich nun folgendes:
Delphi-Quellcode:
      case i of
      1: begin
            ...........
            RTFEdit.Anchor := AnchorStyles.Top or AnchorStyles.Left or AnchorStyles.Bottom;;
            Pnl.Controls.Add(RTFEdit);
            RTFEdit.BringToFront; //
            CreateVSplitter(SPL);
            Pnl.Controls.Add(SPL);
            SPL.BringToFront; // //
         end;
in solchen Anweisungsblöcken erstelle ich pro Panel bis zu 4 RichEdits. Da ich jetzt auch gerne die Länge der einzelnen Edits zur Laufzeit ändern können möchte, füge ich auch hier Splitter dazu. Und zwar sollte der Spitter jeweils am zuletzt erstellten Edit kleben. Das tun die 'lieben Splitterchen' aber beileibe nicht. Stattdessen kleben sie Left am Panel, schön aufgereiht wie eine Perlenschnur. Und zwar hinter oder vor den Edits, je nachdem, ob ich einen oder beide der oben gezeigten 'BringtoFront'-Aufrufe ausklammere oder nicht

Da lob ich mir doch das gute alte Clientsystem von Borland!

Weiss jemand eine Antwort auf dieses merkwürdig Verhalten?
Zitat:
Ein Control wird immer"obendrauf" eingefügt. Dadurch landet es auch ganz oben wenn alle Controls DockStyle.Top haben.
Ich habe versuchsweise auch alle BringtoFront-Aufrufe durch SendoBack ersetzt - mit dem selben Effekt: alle Splitter kleben ganz links am Container, nur das sie jetzt unter den Edits angeordnet sind.

Für eure Antworten schon mal vielen Dank!

Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:00 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