Koda in AutoIt?

  • Hallo allerseits :)

    Heute habe ich folgende Fragen (keine Angst, werden wahrscheinlich noch mehr ;) :(

    In welcher Sprache ist Koda geschrieben?
    Wenn es nicht in AutoIt geschrieben ist, ist es möglich soetwas ähnliches in AutoIt zu machen?

    Vielen Dank für jede Antwort! :D

    Viele Grüße,

    MatthiasG.
    -----------------------------------------------------------
    Ich hab mal auf die Signatur verzichtet, um alles persönlicher zu gestalten :D

  • In welcher Sprache ist Koda geschrieben?

    Koda ist in Delphi 7 geschrieben.

    Klar kannst du das mit AutoIt versuchen, ich glaube, sowas gibts auch schon. Für erste Einblicke, wie sowas realisiert werden kann, kannst du dir ja mal den Quelltext des CodeWizards ansehen, wenn du ScitE installiert hast (im Ordner SciTE\CodeWizard\).

    Gruß Ashpool

    [edit] Da war einer schneller :sleeping:

    Gruß Ashpool

    Zitat von mir

    Bin immer wieder erstaunt, wie begrenzt ein Horizont sein kann.

  • Das sieht Delphi auch sehr ähnlich :D

    Ich hatte nämlich vor, Koda zu einer Entwicklungsumgebung wie Delphi weiterzuentwickeln.

    Heißt doppelklick auf ein Element: SciTE-ähnlicher Editor öffnet sich, in dem man alles ergänzen kann.

    Ashpool: sry, aber was hat der CodeWizard damit zu tun?

  • Ashpool: sry, aber was hat der CodeWizard damit zu tun?

    Nun, der CodeWizard produziert aus den eingegebenen Eigenschaften eines visuellen Controls AutoIt-Code. Und wie er das macht, kann man sich im Quelltext des CodeWizards ansehen.
    Koda macht ja sowas ähnliches, nur schreibt es die Formular-Eigenschaften zusätzlich als XML-Datei.

    Gruß Ashpool

    Gruß Ashpool

    Zitat von mir

    Bin immer wieder erstaunt, wie begrenzt ein Horizont sein kann.

    Einmal editiert, zuletzt von Ashpool (28. Februar 2009 um 11:04)

  • Achso, dann schau ich es mir mal an.

    Aber ist es möglich auch so ein GUI-Entwerfer Tool zu machen, also man zieht einen Rahmen ins Feld und bekommt dann ein Steuerelement (Dass kann ja über GUICtrlCreate wirklich erzeugt werden). Dann würde der Code ausgegeben werden, und dass mit Includings (da muss ich Mega noch fragen, ob ich Organize Includings zwecksentfremden darf :D )

    Zitat von Ashpool

    nur schreibt es die Formular-Eigenschaften als XML-Datei


    Die Entwicklungsumgebung soll nur mit au3 auskommen, falls das aber alles nicht klappen sollte, werde ich versuchen ein Skript zu schreiben, was die GUI in au3s in XMLs für Koda umschreibt.

    Wer hatte das denn versucht, vllt, komm cih ja an den Source ran?

    Ich hab mir jetzt auch den Code vom Code-Wizard mal angeschaut... Umfangreich trifft es wohl am besten :D

  • Aber ist es möglich auch so ein GUI-Entwerfer Tool zu machen, also man zieht einen Rahmen ins Feld und bekommt dann ein Steuerelement

    Das ist mit Sicherheit möglich, nur ist AutoIt eine Scriptsprache, also wird die Ausführgeschwindigkeit nicht besonders hoch sein.
    Aber da halte ich mich jetzt mal zurück, da frag mal lieber Leute, die sich damit auskennen. :D

    Gruß Ashpool

    Gruß Ashpool

    Zitat von mir

    Bin immer wieder erstaunt, wie begrenzt ein Horizont sein kann.

  • Die Geschwindigkeit ist erstmal zweitrangig, ich bräuchte nur so einen Anstoß (eine UDF oder so :D )...

  • Danke, das werde ich mir jetzt mal anschauen!
    Edit: Ich habe es mir angeschaut, und es ist genau das, was ich gesucht hab! Kann ich an den "Ecken " auch Drag & Drop-Punkte erscheinen lassen?

    Wie kann ich eigentlich Fenster aneinander haften lassen?
    Und wie erlaube ich die Größe von Fenstern zu ändern?

    Schon einmal danke! :D

    Edit:
    Ich habe jetzt eine Todo-List mit Fragen erstellt:

    TodoList

    1. An der rechten Seite des Hauptfensters kommt eine Toolbox hin.
    :?: Wie kann ich Fenster aneinander "kleben"?
    2. Klickt der Anwender auf ein Steuerelement in der Auswahl, soll er in das Hauptfenster klicken.
    :?: Wie finde ich heraus, ob der Anwender in einem bestimmten Bereich herien geklickt hat?
    3. Dort wird ein Steuerelement erzeugt
    :!: Über MouseGetCoordinates finde ich die Koordinaten heraus, und dort wird dann das Element ganz normal erzeugt.
    4. Eine Drag&Drop Funktion sollte vorhanden sein.
    :?: Ist soetwas möglich?
    5. Ein Raster sollte auch zur Verfügung stehen.
    :?: Wie kann ich Punkte auf den Bilschrim zeichnen, die magnetisch sind?
    6. Die Elemente sollen Ihre Größe verändern können.
    :!: Das geht bequem üüber die UDF.
    Rest kommt später :D

    Einmal editiert, zuletzt von MatthiasG. (28. Februar 2009 um 12:25)

    • Offizieller Beitrag

    Wie kann ich eigentlich Fenster aneinander haften lassen?

    Ich denke, am Besten WM_MOVE mit GUIRegisterMessage registrieren und dann in der Funktion bei Änderung einer Fensterposition, das angeheftete Fenster hinterherbewegen lassen.

    Und wie erlaube ich die Größe von Fenstern zu ändern?

    Mit dem Style: $WS_SIZEBOX

  • Ich denke, am Besten WM_MOVE mit GUIRegisterMessage registrieren und dann in der Funktion bei Änderung einer Fensterposition, das angeheftete Fenster hinterherbewegen lassen.


    Moment, kannst du mir das bitte genauer erläutern?

    Mit dem Style: $WS_SIZEBOX


    Danke! :)

    Du kannst dir das hier auch anschauen: AutoItGUIBuilder


    Danke, das habe ich mir angeschaut, aber wie krieg ich ein Control ins Fenster rein? Ich habe auf Control erstellen und OK geklickt, ich krieg dann ein Kreuz als Cursor, aber beim Klicken, ziehen etc. passiert nichts... Mach ich was falsch ?(
    Edit: Das mit dem Hintergrund ist eine super Idee! Aber wenn ich das Fenster zu groß ziehe, ist der Hintergrund logischer weise abgeschnitten, kann ich den wiederholen lassen, wie in HTML ungefähr? Und kann man die Punkte auch magnetisch machen (Also wenn der Mauszeiger sich auf 5 Pixel nähert, dann die Maus auf Koordinate 1,1 bewegen (MouseMove)). Ist das möglich?

    • Offizieller Beitrag

    Ich hab dir mal ein Bsp. mit Andocken (rechts, links, unten oder oben) erstellt:

    [autoit]

    #include <WindowsConstants.au3>
    $gui1 = GUICreate("Nummer 1", 300, 300, 100, 100)
    $gui2 = GUICreate("Ich folge", 200, 200)

    [/autoit][autoit][/autoit][autoit]

    _DockIt($gui1, $gui2)
    GUISetState(@SW_SHOW, $gui2)
    GUISetState(@SW_SHOW, $gui1)

    [/autoit][autoit][/autoit][autoit]

    GUIRegisterMsg($WM_MOVE, "WM_MOVE")

    [/autoit][autoit][/autoit][autoit]

    Do
    Until GUIGetMsg() = -3

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    Func _DockIt($Master, $Slave, $iDock=1, $iDiff=2) ; $iDock: 1=rechts, 2=unten, 3=links, 4=oben; $iDiff=Fensterabstand
    Local $aPos1 = WinGetPos($Master)
    Local $aPos2 = WinGetPos($Slave)
    Switch $iDock
    Case 1
    WinMove($Slave, '', $aPos1[0]+$aPos1[2]+$iDiff, $aPos1[1])
    Case 2
    WinMove($Slave, '', $aPos1[0], $aPos1[1]+$aPos1[3]+$iDiff)
    Case 3
    WinMove($Slave, '', $aPos1[0]-$iDiff-$aPos2[2], $aPos1[1])
    Case 4
    WinMove($Slave, '', $aPos1[0], $aPos1[1]-$iDiff-$aPos2[3])
    EndSwitch
    EndFunc

    [/autoit][autoit][/autoit][autoit]

    Func WM_MOVE($hWndGUI)
    If $hWndGUI = WinGetHandle($gui1) Then _DockIt($gui1, $gui2)
    EndFunc

    [/autoit]


    Edit:
    Oder so sind beide Fenster gekoppelt - egal welches du bewegst, mußt nur den entgegengesetzten Dockpunkt übergeben:

    [autoit]

    Func WM_MOVE($hWndGUI)
    Switch $hWndGUI
    Case WinGetHandle($gui1)
    _DockIt($gui1, $gui2)
    Case WinGetHandle($gui2)
    _DockIt($gui2, $gui1, 3)
    EndSwitch
    EndFunc

    [/autoit]
  • Danke, es läuft :D Super!

    Also habe ich jetzt folgende Fragen noch (als Liste, damits überschaubar wird :D):

    • Wie kann ich ein Hintergrundbild "wiederholen" lassen, so dass die ganze GUI bedeckt ist?
    • Wie kann ich spezielle Punkte "magnetisch" machen, deren Koordinaten ich kenne?
    • Wie finde ich heraus, ob der Anwender in einem bestimmten Bereich herein geklickt hat?
    • Ist Drag&Drop möglich?

    Ich weiß, das sind jetzt ziemlich viele Fragen, aber ich hoffe, ich nerve jetzt nicht damit :)

    Danke auf jedem Fall für alle bisherigen Antworten!

    Edit:  BugFix : Das läuft super! Nur bei Vista ist es so, dass man für jeden Fensterrand 5px draufaddieren muss, damit die nicht überlagert sind. Aero :cursing:
    Edit2: Mir fällt gerade auf, dass ich das :cursing: irgendwie nur in Verbindung mit Vista benutze 8o

    • Offizieller Beitrag

    Nur bei Vista ist es so, dass man für jeden Fensterrand 5px draufaddieren muss, damit die nicht überlagert sind.

    Das stellt doch kein Problem dar. Du kannst mit _WinAPI_GetSystemMetrics() die Stärke des Randes ermitteln und das generell als Variable mit einbringen.

    Deine andren Fragen... mal schauen ;)

  • Nochmal danke! :)

    Lass dir Zeit... :D

    Edit: Noch eine Frage zu deinem Beispiel: Wie kann ich das mit dem OnEventMode benuzten? Ich mag den anderen nämlich nicht :D

    Hat sich erledigt, mann bin ich blöd ;(

    Edit2: Hey, hab grad auf mein Profil geschaut! 100 Profilaufrufe :rock::rock: <--- Ich wollte den schon immer benutzen :D

    Edit3: Und noch eine Frage: Wie ist es möglich auf ein Icon ganz zu verzichten, dass der Text also gleich links anfängt?

    3 Mal editiert, zuletzt von MatthiasG. (28. Februar 2009 um 20:44)

  • *schieb* :D

    Noch eine Frage :D
    Ist es möglich diese Buttons oben rechts in der Ecke (Minimieren, Maximieren, Schließen) nur auf Schließen zu beschränken (s. Koda sObjektinspektor z.B.) ?(

  • Danke, funzt :thumbup:

    So hier noch mal die Liste :D:

    • Wie kann ich ein Hintergrundbild "wiederholen" lassen, so dass die ganze GUI bedeckt ist?
    • Wie kann ich spezielle Punkte "magnetisch" machen, deren Koordinaten ich kenne?
    • Wie finde ich heraus, ob der Anwender in einem bestimmten Bereich herein geklickt hat?
    • Ist Drag&Drop möglich?

    Einmal editiert, zuletzt von MatthiasG. (1. März 2009 um 15:09)