Komponenten zur Laufzeit erzeugen und auf Form bewegen!?
Hallo Leute!
Ich würde mir gern ein kleines Tool schreiben, mit dem ich ähnlich wie im Delphi mir aus einer PageControl Komponenten auf ein Form ziehen kann und ihnen Scripte oder sonstige Jobs zuweisen kann. Die Idee verfolgt mich schon eine Weile und nun will ich sie angehen, habe aber keine Vorstellung davon, wie ich zumindest den ersten Teil davon realisieren könnte. Also ein PageControl zu erzeugen, mit einer Toolbar und ein paar Toolbuttons ist kein Problem. Auch dürfte es kein Problem sein nach Klich auf einen Button ein bestimmtes Control zu erzeugen. Aber wie ist es mit dem bewegen zur Lauzeit??? Gibts es sonst noch Hürden, die ich zu beachten hätte? ps.: Ich habe nicht vor Delphi neu zu erfinden! :-D |
Re: Komponenten zur Laufzeit erzeugen und auf Form bewegen!?
Du musst dafür sorgen das klicks etc nicht ausgeführt werden. Eine Möglichkeit wäre das Control in ein Panel zu stopfen und darüber ein transparentes TWinControl zu legen welches dann die Move, Click etc. messages abfängt und dann fürs verschieben verantwortlich ist. Die Anker zum Größe ändern und verschieben natürlich nicht vergessen
|
Re: Komponenten zur Laufzeit erzeugen und auf Form bewegen!?
Hallo Sir,
so etwas habe ich noch NIE gemacht, hast Du noch Zeit für etwas mehr an Informationen ??? Denn mit der Info ein transparentes TWinControl drüber zu legen, kann ich irgendwie nix anfangen. Ich habe auch noch nie einen Button erzeugt und dann die MouseMove und Click-Events in dieser Richtung ausgewertet. Gibt es irgendwelche BeispielCodes, damit man sich langsam "reinfühlen" kann? :pale: |
Re: Komponenten zur Laufzeit erzeugen und auf Form bewegen!?
hier am beispiel eines images:
Delphi-Quellcode:
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); const sc_dragmove = $f012; begin ReleaseCapture; TWinControl(Image1).perform(wm_syscommand,sc_dragmove, 0); end; |
Re: Komponenten zur Laufzeit erzeugen und auf Form bewegen!?
Ich habe die Suche nochmals bedient und bin fündig geworden!
Danke an alle, die gerade im Sprunge waren eine Antwort zu verfassen. Hier die 2 Links: Eine eine Lösung aus der Schweiz Und hier eine fertige Komponente :) |
Re: Komponenten zur Laufzeit erzeugen und auf Form bewegen!?
@Meflin: Von der Idee her ok aber TImage ist kein TWinControl... ich such mal schnell noch paar sourcen raus bzw. versuch was zusammenzubasteln
[Edit]War mal wieder zu langsam... Die Komponente scheint mir ganz ok zu sein, das vom Swissdelphicenter find ich ni so toll da man dies für jede Componente erstellen muss und die eventuell schon zugewiesenen onMouseDowns etc verloren gehen, was bei der Komponente nicht der Fall zu sein scheint[/Edit] |
Re: Komponenten zur Laufzeit erzeugen und auf Form bewegen!?
Hallo nochmals!
Die Komponente, welche ich im vorherigen Posting angegeben habe, ist wirklich Klasse. Mich interessiert jetzt aber noch, wie ich das Verschieben mit so einem Raster wie im Delphi realisieren kan, damit der User ein optisches und reales Hilfsmiteel zum verschieben und "Einrasten" hat. Soll ich das mit einem Hintergrundbild wie im Delphi machen? Aber wie kann ich dann ein solches Raster realisieren? |
Re: Komponenten zur Laufzeit erzeugen und auf Form bewegen!?
der Frage schliess ich mich an... hab zwar einen etwas abweichenderen Code, würde aber auch gerne wissen, wie ich das sog. "Snap-On-Grid" realisieren könnte :)
Delphi-Quellcode:
thx
ReleaseCapture;
TPanel(Sender).perform(WM_SysCommand, $F012, 0); tyler |
Re: Komponenten zur Laufzeit erzeugen und auf Form bewegen!?
@torud: Das raster bekommst du ganze einfach hinn indem du einfach im OnPaint die Punkte in einem gewissen abstand aufs Form malst.
|
Re: Komponenten zur Laufzeit erzeugen und auf Form bewegen!?
OK, das beantwortet die Frage, wie ich ein Raster zumindest gemahlt bekomme.Wie aber kann man denn dann die Komponenten an diesem "virtuellen" Raster "einrasten"?
Hm, !??? :roll: |
Re: Komponenten zur Laufzeit erzeugen und auf Form bewegen!?
Du musst die Position bzw Größe nachbearbeiten, indem du die Werte auf den vorherigen bzw. nächsten Grid-Punkt ausrichtest.
|
Re: Komponenten zur Laufzeit erzeugen und auf Form bewegen!?
:-D
und wie kann man(n) das realisieren? |
Re: Komponenten zur Laufzeit erzeugen und auf Form bewegen!?
Dazu musst du dir mal den QC von deiner Komponente angucken und dort, wo die Position gesetzt wird ungefähr folgendes einfügen:
Delphi-Quellcode:
GridWidth ist der Abstand deines Grids und IfThen ist der Unit Math
Pos.X := (Pos.X div GridWidth) + IfThen((Pos.X mod GridWidth) > (GridWidth div 2), 1);
Pos.Y := (Pos.Y div GridWidth) + IfThen((Pos.Y mod GridWidth) > (GridWidth div 2), 1); |
Re: Komponenten zur Laufzeit erzeugen und auf Form bewegen!?
Hi torud!
Hier hab' ich noch ein paar Links zu Form-Designer-Kompos, die Dich bestimmt interessieren (Zu finden bei Torry in "Components/Component Packs/Multi Purpose Lite"): - Extension Library V2.1 - ExtLib Design Time form editing engine V2.2 Und hier noch ein Link zu einem Proggi, das die o. g. Komponenten verwendet: Inno Setup Form Designer (ISFD) Im Download-Bereich findest Du auch den Sourcecode von einer Beta-Version... [Edit] Hab ich vergessen: Noch ein Link zu einem netten HowTo... "Resizing and Moving Controls at Run Time" Und noch was: "CompCtrl" von Udo Juerss. Eine non-visual Komponente, die es ermöglicht, Controls in der Größe zu verändern und zu verschieben (frei, mit Sourcecode). Download hier... So, das war's aber jetzt - glaub' ich :wink: - Viel Spaß damit! [/Edit] Vielleicht hilft Dir das Ganze ja ein wenig weiter. |
Re: Komponenten zur Laufzeit erzeugen und auf Form bewegen!?
Wenn es was kosten darf: Dream Company
|
Re: Komponenten zur Laufzeit erzeugen und auf Form bewegen!?
Zitat:
|
Re: Komponenten zur Laufzeit erzeugen und auf Form bewegen!?
Kennt sich jemand mit Dream aus?? Benutz das auf der Arbeit und hab ab und zu mal ein paar Probleme, aber da es nicht weit verbreitet ist, gibts hier in der DP wenig Chancen Hilfe zu finden.
|
Re: Komponenten zur Laufzeit erzeugen und auf Form bewegen!?
Zitat:
|
Re: Komponenten zur Laufzeit erzeugen und auf Form bewegen!?
Hab ich
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:15 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