Laden...

FormCutter

Erstellt von gelöschtem Konto vor 15 Jahren Letzter Beitrag vor 14 Jahren 8.263 Views
Gelöschter Account
vor 15 Jahren
FormCutter

Hallo,

ich habe mir aus jux mal eine anwendung gebastelt, das code für nonrectangle forms generiert.
wenn ihr der immer rechteckigen forms überdrüssig seid, dann schaut es euch mal an.

nach start der anwendung sieht man erstmal eine form in einer form. die leicht verschwommene form ist die arbeitsfläche. wenn man da drauf geht und rechts klickt, dann verwandelt sich der cursor in ein kreuz und durch linklklicken kann man nun linien ziehen, dessen enden von kreisen gekennzeichnet werden.

wenn man dann abermal rechts klickt, dann wird der mouszeiger wieder normal und man kann nun per klick auf einen der kreise, die enden der linien versetzen, um so korrekturen vorzunehmen.

wenn ihr einen punkt entfernen wollt, dann einfach draufklicken (also in den verschiebemodus gehen) und entfernen(del-taste) drücken.

sobald ihr die richtige form gewählt habt, drückt ihr "Generieren" und es floppt ein dialog auf mit den quelltext.
das besondere am quelltext ist, das er relativ zur formgröße gehalten ist, damit man ihn auf jede belibige form genau anwenden kann.
so kann man erreichen, das z.b. oben rechts das close in jedem fall sichtbar bleibt.

den quelltext müsst ihr nur noch komplett markieren und unterhalb von "InitializeComponent();" in die form einfügen, wo ihr es haben wollt.
ggf. könnt ihr es auch in das resize-event einfügen, wenn ihr zusätzlich erlauben wollt, das man die größe der form ändern kann.

momentan unterstütze ich auschließlich gerade linien und das wird auch so bleiben. wenn ihr noch kreise oder ähnliches haben wollt, dann müsst ihr es schon selbst erweitern. der quellcode liegt ja bei.
wenn ihr so eine erweiterung gemacht habt, dann postet sie hier bitte, damit ich sie dann in das original einpflegen kann.

der große vorteil ist von diesem programm ist, das man recht komplexe muster (ok bis jetzt nur mit geraden kannten) relativ leicht und ohne pixelrechnerei in kurzer zeit zusammenklicken kann.

Suchhilfe: Runde, Runder, Rundes, Form, Forms, Control, Controls, Button, Buttons, Label, Labels,

Gelöschter Account
vor 15 Jahren

hier ein grafisches beispiel
links der entwurf mit dem formcutter und rechts ein mit dem generierten quelltext versorgte Form.

268 Beiträge seit 2008
vor 15 Jahren

Huhu JAck30lena,
habs grad mal Probiert und muss sagen es klappt einfach super!
Bin total damit zufrieden und werde es sicher auch bei dem ein oder anderem Projekt nutzen können!
🙂 ich liebe tools die einem das Proggen leichter machen ^^
MFG Scarecraft

PS: Hab nu ne form in Herz form ^^ 😜 😜

Name: Scarecraft
Language:C#
learning since:winter 2007
IDE: Visual Studio 2005/08 Professional Editon
Skill:Medium
qualifications: MCP - Microsoft Certified Professional
Homepage : FX RPG Maker

630 Beiträge seit 2007
vor 15 Jahren

Hallo,

WOW! Das ist mal ein nützliches Tool!

Weiter so!
tscherno

To understand recursion you must first understand recursion

http://www.ilja-neumann.com
C# Gruppe bei last.fm

Gelöschter Account
vor 15 Jahren

erstmal danke für die positive resonanz.

ich habe nun festgestellt, das durch das relative berechnen des pfades zur abhängigkeit der formgröße eine relativ droße ungenauigkeit eingetreten ist. sprich der entwurf wich in manchen fällen recht stark vom resultat ab.

diesen fehler habe ich nun minimiert. ganz beseitigen kann man ihn nicht aber noch minimaler geht er meines wissens nciht mehr.

das neue projekt wurde bereits oben erneut hochgeladen.

Gelöschter Account
vor 15 Jahren

so, hab nun eine möglichkeit eingebaut, das aktuelle projekt zu speichern und auch wieder zu laden. ich habe über die möglichkeit nachgedacht, einen generierten quelltext zu parsen, doch ist mir der aufwand und die fehleranfälligkeit einfach zu groß. ein xml-serialisierer hingegen war in 3 zeilen komplett zu realisieren.

new features:

  1. loadbutton mit der funktion eine xml auszulesen.
  2. savebutton mit der funktion alle definierten punkte in eine xml zu schreiben.
  3. die präzision der berechneten punkte weiter erhöht.
5.941 Beiträge seit 2005
vor 15 Jahren

Hallo JAck30lena

Eine Möglichkeit um die aktuelle Bearbeitung zu Resetten wäre sicherlich noch nützlich.

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

Gelöschter Account
vor 15 Jahren

