Beiträge von meistertogo
-
-
Hallo liebe AuoIt-Community!
Ich habe zwei Fragen zur Verwendung von Scrollbalken in GUIs.
1. Wie lässt sich verhindern, dass Steuerelemente (z. B. Buttons) beim Scrollen verschoben werden?
2. Eine mit GDI+ gezeichnete Grafik (Linie), die länger ist als das GUI wird beim Scrollen kürzer. Wie lässt sich dieses verhindern?
Vielen Dank für Eure Hilfe!
Spoiler anzeigen
[autoit]#include-once
[/autoit] [autoit][/autoit] [autoit]
#include <GDIPlus.au3>
#include <GUIConstants.au3>
#include <GUIScrollbars.au3>
#include <ScrollBarConstants.au3>
#include <WindowsConstants.au3>Opt("GUIOnEventMode", 1)
[/autoit] [autoit][/autoit] [autoit]Global $x1 = 0, $x2 = 600, $xScroll
[/autoit] [autoit][/autoit] [autoit]HotKeySet("{LEFT}", "_Scrollen")
[/autoit] [autoit][/autoit] [autoit]
HotKeySet("{RIGHT}", "_Scrollen")$Fenster = GUICreate("Fenster zu Testzwecken", 500, 500, Default, Default, BitOR(Default, $WS_HSCROLL))
[/autoit] [autoit][/autoit] [autoit]
$Button1 = GUICtrlCreateButton("Zeichnen", 0, 0, 75, 25)
GUICtrlSetOnEvent(-1, "_Zeichnen")
GUISetOnEvent($GUI_EVENT_CLOSE, "_Beenden")
GUISetState()_GUIScrollBars_Init($Fenster)
[/autoit] [autoit][/autoit] [autoit]
_GUIScrollBars_ShowScrollBar($Fenster, $SB_VERT, False)
_GUIScrollBars_SetScrollRange($Fenster, $SB_HORZ, 0, 100)
_GUIScrollBars_SetScrollInfoPage($Fenster, $SB_HORZ, 5)
GUIRegisterMsg($WM_HSCROLL, "_SystemScrollen")
GUIRegisterMsg($WM_VSCROLL, "_SystemScrollen")_GDIPlus_Startup()
[/autoit] [autoit][/autoit] [autoit]$Grafik = _GDIPlus_GraphicsCreateFromHWND($Fenster)
[/autoit] [autoit][/autoit] [autoit]
$Stift = _GDIPlus_PenCreate(0xFF000000, 5)_Zeichnen ()
[/autoit] [autoit][/autoit] [autoit]Do
[/autoit] [autoit][/autoit] [autoit]
Until GUIGetMsg() = -3Func _Zeichnen ()
[/autoit] [autoit][/autoit] [autoit]
_GDIPlus_GraphicsDrawLine($Grafik, $x1, 250, $x2, 250, $Stift)
EndFuncFunc _Scrollen ()
[/autoit] [autoit][/autoit] [autoit]
$xScroll = 0
Switch @HotKeyPressed
Case "{LEFT}"
If $x1+$xScroll > 0 Then $xScroll -= 10
Case "{RIGHT}"
$xScroll +=10
EndSwitch
_GUIScrollBars_ScrollWindow($Fenster, $xScroll, 0)
$x1 += $xScroll
$x2 += $xScroll
EndFuncFunc _SystemScrollen ($hWndGUI, $MsgID, $WParam, $LParam)
[/autoit] [autoit][/autoit] [autoit]
_GUIScrollBars_SetScrollInfoPos($Fenster, $SB_HORZ, _GUIScrollBars_GetScrollInfoTrackPos($Fenster, $SB_HORZ))
$x1 += $WParam
$x2 += $WParam
EndFuncFunc _Beenden ()
[/autoit]
_GDIPlus_PenDispose($Stift)
_GDIPlus_GraphicsDispose($Grafik)
_GDIPlus_Shutdown()
Exit
EndFunc -
Dass jedes Zeichen bzw. jede Zahl nur einmal im Endergebnis vorkommt, könnte man durch ein Array erreichen, das sozusagen den Zeichenvorrat darstellt (s. 19. Post).
-
Das könntest Du mit einem Array machen, auch wenn ich nicht verstehe, warum sich Deine Frage mehrfach ändert und Du nicht die einfachste Lösung (s. 9. Post) verwendest.
-
Wenn Du acht einzelne Strings hast, kannst Du diese Strings einfach mit "&" aneinanderhängen.
[autoit]
[/autoit]
Global $StringEins = "1", $StringZwei = "2"
$StringEins = $StringEins&$StringZwei
MsgBox(0, "Strings", $StringEins)
Exit -
Hallo Rey96,
hier das von Dir gewünschte Beispiel (probier es lieber selbst, bevor Du Dir das ansiehst):Spoiler anzeigen
[autoit]
[/autoit]
$String = ""
For $i = 1 To 8
$String = $String&Chr(Random(65, 122, 1))
Next
MsgBox(0, "8 zufällig generierte Buchstaben", $String)
Exit
P.S.: Wenn Du nur Großbuchstaben erhalten möchtest, einfach anstatt 122 90 einsetzen. -
Da das "Aufbrechen" einer kompilierten Datei jedoch gegen die Lizenzvereinbarung von AuoIt verstößt, macht man sich durch das Dekompilieren strafbar.
-
Hallo Ilse,
ich hatte mich in meiner Antwort wohl etwas undeutlich ausgedrückt.
Falls Du noch grundsätzliche Probleme mit Arrays haben solltest, empfehle ich Dir das wirklich sehr gute Array-Tutorial von BugFix (http://www.bug-fix.info/array_tut.htm). -
Hallo Rufus,
wie laut ein Output tatsächlich ist, kann man nicht anhand der Datei, die ausgegeben wird, feststellen, weil auch die Lautstärke des Lautsprechers eine Rolle spielt.
Wie genau sich die am Lautsprecher eingestellte Lautstärke auf die tatsächliche Lautstärke der Wiedergabe auswirkt, kann man mithilfe der Bass-Dll nicht feststellen (außer man stellt wie bereits gesagt ein Mikrofon vor dem Lautsprecher auf und erzeugt so einen Input-Kanal). -
Hallo Ilse,
[autoit]
meines Wissens nach zeigt die Funktion_ArrayDisplay()
[/autoit]das gesamte Array an.
Besitzt das Array mehrere Spalten, werden alle angezeigt. Dazu benötigt man natürlich ein explizit deklariertes Array mit mehreren Dimensionen (Spalten). -
Hallo Rufus,
es gibt mehrere Möglichkeiten, die Lautstärke/den Pegel von dem festzustellen, "was aus dem Lautsprecher" kommt.
1. Mikrofon vor dem Lautsprecher, das mithilfe der Bass-UDF analysiert wird.
2. Das Programm/die Anwendung, die etwas über den Lautsprecher ausgibt mithilfe der Bass-UDF analysieren.
Falls Du unter "Line In" ein Gerät verstehst, das einen Sound-Input darstellt, ist es mit der Bass-UDF möglich, sämtliche Analyse-Verfahren durchzuführen.
Außerdem wiederholst Du ständig, dass Dein Problem so verbreitet sei.
Was genau Dein Problem allerdings ist bleibt unklar, da Deine Frage nach dem Analysieren eines Audiosignals von einer Website beantwortet wurde.P. S.: Zu Deiner Frage nach dem Feststellen eines Pegels bei der Ausgabe eines Videos sei gesagt, dass auch in diesem Fall ein Stream erstellt werden kann (mit der Funktion
[autoit]_BASS_StreamCreateFile()
[/autoit]).
-
Hallo Rufus,
[autoit]
nicht alle Funktionen der Bass-Dll/-UDF beziehen sich auf Audiodateien.
So auch die von mir genannte Funktion. Sie erwartet ein Handle zu einem Stream-, Musik- oder Aufnahme-Kanal.
Um ein Audiosignal aus dem Internet zu analysieren, musst Du zuerst einen Stream erstellen (z. B. mit_BASS_StreamCreateURL ()
[/autoit]) und dann der Funktion das Handle übergeben.
Ich denke, dass Beispiel in der Hilfe ist sehr aufschlussreich und sollte Dein Problem lösen. -
Hallo Rufus,
[autoit]
ich hoffe die folgende Funktion der Bass-UDF kann Dir weiterhelfen._BASS_ChannelGetLevel()
[/autoit] -
Bin im Internet auf eine weitere, wenn auch simple, Lösung in AuoIt gestoßen.
Hier der Link:
http://www.computerbase.de/forum/showthread.php?t=786817 -
Stimmt.
Danke für den Hinweis!
Habe den Fehler beseitigt. -
Hallo Gh0st,
es ist schön, dass man Dir im Forum helfen konnte.
Allerdings musst Du das Thema durch bearbeiten des ersten Beitrags schon selbst auf gelöst stellen. Einfach das Präfix ändern. -
Anbei meine kleine UDF.
Sie ermöglicht das einfache Zeichnen eines Würfels mit GDI+.Spoiler anzeigen
[autoit];===============================================================================
[/autoit] [autoit][/autoit] [autoit]
; Function Name: _DrawCube
; Description:: The function draws a cube with GDI+. The length of the cube's edge is inserted by the user.
; Parameters: $Fenstertitel: Title of the parent window.
; $Grafik: Handle to the graphics-object.
; $KantenlaengeWuerfel: Length of the cube's edge.
; $Stift: Handle to a pen.
; Requirement: Inclduing GDIPlus.au3 ("#Include<GDIPlus.au3>")
; Author: meistertogo
; Example:
;Lines marked with "°" are not necessary for the function itself.
#include-once;°
#include <GDIPlus.au3>
#include <GUIConstants.au3>;°Opt("GUIOnEventMode", 1);°
[/autoit] [autoit][/autoit] [autoit]Dim $Position[4], $Fensterbreite, $Fensterhoehe, $KantenlaengeWuerfel, $Stift, $Grafik
[/autoit] [autoit][/autoit] [autoit]$Fensterbreite = InputBox("Schritt 1: Zeichnen eines Würfels", "Wie breit soll die Zeichenfläche sein [in Pixeln]?");°
[/autoit] [autoit][/autoit] [autoit]
$Fensterhoehe = InputBox("Schritt 2: Zeichnen eines Würfels", "Wie hoch soll die Zeichenfläche sein [in Pixeln]?");°
$KantenlaengeWuerfel = InputBox("Schritt 3: Zeichnen eines Würfels", "Wie lang sollen die Kanten des Würfels sein [in Pixeln]?");°$Zeichenflaeche = GUICreate("Zeichenfläche", $Fensterbreite, $Fensterhoehe);°
[/autoit] [autoit][/autoit] [autoit]
GUISetOnEvent($GUI_EVENT_CLOSE, "_Beenden");°
GUISetState(@SW_SHOW);°_GDIPlus_Startup()
[/autoit] [autoit][/autoit] [autoit]$Grafik = _GDIPlus_GraphicsCreateFromHWND($Zeichenflaeche)
[/autoit] [autoit][/autoit] [autoit]
_GDIPlus_GraphicsClear($Grafik)
$Stift = _GDIPlus_PenCreate(0xFF00FF00)_DrawCube("Zeichenfläche", $Grafik, $KantenlaengeWuerfel, $Stift)
[/autoit] [autoit][/autoit] [autoit]Func _DrawCube ($FensterTitel, $Grafik, $KantenlaengeWuerfel, $Stift)
[/autoit] [autoit][/autoit] [autoit]
$Position = WinGetPos($FensterTitel)
_GDIPlus_GraphicsDrawRect($Grafik, ($Position[2]-$KantenlaengeWuerfel)/2, ($Position[3]-$KantenlaengeWuerfel)/2, $KantenlaengeWuerfel, $KantenlaengeWuerfel, $Stift);der Startpunkt der folgenden Zeichenvorgänge ist die obere linke Ecke des gezeichneten Rechtecks, das die Frontseite des Würfels darstellt
_GDIPlus_GraphicsDrawLine($Grafik, ($Position[2]-$KantenlaengeWuerfel)/2, ($Position[3]-$KantenlaengeWuerfel)/2, ($Position[2]-$KantenlaengeWuerfel)/2+0.5*$KantenlaengeWuerfel, ($Position[3]-$KantenlaengeWuerfel)/2-0.5*$KantenlaengeWuerfel, $Stift);vom Startpunkt nach hinten
_GDIPlus_GraphicsDrawLine($Grafik, ($Position[2]-$KantenlaengeWuerfel)/2+0.5*$KantenlaengeWuerfel, ($Position[3]-$KantenlaengeWuerfel)/2-0.5*$KantenlaengeWuerfel, ($Position[2]-$KantenlaengeWuerfel)/2+1.5*$KantenlaengeWuerfel, ($Position[3]-$KantenlaengeWuerfel)/2-0.5*$KantenlaengeWuerfel, $Stift);vom Punkt hinter dem Startpunkt nach rechts
_GDIPlus_GraphicsDrawLine($Grafik, ($Position[2]-$KantenlaengeWuerfel)/2+1.5*$KantenlaengeWuerfel, ($Position[3]-$KantenlaengeWuerfel)/2-0.5*$KantenlaengeWuerfel, ($Position[2]-$KantenlaengeWuerfel)/2+$KantenlaengeWuerfel, ($Position[3]-$KantenlaengeWuerfel)/2, $Stift);vom Punkt rechts des Punkts hinter dem Startpunkt nach vorne, zum Punkt rechts des Startpunkts
_GDIPlus_GraphicsDrawLine($Grafik, ($Position[2]-$KantenlaengeWuerfel)/2+1.5*$KantenlaengeWuerfel, ($Position[3]-$KantenlaengeWuerfel)/2-0.5*$KantenlaengeWuerfel, ($Position[2]-$KantenlaengeWuerfel)/2+1.5*$KantenlaengeWuerfel, ($Position[3]-$KantenlaengeWuerfel)/2+0.5*$KantenlaengeWuerfel, $Stift);vom Punkt rechts des Punkts hinter dem Startpunkt nach unten
_GDIPlus_GraphicsDrawLine($Grafik, ($Position[2]-$KantenlaengeWuerfel)/2+1.5*$KantenlaengeWuerfel, ($Position[3]-$KantenlaengeWuerfel)/2+0.5*$KantenlaengeWuerfel, ($Position[2]-$KantenlaengeWuerfel)/2+$KantenlaengeWuerfel, ($Position[3]-$KantenlaengeWuerfel)/2+$KantenlaengeWuerfel, $Stift);vom Punkt raumdiagonal gegenüber des Startpunkts nach vorne
_GDIPlus_GraphicsDrawLine($Grafik, ($Position[2]-$KantenlaengeWuerfel)/2, ($Position[3]-$KantenlaengeWuerfel)/2+$KantenlaengeWuerfel, ($Position[2]-$KantenlaengeWuerfel)/2+0.5*$KantenlaengeWuerfel, ($Position[3]-$KantenlaengeWuerfel)/2+0.5*$KantenlaengeWuerfel, $Stift);vom Punkt unter dem Startpunkt nach hinten
_GDIPlus_GraphicsDrawLine($Grafik, ($Position[2]-$KantenlaengeWuerfel)/2+0.5*$KantenlaengeWuerfel, ($Position[3]-$KantenlaengeWuerfel)/2+0.5*$KantenlaengeWuerfel, ($Position[2]-$KantenlaengeWuerfel)/2+0.5*$KantenlaengeWuerfel, ($Position[3]-$KantenlaengeWuerfel)/2-0.5*$KantenlaengeWuerfel, $Stift);vom Punkt unter und hinter dem Startpunkt nach oben
_GDIPlus_GraphicsDrawLine($Grafik, ($Position[2]-$KantenlaengeWuerfel)/2+0.5*$KantenlaengeWuerfel, ($Position[3]-$KantenlaengeWuerfel)/2+0.5*$KantenlaengeWuerfel, ($Position[2]-$KantenlaengeWuerfel)/2+1.5*$KantenlaengeWuerfel, ($Position[3]-$KantenlaengeWuerfel)/2+0.5*$KantenlaengeWuerfel, $Stift);vom Punkt unter und hinter dem Startpunkt nach rechts
EndFuncDo;°
[/autoit] [autoit][/autoit] [autoit]
Until GUIGetMsg() = $GUI_EVENT_CLOSE;°Func _Beenden ()
[/autoit]
_GDIPlus_PenDispose($Stift)
_GDIPlus_GraphicsDispose($Grafik)
_GDIPlus_Shutdown()
Exit
EndFunc
;
;===============================================================================
;
P.S.: Mir ist klar, dass man auch 2 Rechtecke und 4 Linien oder 5 Rechtecke hätte zeichnen können. -
Hallo PokerFace,
[autoit]
ganz so einfach geht es dann doch nicht.
Wenn Du den Code so verwenden möchtest, müsstest du mit_BASS_Init()
[/autoit]oder einer vergleichbaren Funktion arbeiten.
Außerdem solltest Du beachten, dass das Ausgabegerät nur im Rahmen der Verwendung mit dem jeweiligen Programm und der Bass_UDF geändert wird. Dazu steht in der Hilfe der jeweiligen Funktionen der Bass_UDF mehr. -
Hallo PokerFace,
[autoit]
wenn ich Deine Frage richtig verstanden habe, müsste das auch mit folgender Funktion der BASS_UDF gehen._BASS_SetDevice()
[/autoit] -
Hallo misterspeed,
[autoit]
einige der von Dir gewünschten Eigenschaften der GUI kann man mit den entsprechenden Styles und Ext-Styles (s. Hilfe zur Funktion "GUICreate()
[/autoit]") errreichen. Die Position der GUI würde ich mit
[autoit]@DesktopWidth
[/autoit]und
[autoit]@DesktopHeight
[/autoit]machen.