DllCall GUIDesign

  • Hey,

    ich bin vor nicht all zu langer Zeit vor die Funktion "DllCall" getreten.
    Und habe mir aus einem anderen Quellcode auch bisschen was abschauen können und ein kleines Tutorial habe ich auch hinter mir.
    Das Tutorial war allerdings nur geringfügig hilfreich ^^

    [autoit]

    $button = GUICtrlCreateButton("button", 30, 190, 180, 60, 14, -1)
    DllCall("user32.dll", "UINT", "SendMessage", "handle", GUICtrlGetHandle(-1), "UINT", $BCM_SETNOTE, "ptr*", 0, "wstr")
    DllCall("user32.dll", "UINT", "SendMessage", "handle", GUICtrlGetHandle(-1), "UINT", $BCM_SETSHIELD, "ptr*", 0, "BOOL", False)

    [/autoit]

    Da ich allerdings SEHR GERNE mit DllCall arbeiten würde, speziell für ein besseres GUI-Design würde ich gerne eure Hilfe in Anspruch nehmen :thumbup:
    Also folgende Fragen:
    1. wie arbeite ich mit DllCall - GANZ GROBE Erklärung (damit die, die das Thema googlen was finden)
    2. wie finde ich in der WinAPI die Funktionen, die mich interessieren
    UND: wie kann ich verstehen was die Funktionen so richtig machen, bzw. die Parameter machen. (in msdn.microsoft.com konnte ich nicht richtig herauslesen was welcher Parameter zu bedeuten hat | bzw. was man da
    übergeben kann um ein entsprechendes Design zu setzen)
    3. wäre jemand so nett mit DllCall einige Beispiele bezüglich der Design-Änderung einer GUI zu erstellen (z.B. Form, Button, Label etc.)
    [wenn möglich natürlich mit Erklärungen]
    ______
    Ansonsten alle Informationen, die mich diesbezüglich interessieren könnten, sind selbstverständlich auch sehr erwünscht :D
    ______
    Danke schon mal an alle die sich das Thema durchgelesen haben und an die, die mir versuchen zu helfen :)

    €dit: "$BCM_SETNOTE", "$BCM_SETSHIELD" (siehe Beispiel) - eig. brauche ich viel mehr dafür eine Erklärung :D

    Lächel, du kannst sie nicht alle töten.

    2 Mal editiert, zuletzt von masterRobb (12. Juni 2013 um 20:59)

  • Jo, auch ich habe mich vor einiger Zeit damit beschäftigt und muss sagen, dass es auch mir sehr gefällt.

    Das was du da verlangst grenzt fast schon an ein komplett Tutorial :D

    Mir wurde das per Skype erklärt, der Vorteil daran ist, dass der andere (du) immer wenn er fragen hat fragen kann und das man das dort schön individuell erklären kann.

    Ich hatte es in einem Abend (ca. 2-4 Stunden) draußen. Zumindest so weit, daß ich alle deine Fragen beantworten könnte.

    Um Missverständnisse zu vermeiden, mein Name rührt vom Sternenbild und nicht vom Shop her :D


    Rainbow Dash :rock:

    "Das, wobei unsere Berechnungen versagen, nennen wir Zufall." (Albert Einstein)

  • mmm, vlt. hast du recht, eig. brauche ich ein ganzes Tutorial
    -> das "Tutorial", dass ich hatte war eher etwas... mager XD

    Und danke für das Tut von bug-fix :D Ich werde es mal durchgehen und euch danach vermutlich mit Fragen quälen :3

    €dit: habe es gerade nur mal kurz überflogen und das ist eigentlich nicht so die Problematik - glaube ich :D
    Ich habe eher ein Problem herauszufinden WELCHE Parameter ich übergeben kann, weil das scheinen irgendwelche festgelegten Konstanten zu sein.
    Na ja, ich werde es genauer durchgehen, es wäre dennoch vlt. hilfreich, wenn mir jemand schon mal ein Beispiel erstellen könnte
    für DllCalls die das Design bestimmter GUI-Instanzen verändern :)

    Lächel, du kannst sie nicht alle töten.

    Einmal editiert, zuletzt von masterRobb (12. Juni 2013 um 18:41)

    • Offizieller Beitrag

    WELCHE Parameter ich übergeben kann


    Das ist aber kein Problem des DllCalls an sich. Dazu eignet sich die Dokumentation zu den entsprechenden Funktionen. MSDN ist da eine Top-Adresse. Dort werden die Parameter erläutert, evtl. notwendige Strukturen sind verlinkt. Aber all das nützt dir nichts, solange du die grundlegenden Prinzipien von Dll-Calls in AutoIt nicht beherrschst. Deshalb ist der Verweis auf mein Tutorial schon korrekt. ;)

  • ja, ich werde dein Tutorial auch genau durchgehen ^^
    Nur weiß ich (glaube ich) wie ein DllCall funktioniert - ich kann es auch bei einfachen Funktionen wie Beep und so machen.
    Aber wenn es um die Funktion SendMessage aus der user32.dll geht verstehe ich nicht ganz genau was für Parameter ich übergeben kann um welches Design zu kriegen.
    Und ich finde das auch nicht bei deren Beschreibung.
    In meinem Beispiel wurden ja auch Variablen benutzt, die autoIt scheinbar schon kennt...
    _________________
    Hilft mir da dein Tutorial auch weiter? ^^

    Lächel, du kannst sie nicht alle töten.

    • Offizieller Beitrag

    Ich erklär es mal kurz an dem ersten Call. Alle Infos kannst du MSDN entnehmen.

    [autoit]

    $button = GUICtrlCreateButton("button", 30, 190, 180, 60, 14, -1)
    DllCall("user32.dll",
    "UINT", ; == Returntyp
    "SendMessage", ; == Funktionsname [http://msdn.microsoft.com/en-us/library/…0(v=vs.85).aspx]
    "handle", GUICtrlGetHandle(-1), ; == Parametertyp, ~Wert (Handle des zuletzt erstellten Controls - $button)
    "UINT", $BCM_SETNOTE, ; == Parametertyp, ~Wert (Message-Value $BCM_SETNOTE aus der "ButtonConstants.au3")
    "ptr*", 0, ; == WPARAM -- muß für BCM_SETNOTE null sein [http://msdn.microsoft.com/en-us/library/…7(v=vs.85).aspx]
    "wstr") ; == null-terminierter WCHAR String, der den Note-Text enthält

    [/autoit]
  • Wo kann ich die Constants nachschauen?
    Habe mal in der Hilfe bei mir nachgeschaut von "$BCM-SETNOTE" konnte ich nichts finden :)

    Und danke schon mal für die Bemühungen ^^

    Lächel, du kannst sie nicht alle töten.

    • Offizieller Beitrag

    Wo kann ich die Constants nachschauen?
    Habe mal in der Hilfe bei mir nachgeschaut von "$BCM-SETNOTE" konnte ich nichts finden :)

    Und danke schon mal für die Bemühungen ^^


    Konstanten sind in den entsprechenden Include-Dateien. Diese findest du im Installationsordner von AutoIt.
    Um mehr über die Konstanten zu erfahren: Einfach googeln mit "MSDN KONSTANTE", wobei der Konstantenname dann ohne $ zu schreiben ist.

  • ok, super, danke.
    Ich denke damit wären alle meine Probleme geklärt, ich bedanke mich bei allen die geholfen oder versucht haben zu helfen, danke! :D

    Lächel, du kannst sie nicht alle töten.

  • Zitat

    Wo kann ich die Constants nachschauen?

    wozu?
    schau mal links bei den Downloads nach "OrganizeIncludes"
    Damit werden die passenden include-files geladen, wenn eine dort enthaltene Konstante oder Funktion verwendet wird.