AutoIt Gartenplanungs-Projekt

  • Hallo mal wieder.

    Erstmal vorab: Ich weiß, dass ich hier - was Anfragen angeht - momentan sehr aktiv bin. Irgendwie ist mir das momentan total peinlich, aber ich weiß nicht, wo ich sonst fragen soll... :o

    Nun aber zu meiner Anfrage:
    Ich arbeite gerade familienintern an einem Gartenplanungs-Programm.

    Im Prinzip steht schon fast alles.
    Es gibt eine Startseite, in der ich ein Projekt erstellen kann, also mit Garten-Flächen, Gewächshausvorlagen und allem Drum und Dran.
    Es gibt Dialogfenster, in denen ich Beete und Beetflächen einstellen kann (also mit / ohne Rand) -> Typen: quadratisch, rechteckig, kreisförmig
    Es gibt auch schon eine Vorlage für (unser) Gewächshaus-Modell. Das steht auch schon als autoIt-Grafik.
    Ich verwende dazu... besser gesagt, will dazu das Graphic-Objekt in AutoIt 3 nutzen.

    Der aktuelle Code am Anfang sieht so aus:


    Im oberen Bereich wird u.a. die Grafik erstellt sowie das Label für den Weg.
    Manuell einfügen kann man dann per Button auch andere Textfelder, diese mit Text füllen und positionieren, sowie sie in einer ListBox anzeigen lassen. Funktoniert.
    Was jetzt aber noch nicht funktioniert, ist dass ich per Knopfdruck ein Rechteck einfüge (in der Grafik).
    Man sieht ja in Zeile (6) und (7), wie dort das Rechteck festgelegt wird (das ist hier die Vorlage vom Gewächshaus und der zentriert positionierte Weg).

    Ich habe also den Code so formuliert:

    AutoIt
    Case $NewRectButton
    	         ; $Graphic1 = GUICtrlCreateGraphic(0, 0, 540, 630)
    			 GUICtrlSetGraphic($Graphic1, $GUI_GR_COLOR, 0x000000, 0x800000)
    			 GUICtrlSetGraphic($Graphic1, $GUI_GR_RECT, 10, 10, 40, 40)
    ; ... und weiter

    Funktioniert nicht. Da tut sich rein gar nix.
    Habe ich da jetzt irgendwas falsch gemacht?? ?(

    Ach ja, zwischen rein:
    - wenn ich das Semikolon in Zeile (2) entferne und den Button zweimal klicke, dann erscheint das Rechteck beim 1. Mal in der Liste und beim 2. Mal im Grafikbereich.
    - mit dem Semikolon erscheint das Rechteck mit den Daten (Länge, Breite, Position, Name) in der ListBox, in der Grafik aber nicht.

    Es wäre nett wenn ihr mir helfen könntet, das Rechteck dorthin zu positionieren, wo es am Anfang sein soll. :D

    -----
    Danke,

    olfibits ;)

    neben AutoIt jetzt auch noch in C/C++, Java und Python aktiv :)
    Stand 04.04.2018, 13:34

  • Um ehrlich zu sein, möchte ich das Programm privat nutzen und erst später in professionell veröffentlichen, was ich jetzt noch nicht machen möchte, kann, darf, was weiß ich... ich bin ja "erst" 14 :saint:
    Ich kann dir aber gerne Screenshots davon schicken.

    neben AutoIt jetzt auch noch in C/C++, Java und Python aktiv :)
    Stand 04.04.2018, 13:34

  • @BugFix wie könntest du dir das dann vorstellen? Mein Code war jetzt dieser...

    AutoIt
    Case $NeuWeg
     _GDIPlus_Startup()
     _GDIPlus_RectFCreate(10, 10, 40, 40)

    ... was jetzt trotz include nicht funktioniert hat. ?(

    neben AutoIt jetzt auch noch in C/C++, Java und Python aktiv :)
    Stand 04.04.2018, 13:34

  • die funktion die du warscheinlich suchst lautet

    AutoIt
    $hGraphics=_GDIPlus_GraphicsCreateFromHWND ( $hWnd )
    _GDIPlus_GraphicsDrawRect($hGraphics, $iX, $iY, $iWidth, $iHeight , $hPen )

    in der Hilfe ist zu den meisten GDI Funktionen jeweils ein beispiel dabei in dem gezeigt wird was erstellt werden muss um erfolgreich in ein GUI zu zeichnen

    deine Funktion erstellt nur eine Struktur die ein Rechteck über die Eckpunkte beschreibt.

  • Hallo @olfibits,
    Entschuldige bitte meinen OT Beitrag. Könntest du aber deine Signatur etwas kürzen oder (teilweise) in einen Spoiler packen? Das wäre meiner Ansicht nach der Lesbarkeit von Threads, mit mehreren Beiträgen von dir, zuträglich sein.

    Grüße autoiter

  • Entschuldige. Habe das aus einem anderen Forum, in dem ich IT-technisch unterwegs bin kopiert.
    Wird sofort erledigt!
    Danke für den Hinweis.

    neben AutoIt jetzt auch noch in C/C++, Java und Python aktiv :)
    Stand 04.04.2018, 13:34

  • Hallo,

    das...

    AutoIt
    $hGraphics=_GDIPlus_GraphicsCreateFromHWND ( $hWnd )
    _GDIPlus_GraphicsDrawRect($hGraphics, $iX, $iY, $iWidth, $iHeight , $hPen )


    ... hat so...

    AutoIt
    _GDIPlus_Startup()
    $hGraphics= _GDIPlus_GraphicsCreateFromHWND ( $Form1 )
    _GDIPlus_GraphicsDrawRect($hGraphics, 20, 20, 40, 40, 1)

    ... leider auch nicht funktioniert.
    Wie bekomme ich es hin, ein schwarzes Rechteck zu "konstruieren", wie ich es brauche?

    neben AutoIt jetzt auch noch in C/C++, Java und Python aktiv :)
    Stand 04.04.2018, 13:34

    • Offizieller Beitrag

    Beim arbeiten mit GDI+ sollte man nicht direkt auf die GUI-Grafik zeichnen, sondern einen Backbuffer verwenden. Wenn es auf Geschwindigkeit ankommt, kann man auch einen Doublebuffer verwenden.
    Jedenfalls ist das arbeiten mit einem Buffer sinnvoll, weil man so die Bitmap schnell mal neuzeichnen lassen kann (bei WM_PAINT oder beim Restore des Fensters). Außerdem wird die Bitmap erst dann
    gezeichnet, wenn alle Graphic-Befehle abgeschlossen sind. So vermeidet man beim EInsatz vieler Graphic-Befehle, dass man das einzelne zeichnen sehen kann.
    Hier mal ein Beispiel:

  • Danke für eure Antworten, aber ich...

    Zitat von olfibits

    hab's erledigt dank Hilfe-Datei-Beispiel.

    neben AutoIt jetzt auch noch in C/C++, Java und Python aktiv :)
    Stand 04.04.2018, 13:34

    • Offizieller Beitrag

    Du stellst Deine Lösung dem Forum aber nicht zur Verfügung. Eigentlich ist das ziemlich unfair.

    Und die Beispiele in der Hilfe sind meist ohne Backbuffer. Nimm mal das zweite Beispiel zum Befehl _GDIPlus_GraphicsDrawRect, minimiere das Fenster und mache dann ein Restore. Und schon ist das gezeichnete Rechteck weg. Mit meinem Beispiel (oben) passiert das nicht.

  • bitte sehr

    neben AutoIt jetzt auch noch in C/C++, Java und Python aktiv :)
    Stand 04.04.2018, 13:34

  • und bei GUi_EVENT_CLOSE

    AutoIt
    _GDIPlus_PenDispose($hPen)
    _GDIPlus_GraphicsDispose($hGraphics)
    _GDIPlus_Shutdown()

    servus herrschaften

    neben AutoIt jetzt auch noch in C/C++, Java und Python aktiv :)
    Stand 04.04.2018, 13:34