new features:

  1. ein clearbutton wurde hinzugefügt, der die aktuelle bearbeitung komplett löscht.
    einzelne knoten lassen sich weiterhin ber entf-taste löschen.
  2. das zecihnen wurde ein wenig komfortabler gemacht. schwierig mit worten zu umschreiben. ich hab da eine art rubberband-funktionalität reingemacht. es schaut ein wenig hübscher aus beim setzen der eckpunkte.
630 Beiträge seit 2007
vor 15 Jahren

Hallo JAck30lena,

weist du ob es eine Möglichkeit gibt das Form per Code mit einem Border zu versehen?

Gruss
tscherno

To understand recursion you must first understand recursion

http://www.ilja-neumann.com
C# Gruppe bei last.fm

Gelöschter Account
vor 15 Jahren

an die möglichkeit habe ich bereits gedacht, nur ist mir der aufwand der berechnung zu hoch für die onpaint. eine form sollte die cpu nicht auf 100% bringen wenn man sie nur ein wenig verschieben will oder wenn man sie teilweise mit anderen fenster überdeckt.

dadurch das ich sämtliche positionen ausschließlich relativ setze und berechne, ist das ganze natürlich mit einschränkungen verbunden und ich fürchte, das dies eine einschränkung ist.

wenn du aber einen border haben willst, dann schau dir doch mal den code an, der generiert wird. im prinzip ist er doch recht simpel. wenn du nun selber einen solchen code schreibst, nur in absoluten werten, dann kannst du auch recht leicht in der onpaint einen border zeichnen.

in jedem fall gibt es keine automatische möglichkeit einen border zu setzen. (aber evtl finde ich ncoh einen trick zumindest einen 1pixel rand zu zeichnen)

Gelöschter Account
vor 15 Jahren

so wäre das lösbar:


private Point[] pArray;
        public Form1()
        {
            InitializeComponent();
            System.Drawing.Drawing2D.GraphicsPath gPath = new System.Drawing.Drawing2D.GraphicsPath();
            pArray = new Point[]{
				new Point(
					(int)(this.Width / 2.0402930402930402930402930403m),
					(int)(this.Height / 3.25m)),
				new Point(
					(int)(this.Width / 1.001798561151079136690647482m),
					(int)(this.Height / 507m)),
				new Point(
					(int)(this.Width / 1.2488789237668161434977578475m),
					(int)(this.Height / 1.7303754266211604095563139932m)),
				new Point(
					(int)(this.Width / 2.6650717703349282296650717703m),
					(int)(this.Height / 1.3665768194070080862533692722m)),
				new Point(
					(int)(this.Width / 13.261904761904761904761904762m),
					(int)(this.Height / 1.5648148148148148148148148148m)),
				new Point(
					(int)(this.Width / 8.703125m),
					(int)(this.Height / 2.2043478260869565217391304348m)),
				new Point(
					(int)(this.Width / 5.6836734693877551020408163265m),
					(int)(this.Height / 3.6739130434782608695652173913m)),
				new Point(
					(int)(this.Width / 27.85m),
					(int)(this.Height / 507m)),
				new Point(
					(int)(this.Width / 4.1259259259259259259259259259m),
					(int)(0m)),
				new Point(
					(int)(this.Width / 4.1567164179104477611940298507m),
					(int)(this.Height / 3.7555555555555555555555555556m))};
            gPath.AddLines(pArray);
            this.Region = new Region(gPath);

            //transform to clientarea
            List<Point> temp = new List<Point>();
            foreach (Point p in pArray)
            {
                temp.Add(Point.Subtract(p,Size.Subtract(Size.Subtract(this.Size,new Size(4,4) ),this.ClientSize)));
            }
            pArray = temp.ToArray();
        }

        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);
            using(Pen p = new Pen(Color.Black,3f))
            {
                e.Graphics.DrawLines(p, pArray);
                e.Graphics.DrawLine(p, pArray[0], pArray[pArray.Length - 1]);
            }
        }

ergebniss:

D
233 Beiträge seit 2008
vor 15 Jahren

Wow, wahnsinnig interessante Sache. Hätte für mich keine praktische Einsatzmöglichkeit, aber trotzdem schön. Viel Erfolg.

E
107 Beiträge seit 2008
vor 14 Jahren

Danke, werd's auch mal testen! 😃

Ich lasse mich gerne korrigieren! (:

X
2.051 Beiträge seit 2004
vor 14 Jahren

Lustiges Tool!

auch wenn ich es nicht wirklich brauche, fällt mir spontan zwei Sachen die ich vermissen würde.

  1. Dass man die Punkte hinzufügen könnte, so dass zwischen zwei Punkten noch ein platziert wird.

  2. noch besser wäre eine Vorschau Funktion 8)

Gelöschter Account
vor 14 Jahren

@ 1: ja, tu dir kein zwang an 😄 wenn dus implementierst, dann lade ich es gerne hoch.

@ 2: du kannst ja die datei "FormTemplate.bmp" durch einen screenshot deiner anwednung ersetzen.