Hallo,
Ich leite eine Komponente von tCustomPanel ab. Das Ziel ist ein untergeordnetes Formular, welches man mit der Maus bewegen kann, funktioniert auch soweit. Im Konstruktor wird ein Blaues tShape für die Titelleiste erzeugt sowie ein weißes welches einen Schließen-Button ("X") darstellen soll, sowie einige tLabel usw.
Jetzt zu dem Problem:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| constructor tWin31Form.Create(AOwner: TComponent); begin inherited Create(Aowner);
fButton := tShape.Create(self); fButton.Parent := self; fButton.Width := 17; fButton.Height := 16; fButton.Top := 2; fButton.Left := width-18; fButton.Anchors := [akTop,akRight]; fButton.OnMouseDown := btnMsDn; |
Also hier wird der "Button" (ein simples Shape) erzeugt. Es bekommt die relative Position, und per Anchors wird festgelegt das es sich immer richtig anordnet.
Problem: das ganze funktioniert nicht mehr, sobald ich eine Komponente vom Typ tMemo oder tTreeView zur Entwurfszeit darauf platziere! Platziere ich eine solche Komponente direkt auf dem Formular, und setzte parent := win31Form erst zur Laufzeit, gibt es kein Problem. Andere (Teils sehr ähnliche) Komponenten wie tEdit und tListView machen übrigens keine Probleme.
Das genaue problem sieht so aus: der "Button" vom typ TShape wird an die Stelle verschoben, welche korrekt gewesen wäre wenn die Komponenten-Größe nach dem ziehen aus der Palette nicht geändert worden wäre (hoffe verständlich). Also sprich wenn ich die Größe mit dem Formular-Designer ändere.
* Override hab ich angegeben
* Ableitung von tPanel --> exakt dasselbe
* Ableitung von tCustomControl/tWinControl: funktioniert nicht als Container, daher nicht praktikabel.
* ein zusätzliches Panel auf der Komponente platzieren, und das ListView dann darein: löst mein problem auch nicht.
* width und height in der Create-Mathode setzen: löst das Problem ebenfalls nicht.
Weiß jemand woran das liegt bzw. was ich falsch mache?
// edit
stimmt doch net so ganz: auch Memo, Listbox etc machen Probleme. Und zwar dann wenn Text in ihnen steht.