1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. BugFix

Beiträge von BugFix

  • Probleme mit Schleifen

    • BugFix
    • 13. September 2009 um 20:11

    Meinst du so?

    [autoit]

    While 1 ; Endlosschleife
    If $var Then ; wenn $var True dann
    Do
    ; irgendein Code
    Until Not $var ; bis $var False
    EndIf
    WEnd

    [/autoit]
  • Deutsche Hilfe - was gibts zu optimieren?

    • BugFix
    • 13. September 2009 um 18:18
    Zitat von Der_Doc

    Also so wie in meinem Post?


    Ja, wobei Band in Rebar wieder eins der Worte ist, dessen Bedeutung klar ist, man aber keine sinnvolle Übersetzung findet. Ein Grund mehr nicht nach Übersetzungen zu suchen.

  • Deutsche Hilfe - was gibts zu optimieren?

    • BugFix
    • 13. September 2009 um 18:04
    Zitat von Tweaky

    siehst du
    Parent Item, Child Item, String, non-zero auch als Steuerelement an


    Wenn es selbst auch keine Controls sind, so sind sie absolut selbsterklärend (auch ohne große Englisch-Kenntnisse) und bei non-zero würde ich eine Übersetzung glatt verweigern. :D Nicht-Null ?? Sachlich korrekt, aber sieht und klingt irgendwie blöd. ;)

  • Deutsche Hilfe - was gibts zu optimieren?

    • BugFix
    • 13. September 2009 um 17:25

    Ich bleibe dabei:
    Namen von Controls sollten keinesfalls übersetzt werden!
    Es ist doch völlig ausreichend, wenn im Glossar eine nähere Beschreibung/Erklärung vorhanden ist. :rolleyes:

  • Programm aufrufen

    • BugFix
    • 13. September 2009 um 17:02

    Zum Editor ersetzen hatte ich mal einen Launcher gebastelt. Da die Notepad.exe unter Umständen 4-fach vorhanden ist, müssen alle Vorkommen auch außer Betrieb gesetzt werden.
    Vielleicht nützt es dir was. https://autoit.de/index.php?page…31932#post31932

  • RichEdit, dessen Text man nicht makieren kann.

    • BugFix
    • 13. September 2009 um 13:51

    Hier mal eine Bsp.-Lösung. Übrigens braucht man WM_MOVE ja gar nicht. Das Child ist durch die Definition bereits an das Parent gekettet und verarbeitet somit auch die MOVE Message des Parents.

    Spoiler anzeigen
    [autoit]

    #include <WinAPI.au3>
    #include <WindowsConstants.au3>
    #include <GUIConstantsEx.au3>

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

    $GUI = GUICreate('TEST', -1, -1, -1, -1, Default, $GUI_WS_EX_PARENTDRAG)
    $Edit = GUICtrlCreateEdit('Dieser' & @CRLF & 'Text' & @CRLF & 'darf' & @CRLF & 'nicht' _
    & @CRLF & '- gelöscht' & @CRLF & '- geändert' & @CRLF & 'oder' & @CRLF & 'sonstwie' _
    & @CRLF & 'manipuliert' & @CRLF & 'werden', 10, 10, 180, 120, BitOR($WS_VSCROLL, $WS_HSCROLL))
    $Button = GUICtrlCreateButton('Ende', 10, 140, 50, 20)
    ControlFocus($GUI, '', $Button)

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

    Global Const $SM_CAPTION = _WinAPI_GetSystemMetrics(4)
    Global Const $SM_HOR_SB = _WinAPI_GetSystemMetrics(10) -1 ; Breite der Scrollbox auf horizontalaer Scrollbar (-1 zum Überlappen)
    Global Const $SM_VER_SB = _WinAPI_GetSystemMetrics(9) -1 ; Breite der Scrollbox auf vertikaler Scrollbar
    $E_Pos = ControlGetPos($GUI, '', $Edit)
    $Child = GUICreate('', $E_Pos[2]-$SM_VER_SB, $E_Pos[3]-$SM_HOR_SB, $E_Pos[0], $E_Pos[1]+$SM_CAPTION, $WS_POPUP, $WS_EX_MDICHILD, $GUI)
    GUISetBkColor(0xff0000, $Child)
    WinSetTrans($Child, '', 40)

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

    GUISetState(@SW_SHOW, $Child)
    GUISetState(@SW_SHOW, $GUI)

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

    GUIRegisterMsg($WM_COMMAND, "MY_WM_COMMAND")

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

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $Button, -3
    Exit
    EndSwitch
    If BitAND(WinGetState($Child), 8) Then
    GUISetState(@SW_RESTORE, $GUI)
    EndIf
    WEnd

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

    Func MY_WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
    If $lParam = GUICtrlGetHandle($Edit) Then
    ControlFocus($GUI, '', $Button) ; wenn Focus auf Edit ==> Focus auf anderes Ctrl setzen
    EndIf
    Return $GUI_RUNDEFMSG
    EndFunc

    [/autoit]
  • RichEdit, dessen Text man nicht makieren kann.

    • BugFix
    • 13. September 2009 um 09:32
    Zitat von Deepred

    Ja ok. Aber ist das nicht etwas unprofessionell? Was ist, wenn man die MainGUI veschiebt? Dann bleibt doch das Transparente Fenster an der selben stelle

    Das kannst du mit WM_MOVE abfangen und dann dein Child mitverschieben.
    Und wieso unprofessionell? Wenn etwas ohne viel Aufwand funktioniert ist doch OK - oder?

    Zitat von JoEtHeKiLlEr

    aber ich denke mal die Breite von Scrollbars variiert je nach Style

    Das kannst man mit _WinAPI_GetSystemMetrics ermitteln.

    Es kommt sicher auf den Verwendungszweck an. Vollständigerweise muß man hinzufügen, dass bei dieser Methode der User die Möglichkeit hat, sich per Tastatur in das Editfeld zu bewegen und dann zu manipulieren. Aber da kann man auch die Cursorposition abfangen und entsprechend reagieren.

  • Checken ob MsgBox kommt und drauf reagieren

    • BugFix
    • 12. September 2009 um 23:42

    Hi, du brauchst 'ne Endlosschleife (While - WEnd) und darin prüfst du mit Winwait() auf das Erscheinen der Meldung. Dann simulierst du OK-Klick und die Schleife wartet erneut auf das Erscheinen der Fehlermeldung.

  • RichEdit, dessen Text man nicht makieren kann.

    • BugFix
    • 12. September 2009 um 23:34

    Wir wollen mal nicht mit Kanonen auf Spatzen schießen. :D
    Hierfür braucht es wahrlich keinen Hook. Leg einfach ein Child-GUI (POPUP) exakt über das Edit und laß nur die Scrollbar frei. Transparenz auf 0 und fertig. ;)

  • Checkboxen auswerten

    • BugFix
    • 12. September 2009 um 23:18

    Ich verwende dafür Dualzahlen. Dann kannst du ganz simpel aus der Summe prüfen, welche Boxen gecheckt sind. Macht hier die Funktion _ReadCB().

    Spoiler anzeigen
    [autoit]

    ; Muster Checkbox-Bearbeitung
    ; Ziel: einfache Abfrage, welche CB aktiviert sind

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

    #include <GUIConstants.au3>
    Opt('GUIOnEventMode', 1)
    Opt("MustDeclareVars", 1)
    Global $bCheckAll, $bUnCheckAll, $GUI, $i, $str
    Global $arCB[20][2] ; Array für Handle und Dual-Wert der CB
    For $i = 0 To UBound($arCB) -1
    $arCB[$i][1] = 2^$i ; Zuweisung eindeutiger Wert
    Next
    Global $Checked = 0 ; Variable nimmt Status ALLER Checkboxen in einem Wert auf,
    ; Startstatus für alle: UNCHECKED
    Global $w = 500, $h = 20*30+40, $l = (@DesktopWidth-$w)/2, $t = (@DesktopHeight-$h)/2
    Global $top = -10
    $GUI = GUICreate('Test Checkbox', $w, $h, $l, $t)
    GUISetOnEvent($GUI_EVENT_CLOSE, '_Ende')
    For $i = 0 To UBound($arCB) -1
    $top += 30
    $arCB[$i][0] = GUICtrlCreateCheckbox('CheckBox_' & $i+1, 40, $top, 120)
    GUICtrlSetOnEvent(-1, '_ClickCB')
    Next
    $bCheckAll = GUICtrlCreateButton('Alle markieren', 250, 20, 150, 21)
    GUICtrlSetOnEvent(-1, '_CheckAll')
    $bUnCheckAll = GUICtrlCreateButton('Markierung aufheben', 250, 50, 150, 21)
    GUICtrlSetOnEvent(-1, '_UnCheckAll')
    GUISetState()

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

    While 1
    Sleep(100)
    WEnd

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

    Func _Ende()
    Exit
    EndFunc

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

    Func _ClickCB()
    For $i = 0 To UBound($arCB) -1
    If $arCB[$i][0] = @GUI_CtrlId Then
    $Checked = BitXOR($Checked, $arCB[$i][1])
    _ReadCB()
    ExitLoop
    EndIf
    Next
    EndFunc

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

    Func _CheckAll()
    For $i = 0 To UBound($arCB) -1
    If Not BitAND($Checked, $arCB[$i][1]) Then
    GUICtrlSetState($arCB[$i][0], $GUI_CHECKED)
    $Checked = BitXOR($Checked, $arCB[$i][1])
    EndIf
    Next
    _ReadCB()
    EndFunc

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

    Func _UnCheckAll()
    For $i = 0 To UBound($arCB) -1
    If BitAND($Checked, $arCB[$i][1]) Then
    GUICtrlSetState($arCB[$i][0], $GUI_UNCHECKED)
    $Checked = BitXOR($Checked, $arCB[$i][1])
    EndIf
    Next
    _ReadCB()
    EndFunc

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

    Func _ReadCB() ; Fkt. dient nur zur Ausgabe, welche CB markiert sind
    Local $str = 'Markiert: '
    For $i = 0 To UBound($arCB) -1
    If BitAND($Checked, $arCB[$i][1]) Then $str &= $i+1 & ', '
    Next
    WinSetTitle($GUI, '', StringTrimRight($str, 2))
    EndFunc

    [/autoit]
  • Windows Töne

    • BugFix
    • 10. September 2009 um 12:45

    Warum willst du eigentlich zum Sound noch 'ne MsgBox einblenden?
    Also Überwachung, ob auf eine Sounddatei zugegriffen wird soll es werden. Da fällt mir adhoc nix ein.
    Wenn ich nicht irre, wird die Datei ja nicht mal vom System gesperrt. Abspielen ist ja reiner Lesevorgang und das könnten mehrere Anwendungen zeitgleich tun. Insofern habe ich keinen Ansatz, woher die Info stammen soll, dass die Datei in Benutzung ist.

  • Windows Töne

    • BugFix
    • 10. September 2009 um 12:15
    Zitat von Reaker

    wenn ein Windows Ton geöffnet wird


    Was ist Windows Ton ?
    Meinst du wenn irgendein Sound abgespielt wird?

  • Array 3D effektiv durchsuchen

    • BugFix
    • 9. September 2009 um 10:11

    Danke für beide Ideen.

    Oscar : Das ist dann ein klares Votum für das Dictionary Object. :thumbup:
    Erspart mir dann auch einiges an Arraymanagement. Werde beim Löschen von Werten dann das Array nicht mehr verändern, sondern nur den Schlüsselwert entfernen. Bringt auch wieder Zeitgewinn.
    Ist eigentlich für ein altes Projekt, dass aber einer Optimierung bedarf. ;)
    Wenn alles fertig ist, zeig ich euch, was draus geworden ist.

  • Array 3D effektiv durchsuchen

    • BugFix
    • 8. September 2009 um 22:48

    OK, Danke.
    Ich hatte überlegt, ob es Sinn macht, wie bei Quicksearch vorzugehen. Bloß bei unsortiert müßte ich dann willkürlich die Richtung wechseln und noch zusätzlich die Bereiche verwalten.
    Dann bleib ich bei meiner Version.

  • Array 3D effektiv durchsuchen

    • BugFix
    • 8. September 2009 um 22:33

    Sortiert sind die Daten nur direkt nach dem Erstellen. Mögliches Löschen von Elementen führt allerdings zu einer geänderten Reihenfolge, da aus Geschwindigkeitsgründen das letzte Arrayelement an die Position des gelöschten geschrieben und dann das Array per ReDim verkleinert wird.

  • Array 3D effektiv durchsuchen

    • BugFix
    • 8. September 2009 um 20:06

    Hi,
    ich habe ein 3D-Array, das durchaus einige hundert Einträge haben kann.
    Nun suche ich eine Möglichkeit dieses Array effektiv zu durchsuchen. Bisher iteriere ich durch das Array, was bei vielen Elementen nicht unbedingt zügig ist. Die Suchposition ist fix, s. Code.

    [autoit]

    Local $ar3D[500][20][5]

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

    Func __ArraySearch(ByRef $array, $search)
    For $i = 0 To UBound($array) -1
    If $array[$i][0][0] = $search Then
    Return $i
    EndIf
    Next
    Return -1
    EndFunc ;==>__ArraySearch

    [/autoit]

    Falls ihr Ideen habt, immer her damit. ;)

  • Ausgabe von Konsole lesen

    • BugFix
    • 8. September 2009 um 17:49

    Schau dir mal StdoutRead() an.

  • Frage zu Dll und GUICtrlCreatePIc.

    • BugFix
    • 7. September 2009 um 20:15
    Zitat von Raupi

    Wo finde ich die Funktionen GetModuleHandle und LoadImage?


    Ja, sind auch in der WinApi.au3

  • Deutsche Hilfe - was gibts zu optimieren?

    • BugFix
    • 7. September 2009 um 19:54

    Vielleicht ein Kompromiß-Vorschlag:
    Die Namen der Controls werden überhaupt nicht übersetzt! Es wird ein Glossar angefügt, indem dann eine deutsche Be- und/oder Umschreibung zu dem Begriff steht.
    Mir persönlich rollen sich die Fußnägel auf, wenn ich z.B. das Wort Listenansicht lese (Grrrr).
    Ich kenne keine in deutsch erstellten Programmiersprachen. Weshalb soll man also mühselig deutsche Entsprechungen für Begriffe suchen, deren Bedeutung absolut unstrittig ist. Das ergibt für mich keinen Sinn und erinnert mich an ähnliche Vergewaltigungen der Sprache um Gleichberechtigung der Geschlechter durchzusetzen. (Da hatten wir mal eine Gleichstellungsbeauftragte in der Landesregierung, die dann für Bürgermeister das geschlechtsneutrale Wortungetüm die Person, die das Amt des Bürgermeisters innehat erschuf.) :D

  • ListView, Items nicht verschieben

    • BugFix
    • 7. September 2009 um 09:42

    Die Spaltenbreite fixieren, ob das per Style geht, weiß ich grad nicht. Aber so geht es auf jeden Fall:

    Spoiler anzeigen
    [autoit]

    #include <ListViewConstants.au3>
    #include <StructureConstants.au3>
    #include<GUIConstantsEx.au3>
    #include<WindowsConstants.au3>
    #include <GUIListView.au3>

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

    $gui = GUICreate('test')
    $hListView = GUICtrlCreateListView('Spalte1|Spalte2', 10, 10, 300, 200)
    _GUICtrlListView_SetColumnWidth($hListView, 0, 146)
    _GUICtrlListView_SetColumnWidth($hListView, 1, $LVSCW_AUTOSIZE_USEHEADER)
    For $i = 1 To 10
    GUICtrlCreateListViewItem('Zeile ' & $i & ' Spalte 1|Zeile ' & $i & ' Spalte 2', $hListView)
    Next

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

    ; hier für Vergleich die Spaltenbreite speichern:
    Global $aColumnWidth[_GUICtrlListView_GetColumnCount($hListView)]
    For $i = 0 To UBound($aColumnWidth) -1
    $aColumnWidth[$i] = _GUICtrlListView_GetColumnWidth($hListView, $i)
    Next

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

    GUISetState()

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

    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

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

    Do
    $msg = GUIGetMsg()
    Until $msg = $GUI_EVENT_CLOSE

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

    Func _Columnwidth()
    For $i = 0 To UBound($aColumnWidth) -1
    If _GUICtrlListView_GetColumnWidth($hListView, $i) <> $aColumnWidth[$i] Then
    _GUICtrlListView_SetColumnWidth($hListView, $i, $aColumnWidth[$i])
    EndIf
    Next
    EndFunc

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

    Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView
    $hWndListView = $hListView
    If Not IsHWnd($hListView) Then $hWndListView = GUICtrlGetHandle($hListView)

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

    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    Switch $hWndFrom
    Case $hWndListView
    Switch $iCode
    Case -12 ; Spaltenbreite wurde verändert
    _Columnwidth()
    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_NOTIFY

    [/autoit]

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™