Autor Beitrag
Tilman
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1405
Erhaltene Danke: 51

Win 7, Android
Turbo Delphi, Eclipse
BeitragVerfasst: Fr 15.08.08 15:03 
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:

ausblenden 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);

 (* width := 200;
  height := 200;    *)


  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.
Einloggen, um Attachments anzusehen!
_________________
Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)
Tilman Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1405
Erhaltene Danke: 51

Win 7, Android
Turbo Delphi, Eclipse
BeitragVerfasst: Fr 15.08.08 16:07 
Naja, auch wenn mich nach wie vor das WARUM interessieren würde, habe ich jetzt zumindest eine Lösung gefunden:

- Habe Resize überschrieben, und gebe hier dem Button die Position. Anchors wird nicht mehr verwendet. Dies alleine löst das problem zwar noch nicht, aber:
- Habe ausserdem VisibleChanging überschrieben (brauchte ich eh wegen self.bringtofront) und rufe hier noch zusätzlich Resize auf. Dadurch ist gewährleistet dass meine Komponente korrekt auuschaut wenn sie zur Entwurfszeit visible=false ist und dann zur Laufzeit sichtbar wird.

_________________
Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)