Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
FormCutter
Gelöschter Benutzer

FormCutter

beantworten | zitieren | melden

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,
Dieser Beitrag wurde 3 mal editiert, zum letzten Mal am .
Attachments
Gelöschter Benutzer

beantworten | zitieren | melden

hier ein grafisches beispiel
links der entwurf mit dem formcutter und rechts ein mit dem generierten quelltext versorgte Form.
Attachments
Scarecraft
myCSharp.de - Member

Avatar #avatar-2558.jpg


Dabei seit:
Beiträge: 268
Herkunft: Lingen

beantworten | zitieren | melden

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 ^^
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Scarecraft am .
Attachments
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
private Nachricht | Beiträge des Benutzers
tscherno
myCSharp.de - Member

Avatar #avatar-2584.gif


Dabei seit:
Beiträge: 630
Herkunft: Nürnberger Land

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Gelöschter Benutzer

beantworten | zitieren | melden

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 Benutzer

beantworten | zitieren | melden

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.
Peter Bucher
myCSharp.de - Experte

Avatar #jVxXe7MDBPAimxdX3em3.jpg


Dabei seit:
Beiträge: 5.940
Herkunft: Zentralschweiz

beantworten | zitieren | melden

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

- https://peterbucher.ch/ - Meine persönliche Seite
- https://fpvspots.net/ - Spots für FPV Dronenflüge
private Nachricht | Beiträge des Benutzers
Gelöschter Benutzer

beantworten | zitieren | melden

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.
tscherno
myCSharp.de - Member

Avatar #avatar-2584.gif


Dabei seit:
Beiträge: 630
Herkunft: Nürnberger Land

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Gelöschter Benutzer

beantworten | zitieren | melden

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 Benutzer

beantworten | zitieren | melden

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:
Attachments
D-eath
myCSharp.de - Member



Dabei seit:
Beiträge: 233
Herkunft: Ingolstadt

beantworten | zitieren | melden

Wow, wahnsinnig interessante Sache. Hätte für mich keine praktische Einsatzmöglichkeit, aber trotzdem schön. Viel Erfolg.
private Nachricht | Beiträge des Benutzers
eveN
myCSharp.de - Member



Dabei seit:
Beiträge: 107
Herkunft: Bielefeld

beantworten | zitieren | melden

Danke, werd's auch mal testen! :)
Ich lasse mich gerne korrigieren! (:
private Nachricht | Beiträge des Benutzers
Xqgene
myCSharp.de - Member



Dabei seit:
Beiträge: 2.051

beantworten | zitieren | melden

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)
"A programmer is a tool which converts coffein to code."

Evely ToDo-Manager 1.2 (Build 1.2.585)
private Nachricht | Beiträge des Benutzers
Gelöschter Benutzer

beantworten | zitieren | melden

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

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