Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Simplen eigenen Formulardesigner entwickeln (https://www.delphipraxis.net/193868-simplen-eigenen-formulardesigner-entwickeln.html)

daniel775 18. Sep 2017 10:27

Simplen eigenen Formulardesigner entwickeln
 
Hallo,

kann mir jemand mal ein paar Denkanstösse geben, wie man einen einfachen Formulardesigner entwickelt. Der muss nichts großartiges können. Reichen würden im Prinzip 2, 3 Controls die z.B. auf ein TCustomControl gesetzt werden was ein DINA4 Blatt mit Randeinstellungen darstellt. Eine Horizontale Linie, ein Label und ein Image-Control.

Als Eigenschaft haben solche Labels dann z.B. Name1, Zusatz, Name2, Strasse/Hausnr, PLZ und Ort. Im Prinzip wie in MS Word der Serienbriefdesigner. Nur das man per Drag&Drop die Komponenten auf das Blatt platziert. Anschließend würde ich gerne die x, y Positionen der Controls mit den Randeinstellungen des Blatts auslesen und in einer DB wegspeichern.

Oder hat schon mal jemand so etwas entwickelt was man frei nutzen bzw. erweitern kann? Ein paar Beispiele habe ich schon hier im Forum gesehen. Die sind allerdings mehr ein Formulardesigner für Forms in Delphi.

Die Verwendung von Rave oder FreeReport wollte ich vermeiden, da ich frei in der Darstellung bleiben möchte. Gearbeit habe ich schon einmal damit, bin auch damit vertraut. Ich bin mir bewusst das man sich dann um alles selbst kümmern muss. Ich habe schon einmal ein statisches Formular mit der TPrint Komponente entwickelt. Allerdings würde ich gern einwenig komfor einbauen, was mir die Sache mit dem Design in der Voransicht und der Übersicht erleichert.

Hinzu kommt das ein Logo platziert werden muss. Da habe ich gelesen das dass mit RaveReport nicht so einfach sein soll.

Genutzt wird Delphi 7 Prof.

Beste Grüße

daniel775 18. Sep 2017 12:23

AW: Simplen eigenen Formulardesigner entwickeln
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe gerade mal ein Beispiel gemacht, damit ihr ungefähr eine Vorstellung habt was ich meine.
(Siehe Anhang)

stahli 18. Sep 2017 12:32

AW: Simplen eigenen Formulardesigner entwickeln
 
Kannst Du mal präzisieren, was Du genau wissen willst?

Wie man eine Palette erstellt und Controls davon zieht oder wie man Controls im Designer verschieben kann oder wie man die Positionen auf ein Blatt umrechnet?

Grundsätzlich könntest Du die Controls in einer Textdatei (oder auch Ini oder XML) speichern
Zitat:

Panel
Left=100
Top=100
Width=100
Height=100
und so bei Bedarf wieder dynamisch herstellen.

daniel775 18. Sep 2017 13:06

AW: Simplen eigenen Formulardesigner entwickeln
 
Die Labels habe ich jetzt händisch auf das Image Control gesetzt. Und dabei habe ich gerade festgestellt, das sich bei dem Image Control überhaupt keine Komponenten unterordnen lassen. Dementsprechend geht Image1.Controls[] leider nicht. Also müsste ich warscheinlich auf ein Panel ausweichen. Nur das Panel hat wiederum kein Canvas. Somit geht

Code:

  Panel2.Canvas.Brush.Color := clwhite;
  Panel2.Canvas.Pen.Color := clblack;
  Panel2.Canvas.Pen.style := psDashDot;
  Panel2.Canvas.Rectangle(20, 20, 560, 620);
leider auch nicht.

Würde gern auf den Button "H-Line" klicken und diesen dann per Drag&Drop auf das Image setzen und ggf. nach dem positionieren noch korrigieren ohne zu löschen. Was jetzt auch nicht so schlimm wäre, aber das korrigieren fände ich besser. Oder in der Combo-Box ein Element auswählen und dieses dann per Drag&Drop als Label z.B. platzieren. Wie ich die Koordinaten bei den Labels, H-Lines oder Images dabei schreibe und auslese oder hinterher die Control Positionen per Schleife mit z.B.
Code:
for i := 0 to Panel1.ControlCount - 1 do
begin
 if (Panel1.Controls[i] is TLabel) then
 begin
 end;
end;
auslese ist mir bekannt. Nur hab ich leider noch nie Drag&Drop funktionen geschrieben oder ausgewählte Elemente in Comboboxen in Label Kompo´s umgewandelt und auf ein Panel gesetzt.

stahli 18. Sep 2017 13:55

AW: Simplen eigenen Formulardesigner entwickeln
 
Meinst Du ungefähr so etwas? https://www.youtube.com/watch?v=8-mcMRl46Aw
Wenn Du nichts fertiges findest, kann ich mal die Quellen mal raussuchen (das war aber in ein komplexeres Framework eingebettet).

Du müsstest halt mal Versuche mit Drag&Drop machen.
Grundsätzlich muss man sich sich die Klickposition (X/Y) auf dem Control merken und dann auf MouseMove über dem eigenen Control reagieren.
Dazu setzt man das Control dann auf an die aktuelle Mausposition -X/Y.
Dabei muss man aber die Positionen relativ zum Parent berücksichtigen und auch, dass sich die Maus über dem Parent oder anderen Controls bewegen kann.

Das "runterziehen von der Palette" ist etwas komplizierter. Da kann man ein neues Control auf den Designer setzen und dafür StartDrag aufrufen...

daniel775 18. Sep 2017 14:10

AW: Simplen eigenen Formulardesigner entwickeln
 
Zitat:

Meinst Du ungefähr so etwas? https://www.youtube.com/watch?v=8-mcMRl46Aw
Ja sowas meinte ich.

Jens01 18. Sep 2017 14:33

AW: Simplen eigenen Formulardesigner entwickeln
 
http://www.delphiarea.com/products/d...nents/preview/

daniel775 18. Sep 2017 14:55

AW: Simplen eigenen Formulardesigner entwickeln
 
Jepp... die Komponente nutz ich schon für die Vorschau

stahli 18. Sep 2017 14:56

AW: Simplen eigenen Formulardesigner entwickeln
 
Liste der Anhänge anzeigen (Anzahl: 1)
Es ist sicher sinnvoll, ein fertiges Framework dazu zu verwenden.

Für alle Fälle anbei aber mal zwei Dateien zur Orientierung für eine eigene Lösung.
Du müsstest Dir die entsprechenden Stellen wie BeginDrag, DragOver, DragDrop heraussuchen. Sorry, dass das nicht übersichtlicher ist.

Neutral General 18. Sep 2017 15:02

AW: Simplen eigenen Formulardesigner entwickeln
 
Auch wenn das keine direkte Antwort auf deine Frage ist:

Kann es sein dass du einfach nur einen Reportdesigner/generator brauchst bzw. bauen willst?
Sollen sich deine Kunden im Programm selbst Rechnungen/Briefe designen können?

Falls ja, dann such mal nach Bei Google suchenDelphi report generator oder z.B. nach Bei Google suchenFastreport (Ist bei neueren Delphi Versionen schon dabei!).

Das erspart dir 1000000000000 Stunden Arbeit und man hats sehr schnell eingebaut und kann damit echt in kurzer Zeit schöne Reporte erstellen.

daniel775 18. Sep 2017 15:16

AW: Simplen eigenen Formulardesigner entwickeln
 
@ stahli .... danke schau ich mir an.

@ Neutral General
Ja, du hast recht der Bau der Formulare soll selbst geschehen, bzw. anpassbar sein. Die letzten Formulare waren immer Hardcoded in der Anwendung verankert. Das wollte ich jetzt mal ändern.
Wie gesagt, von Rave oder Fastreport wollte ich abstand nehmen, weil ich die Gestaltung für meine Zwecke frei und klein halten möchte.
Die Arbeit scheu ich nicht, weil da auch ein gewisser Lerneffekt hinter steckt.

daniel775 18. Sep 2017 15:21

AW: Simplen eigenen Formulardesigner entwickeln
 
Stahli kann ich die odDesigner in Delphi7 als Komponente regestrieren?

Neutral General 18. Sep 2017 15:23

AW: Simplen eigenen Formulardesigner entwickeln
 
Also "frei" bist du mit FastReport auf jeden Fall.
Klein.. Naja kommt drauf an was du meinst bzw. ist bei FastReport nicht sogar auch der Code dabei sodass man den ReportDesigner theoretisch seinen Wünschen anpassen kann?

Ansonsten hoffe ich dass das ein privates Projekt für den Spaß ist, denn sowas für ein kommerzielles Projekt selbst zu machen ist eine riesige Zeit und Geldverschwendung.
So oder so sollte dir bewusst sein, dass dir wahrscheinlich nicht bewusst ist wie viel Arbeit hinter sowas liegt. Vor allem wenn das Ergebniss am Ende funktionieren und halbwegs gut aussehen soll.

Ein Projekt bei mir auf der Arbeit hatte vorher etwas Selbstgebautes wo man nur eine DataTable in Tabellenform ausdrucken konnte. Es gab keinerlei Designer oder Einstellmöglichkeiten, der Code hatte mehrere 1000 Zeilen Code und es sah aus wie hingekotzt.

stahli 18. Sep 2017 15:34

AW: Simplen eigenen Formulardesigner entwickeln
 
@daniel775

Nein, die Komponente ist Teil eines kompletten Frameworks.
Installieren kannst Du die so nicht.

Du kannst Dir nur ein paar Umsetzungen abschauen, wenn Du magst.

daniel775 18. Sep 2017 16:30

AW: Simplen eigenen Formulardesigner entwickeln
 
Also undokumentiert ist es echt schwer sich da durch zu lesen.

Was ich bisher verstanden habe ist, das du ein Panel abgeleitet hast und diese scheinbar als Objekte auf eine abgeleitete Scrollbox gelegt werden. Die Panel Objekte werden in einer abgeleiteten Klasse Listbox gespeichert. Wo allerdings die passende Klasse TodListbox ist?!?!. :?

Naja ... werde mal weiter schauen.

Neumann 18. Sep 2017 16:39

AW: Simplen eigenen Formulardesigner entwickeln
 
Das hier habe ich als Basis für eine frei konfigurierbare Programmoberfläche genommen:

http://www.delphiarea.com/products/d...s/simplegraph/

stahli 18. Sep 2017 16:53

AW: Simplen eigenen Formulardesigner entwickeln
 
@daniel775

Ja sorry, ich kann das aber jetzt auch nicht entfrachten.
Die Panels haben ein eigenes Verschiebe-Verhalten, wenn sie Einträge einer TodListbox sind.
Diese Funktionen kannst Du ignorieren.

Du müsstest Dich (wenn Du es selbst realisieren willst) mit den Drag-, Drop- und BeginDrag-Methoden beschäftigen.
Meinen Schnipsel kannst Du dann höchstens als Anregung sehen.
Kann natürlich auch sein, dass das eher verwirrt als hilft... :-/

daniel775 18. Sep 2017 16:55

AW: Simplen eigenen Formulardesigner entwickeln
 
@ Neumann
Das sieht vielversprechend aus. Vielen Dank. Mal schauen was sich daraus machen lässt.

@ stahli
Vielleicht lässt sich das jetzt mit deiner Hilfe kombinieren. Mal schauen.

Neumann 19. Sep 2017 09:03

AW: Simplen eigenen Formulardesigner entwickeln
 
Die Objekte in dem Simplegraph habe ich um einige Eigenschaften ergänzt z.B Typ, Action und einige mehr.

Man kann sie dann einfach wie Buttons verwenden (ein OnClick gibt es bereits) andere nutze ich als Platzhalter für Edits Datengitter usw. die dann bei Anzeige des Simplegraph platziert werden.

Hat man viele buttonartige Objekte kann man die den Klick dann über den zugewiesenen Typ und die Action auswerten und verarbeiten.

Großer Vorteil ist dass man sich so eine Oberfläche zusammenbauen und die ohne Neukompilieren der Anwendung angepasst werden kann.

Die Möglichkeit diese Oberfläche dann zu speichern und zu laden ist auch schon vorhanden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:51 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