![]() |
Wie bastelt man einen einfachen Formular-Editor?
Hello Leute,
ist es mit einem vertretbarem Aufwand möglich, einen kleinen Formular-Editor für den Anwender zu erstellen? Er soll bei weitem nicht den Funktionsumfang einer echten IDE haben, aber ich möchte "dem User" die Möglichkeit geben, die Größe der Form (das ist einfach) festzulegen und ihn dann beliebig Buttons und Labels darauf platzieren lassen. Dabei sollen die Buttons z.B. so ähnlich wie in der Delphi-IDE verschieb- und resizebar sein. Die weiteren Eigenschaften liessen sich ja dann über Dialoge (Aufruf via Kontextmenü) bearbeiten. Hat jemand nee Idee, oder nen Ansatzpunkt (oder nen Link für ne Lektüre) für sowas? Gruß Wormid |
Re: Wie bastelt man einen einfachen Formular-Editor?
Machbar wäre das.
Zum Verschieben könntest du OnMouseDown ein Flag setzen, dass nu verschoben werden soll. und dann on Mousemove Left und Top des Elements in Relation zur Mausbewegung ändern und OnMouseup das Flag wieder wegnehmen. Beim Resize ähnlich, nur müsstest du hier die genaue Position des Mousedown abfragen, weil das ja nur am äusseren Rand passieren soll. |
Re: Wie bastelt man einen einfachen Formular-Editor?
Moin Wormid,
nimm mal ein Formular, leg einen Button drauf und dann kommen in MouseDown, bzw. MouseUp des Button folgende Zeilen:
Delphi-Quellcode:
Jetzt drück mal die Linke Maustaste auf dem Button, und Beweg' die Maus.
procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); begin ReleaseCapture; SendMessage(Button1.Handle,WM_SYSCOMMAND,$F012,0); end; procedure TForm1.Button1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin SetCapture(self.Handle); end; Vielleicht kannst Du ja was damit anfangen. |
Re: Wie bastelt man einen einfachen Formular-Editor?
Das ist schonmal ziemlich gut! :thuimb:
Da werde ich mich dann mal ein bisschen ausführlicher mit auseinandersetzten. Gruß Wormid |
Re: Wie bastelt man einen einfachen Formular-Editor?
Oder ist es insgesamt vielleicht einfacher, das ganze z.B. per DrawFrameControl direkt auf das Canvas der Form zu zeichen? Also gar nicht erst Controls erstellen, sondern einfach nur Zeichnen.
Wäre das vielleicht einfacher? |
Re: Wie bastelt man einen einfachen Formular-Editor?
Zitat:
Bei mir führt er sie nicht aus! |
Re: Wie bastelt man einen einfachen Formular-Editor?
Moin Citybreaker,
das war nur eine Idee. Ob die für jetzt wirklich für einen Formular-Editor geeignet ist, hab' ich nicht weiter getestet. Workaround: [CTRL]+Linke Maustaste = Designmode
Delphi-Quellcode:
procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); begin if not (ssCtrl in Shift) then exit; ReleaseCapture; SendMessage(Button1.Handle,WM_SYSCOMMAND,$f012,0); end; procedure TForm1.Button1Click(Sender: TObject); begin ShowMessage('CLICK'); end; |
Re: Wie bastelt man einen einfachen Formular-Editor?
Liste der Anhänge anzeigen (Anzahl: 1)
Moinsen,
ich habe dann mal aus Christians vorschlag ein "Projekt1" erstellt... Das erstellen und verschieben der Buttons funzt nun wunderbar - hat jetzt noch jemand ne Idee, wie ich das mit dem Resizen der Buttons hinbekommen kann? Gruß Wormid |
Re: Wie bastelt man einen einfachen Formular-Editor?
Probiers mal mit den DSNSys-Komponenten..
Da ist auch ein ObjectInspector dabei..Und auskennen tu ich mich damit auch etwas. Könntest also auch bei Problemen Fragen.. |
Re: Wie bastelt man einen einfachen Formular-Editor?
Ich kann zwar jetzt nicht viel zu deinem edit prob sagen...nur dass du vielleicht die property 'ComponentState' missbrauchen könntest und auf 'scDesigning' setzen, dann hasst du schonmal ein flag, bzw. werden sie vielleicht auch anders gezeichnet etc.
Aber du musst die formulare ja auch speichern...da hätt ich vielleicht einen kleinen leckerbissen für dich, mit dem du deine forms als dfm-text (oder binary) speichern und laden kannst:
Delphi-Quellcode:
so kannst du dann speichern und laden:{ -- Author: max hub (aka maximov alias maximus) - 2003 --} unit dmService; interface uses classes, sysUtils, TypInfo; function SaveCompoToFile(aCompo : TComponent; FileName: string; asBinary: Boolean = false): boolean; function LoadCompoFromFile(aCompo : TComponent; FileName: string; asBinary: Boolean = false): boolean; implementation function SaveCompoToFile(aCompo : TComponent; FileName: string; asBinary: Boolean = false): boolean; var Stream1:TMemoryStream; Stream2:TMemoryStream; format : TStreamOriginalFormat; begin result := false; format := sofText; Stream1 := TMemoryStream.Create; Stream2 := TMemoryStream.Create; try Stream1.WriteComponent(aCompo); Stream1.Position := 0; if not asBinary then begin format := sofText; ObjectBinaryToText(Stream1,Stream2,format); end else Stream1.SaveToStream(Stream2); Stream2.SaveToFile(FileName); result := true; finally Stream1.Free; Stream2.Free; end; end; function LoadCompoFromFile(aCompo : TComponent; FileName: string; asBinary: Boolean = false): boolean; var FileStream:TFileStream; MemoryStream:TMemoryStream; format:TStreamOriginalFormat; begin result := false; if not FileExists(fileName) then exit; MemoryStream := TMemoryStream.Create; FileStream := TFileStream.Create(FileName,fmOpenRead); try if not asBinary then begin format := sofBinary; ObjectTextToBinary(FileStream,MemoryStream,format); end else MemoryStream.LoadFromStream(FileStream); MemoryStream.Position := 0; MemoryStream.ReadComponent(aCompo); result := true; finally FileStream.Free; MemoryStream.Free; end; end; end.
Delphi-Quellcode:
ich hoffe das hilt dir deinen form-designer zu wuppen :wink:
SaveCompoToFile(YourDynForm,'c:\'+YourDynForm.name+'.dfm'); // zB.
//... LoadCompoFromFile(YourDynForm,'c:\'+YourDynForm.name+'.dfm'); // zB. cu, maximov. PS: Beim laden werden alle plazierten compos automatisch instanziert! |
Re: Wie bastelt man einen einfachen Formular-Editor?
Thx, zum einen werde ich mir die genannten Kompos mal ansehen, und die Proceduren fürs speichern könnten mir auch noch nützlich sein! :thuimb:
|
Re: Wie bastelt man einen einfachen Formular-Editor?
Zitat:
|
Re: Wie bastelt man einen einfachen Formular-Editor?
Zitat:
|
Re: Wie bastelt man einen einfachen Formular-Editor?
ich wollte ja gerade kein neues formular createn, weil wenn man nur die gespeicherten Einstellungen übernehmen möchte, kommt dann, eine Fehlermeldung, dass es die betreffende Stringgrid auf dem Formular schon gäbe ...
bei MemoryStream.ReadComponent(aComponent); |
Re: Wie bastelt man einen einfachen Formular-Editor?
sorry, ich habs genau andersrum verstanden.
|
Re: Wie bastelt man einen einfachen Formular-Editor?
Also wenn du nicht gerade Fremdkomponenten nehmen willst, wirst du wohl ums Selbst-Zeichnen nicht herum kommen (zumindest im Design-Mode). Die Idee mit dem ReleaseCapture ist meiner Meinung nach nicht dafür zu gebrauchen, da dann ja sofort verschoben wird.
PS: ReleaseCapture könnte man vielleicht doch gebrauchen, zumindest beim Größe ändern, zum Beispiel mit vier Shapes. :mrgreen: |
Re: Wie bastelt man einen einfachen Formular-Editor?
Also ich denke die Editfunktionen werden wohl schon in Delphi drin sein.
Vllt. reicht es ja csDesigning zu setzten und dann lassen die sich ja vllt. schon von selbst ziehen die Objekte. Ansonsten würde ich dir raten alle Mausereignisse ans Formular liefern zu lassen und über Sender die Objekte verschieben zu lassen. MFG |
Re: Wie bastelt man einen einfachen Formular-Editor?
Hallo stoxx,
mit der ![]() ![]() Gruß Hawkeye |
Re: Wie bastelt man einen einfachen Formular-Editor?
Zitat:
So einen Objectinspector haben wir als erstes probiert, aber da wird man ja nervös, wenn man zig einstellungen und zahlen da ändern soll, da ist man in einer Textdatei wesentlich schneller. Es geht auch nicht um visuelle Komponenten, sondern um Parametereinstellungen... Deswegen wollten wir ein einfaches hirarchiches Format, was die Funktionalität von XML bieten soll, aber einfacher zu editieren ist .. und da ist das DFM Format eigentlich Klasse ... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:52 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz