AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Komponente erstellen: Left und Top festlegen?

Ein Thema von Martin K · begonnen am 21. Jun 2006 · letzter Beitrag vom 23. Jun 2006
Antwort Antwort
Seite 1 von 2  1 2   
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#1

Komponente erstellen: Left und Top festlegen?

  Alt 21. Jun 2006, 23:11
Hi,
der Titel sagt alles:

Wenn ich eine Komponente erstelle und versuche im Constructor Left und Top auf fest Werte zu stellen,
so funzt dies zwar, aber wenn ich die Komponente dann auf die Form ziehe, ist sie an der Position, wo ich auf die Form hingeklickt habe.

Wie kann ich dies ändern?

Danke schonmal, für eure Antworten...
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.859 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Komponente erstellen: Left und Top festlegen?

  Alt 21. Jun 2006, 23:14
Die persistenten werte werden nach dem Konstruktor geladen, du mußt .Loaded überladen.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Komponente erstellen: Left und Top festlegen?

  Alt 21. Jun 2006, 23:22
Hm...

Das funktioniert zwar, aber nicht so wie es soll:
Left und Top werden dann erst zur Laufzeit auf die gewünschte Position gesetzt, es soll aber schon so sein,
wenn die Komponente zur Designzeit auf die Form gezogen wird....
Ist das möglich?
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.859 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Komponente erstellen: Left und Top festlegen?

  Alt 21. Jun 2006, 23:24
Das geht so nicht. Aus meiner Sicht ist das auch nicht sinnvoll, dan bräuchte man ja kein Designer innerhalb der IDE.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

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

Re: Komponente erstellen: Left und Top festlegen?

  Alt 21. Jun 2006, 23:28
wenn du nicht willst das die position der Komponente geändert wird überschreibe die Methode SetBounds und korrigiere die neuen Left-Top werte zu den alten.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Komponente erstellen: Left und Top festlegen?

  Alt 21. Jun 2006, 23:33
Und wenn eine Kompo immer an eine bestimmte Stelle soll (z.B. oben links) ?
//Edit: Nur ganz am Anfang - danach soll die Position verändert werden können

Am besten wäre es, wenn die Kompo nur beim Ziehen auf die Form (bzw. wenn die Compo neu erstellt wird) an diese bestimmte Stelle kommt.
Dann kann man sie meinetwegen verschieben wie man will und dort bleibt sie dann auch.

Also:
Die Position soll man schon ändern können nur soll es eben ganz am Anfang eine festgelegte Position sein!
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

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

Re: Komponente erstellen: Left und Top festlegen?

  Alt 21. Jun 2006, 23:39
dann gäbe es die Möglichkeit das du im Constructor die aktuelle Zeit nimmst und innerhalb von einer bestimmten zeit kein verschieben zulässt. Was natürlich schief geht wenn man das Projekt dann lädt. Ob das ganze überhaupt sinnvoll ist wage ich für meinen Teil zu bezweifeln.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Komponente erstellen: Left und Top festlegen?

  Alt 22. Jun 2006, 02:03
Moin Martin,

versuch' es mal mit dem Überschreiben von CreateWnd.
Zum einen solltest Du die Änderung nur machen wenn csDesigning in ComponentState enthalten ist, ausserdem solltest Du diese Veränderung nur einmal zulassen (z.B. Flag setzen, dass die Position gesetzt wurde.)
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Rudy
Rudy

Registriert seit: 12. Jun 2006
7 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Komponente erstellen: Left und Top festlegen?

  Alt 22. Jun 2006, 02:14
Hallo Martin,
Zitat:
Wie kann ich dies ändern?
In diesen Fällen ist die SetParent-Methode nicht schlecht, sie wird nur aufgerufen, wenn der sich der Parent ändert - das macht auch die IDE wenn Du die Komponente hineinziehst. So z.B. legst Du Position x: 50 | y: 100 fest:

Delphi-Quellcode:
...
type
 TMyComponent = class(...
 ...
 protected
    procedure SetParent(AParent: TWinControl); override;
 ...

implementation
 ...

  procedure TMyComponent.SetParent(AParent: TWinControl);
  begin
    inherited;
    SetBounds(50, 100, Width, Height);
  end;

...
Schönen Gruß,
Rudy
Rudy
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#10

Re: Komponente erstellen: Left und Top festlegen?

  Alt 22. Jun 2006, 04:52
Echt erstaunlich, daß überhaupt ein Antwortversuch kommt. Denn es wurde nicht mal gesagt, von was die Komponente abgeleitet werden soll. 8) Befürchte es ist wieder mal TComponent oder Co. und insofern dann eigentlich für diese Zwecke nicht zu gebrauchen. Falls es aber eine existierende Komponente ist, die erweitert werden soll : nächstes Problem. Man müßte im Zweifelsfall schon den VCL-Code parat haben um beim Vorfahr nachzugucken, was aber wegen D7PE nicht gegeben ist. Ich gehe aber davon aus, daß dieser Code beim "Nachbar" jederzeit nachgeguckt oder kurzfristig "ausgeliehen" werden kann. Das Prinzip ist recht einfach : im Create der Komponente die property zuweisen. Left, Top usw. ABER ! Der alte Wert muß gelesen und der neue geschrieben werden. Deshalb braucht man Read und Write Methoden an der richtigen Stelle, die die Werte eben lesen oder auch schreiben.

Vor allem bei DB-Komponenten ist manchmal folgendes zu bemerken (falls Rechner sehr beschäftigt ist und die Komponente eine DB-Verbindung braucht) : zieht man die auf die Form, so hängt sie da kurz links oben in der Ecke und bewegt sich dann automatisch an die auf der Form angeklickte Stelle. Warum ? Die ist von Vorfahr abgeleitet. Und diesem ist Left/Top egal. Er initialisiert sie allerdings schon, weil Left und Top schon bekannt sind und zwar auf 1,1. Die neue Komponente hat eben nur "inherited" aufgerufen. Nun werden von der abgeleiteten die Left/Top Werte ausgelesen und eigene Sachen initialisiert (auch Left/Top usw. auch). Und die kann man auch selber setzen ! Die Komponente ist dann an gewünschter Stelle. Im OI passiert übrigens genau dasselbe.
Gruß
Hansa
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 03:38 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