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

  • Farben Sortieren / Gruppieren

    • BugFix
    • 15. März 2023 um 09:57
    Zitat von UEZ

    Manchmal suche ich nach einer bestimmten Farbe und wenn die Liste unsortiert ist, dann ist das nicht so optimal, um die Farbe zu finden.

    Genau zu dem Zweck hatte ich das hier erstellt:

    Beitrag

    Colortable

    Bevor ihr mich steinigt - natürlich weiß ich, dass es Farbtabellen, Farbmixer, Wizards etc. en masse gibt, hab ja selbst einige erstellt. ^^

    Warum habe ich nun trotzdem was Neues gemacht? Ich werde älter, die Augen schwächer und da wollte ich die Farben auf großen Flächen sehen und auch gern eine gängige Auswahl auf einen Blick.
    Ich habe die Farben etwas gruppiert.

    Das dient dazu, beim Gestalten von Programmen schnell die passenden Farben für Gui und/oder Controls zu finden.

    Mit Mausklick links wird…
    BugFix
    22. Juli 2022 um 18:32
  • Diskussions-Posts aus Umfrage zum Thema "Wie informiert Ihr Eure User in einer Domain..."

    • BugFix
    • 15. März 2023 um 09:52
    Zitat von Peter S. Taler

    Der Einsatz von privaten Handys verboten - It Sicherheit bedroht?

    Wir sprechen nicht von Max Mustermanns Handwerksbetrieb mit 20 Hanseln, sondern von Konzernen. Und ja: Da kann der Einsatz privater Endgeräte ein Sicherheitsrisiko darstellen (z.B. Spionage, ist viel häufiger als man denkt). Dazu gibt es eine betriebliche Risikoanalyse und wenn diese ergibt, dass von den Geräten ein erhöhtes Risiko ausgeht, werden sie halt untersagt.

    Zitat von Peter S. Taler

    Und wie will man verbieten, dass private Handys im Unternehmen eingesetzt werden? Wie will man untersagen, dass in der Warenannahme mal schnell ein Foto von beschädigter Anlieferung mit dem privaten Handy gemacht wird? Oder der Mitarbeiter von seinem privaten Handy von einer Dienstfahrt im Unternehmen eine Rückfrage stellt?

    Per Anordnung. Steht dann auch im Arbeitsvertrag. Und Zuwiderhandlungen führen dann nicht nur zu einer Abmahnung, sondern sehr wahrscheinlich zur sofortigen Kündigung.

    Zitat von Peter S. Taler

    Mancher Verantwortliche sollte erst verstehen wovon er spricht - bevor er den Mund aufmacht!

    Peter, bitte nicht solche verallgemeinernden Bewertungen. Weder du noch ich haben ausreichend Hintergrundinformationen zur Verfügung, um die Verständnisfähigkeit "Mancher Verantwortlicher" bewerten zu können. Zudem würde ich uns auch die Fachkompetenz dazu nicht zwingend anheim stellen.

    Ich bin immer wieder platt, wenn ich sehe, dass Firmenmitarbeiter dienstlich auf WhatsApp kommunizieren. Und das nicht nur gebilligt, sondern von der Firmenleitung als Kommunikationsweg gewollt.

    Ist für mich immer wieder der Beweis, dass die DGSVO nur als Feigenblatt zum Ziel hat, den Datenschutz zu verbessern, tatsächlich könnte eher das monetäre Interesse dahinter den Ausschlag gegeben haben (mein ganz privater Eindruck). Schließlich wurde damit ein völlig neuer Dienstleistungszweig geschaffen, der horrende Kosten für jeden Betrieb mit sich gebracht hat und reichlich Steuern in die Bundeskasse spült.


    Ich arbeite in einer kleinen Bude, im Innendienst sind 5 Leute - da ist ein Benachrichtigungssystem obsolet.

    Für größere Strukturen halte ich es aber für sinnvoll.

    Zitat von Peter S. Taler

    doch wo ist unser Engagement gelandet? Bei einer Umfrage - warum? Ich hatte schon den ersten Prototyp eines Editors fertig - ebenso wie andere - die auch schon einige Teile fertig hatten. Ganz abgesehen von Waters Entwurf! Dann kamen die Bedenken in Form von "darf man das" und schwubs war es zu Ende.

    Softwareengeneering bedeutet nicht nur, dass man ein Produkt codiert, sondern es anforderungs- und anwendergerecht erstellt. Um es auch in einer Firma einbinden zu können, geht es nicht um das "darf man das", sondern, wie der Diskussion zu entnehmen war, um die erforderlichen Schritte um ein neues Verfahren in einen Betriebsablauf zu implementieren (Pflichtenheft etc. ).

    In unserer Bude frage ich meinen Chef, was er davon hält, und wenn er OK sagt erstelle ich die EDV- und QM- erforderlichen Belege und setze das um. Selbst in unserer kleinen Firma gibt es Richtlinien. In größeren Unternehmen ist das entsprechend aufwändiger, da viel mehr Faktoren zu berücksichtigen sind.

    Und ich denke du irrst, wenn du meinst, dass es "schwubs zu Ende" sei. Wie der TE sagte, wurden ja inzwischen offizielle Softwareprodukte gefunden, die den Anforderungen genügen. Die Umfrage hier dient dazu, ob unabhängig davon das Projekt ausgeführt werden soll, sodass es absolut rechtssicher ist und später bei Bedarf eben auch auf betrieblicher Ebene eingesetzt werden kann. Und der Aufwand des Skript-Schreibens ist nunmal nicht der größte. Deshalb sollte man auch nicht damit anfangen.

    Aber es wird dir doch nicht verwehrt deine Lösung im Skripte-Forum zu präsentieren, gerne auch mit Verweis auf den Ursprungs-Thread, der dich dazu anregte. Ich würde das auch sehr begrüßen. Wir leben im Forum von der Vielfalt der Beiträge.

    Ich kann nur Danke sagen für dein Engagement. Aber fühl dir nicht auf den Schlips getreten, wenn diverse Meinungen aufeinander treffen.

    Wir sind nicht hier um uns zu bauchpinseln, aber eine gewisse Netiquette können wir voneinander erwarten. Und wenn man, was ja im Eifer des Gefechts passieren kann, doch mal über das Ziel hinaus schießt, muss man auch verkraften, dafür Gegenwind zu ernten.

  • Diskussion zu: FAQ SciTE Editor

    • BugFix
    • 14. März 2023 um 18:20
    Zitat von BigRox

    Da muss es doch schon ein Lösung geben

    Jetzt ja. :rofl:

    Ich habe das vorab Geschriebene mal umgesetzt. Der Hotkey zum Beenden ist kein Muss, kann man anders lösen.

    AutoIt: SciTE_DrawTabItem.au3
    ;-- TIME_STAMP   2023-03-14 18:17:59
    
    #include <FontConstants.au3>
    #include <GuiTab.au3>
    #include <WinAPIGdi.au3>
    #include <WinAPISys.au3>
    #include <WinAPIMisc.au3>
    #include <WindowsConstants.au3>
    
    
    HotKeySet("!{F8}", _End)            ; <Alt><F8> Beenden
    
    AdlibRegister(_CheckSciTE)
    
    Global $gm_SciTE[]
    $gm_SciTE.ExistsLast = 0
    $gm_SciTE.ExistsCurr = 0
    
    
    While True
        Sleep(50)
    WEnd
    
    Func _End()
        AdlibUnRegister(_CheckSciTE)
        MsgBox(0, 'SciTE TabItem', 'Beendet!')
        Exit
    EndFunc
    
    
    Func _CheckSciTE()
        If ProcessExists("SciTE.exe") Then
            $gm_SciTE.ExistsCurr = 1
            If $gm_SciTE.ExistsLast = 0 Then
                $gm_SciTE.ExistsLast = 1
                _DrawTabItem()
                AdlibRegister(_MouseHoversTab, 150)
            EndIf
        Else
            $gm_SciTE.ExistsCurr = 0
            If $gm_SciTE.ExistsLast = 1 Then
                $gm_SciTE.ExistsLast = 0
                AdlibUnRegister(_MouseHoversTab)
            EndIf
        EndIf
    EndFunc
    
    
    Func _MouseHoversTab()
        Local Static $iHoverLast = 0
        Local $mTab = _SciTE_GetTabInfo()
        If @error Then Return
        Local $tPoint = _WinAPI_GetMousePos(True, $mTab.hTab)
        Local $tRect = $mTab.RectItem
        Local $isHover = _WinAPI_PtInRect($tRect, $tPoint)
        If $isHover = 1 And $iHoverLast = 0 Then
            $iHoverLast = 1
        ElseIf $isHover = 0 And $iHoverLast = 1 Then
            $iHoverLast = 1
            Return _DrawTabItem()
        EndIf
    EndFunc
    
    Func _DrawTabItem()
        Local $mTab = _SciTE_GetTabInfo()
        If @error Then Return
        Local $hDC = _WinAPI_GetDC($mTab.hTab)
        Local $hFont = _WinAPI_CreateFont(15, 0, 0, 0, 400, False, False, False, $DEFAULT_CHARSET, _
                    $OUT_DEFAULT_PRECIS, $CLIP_DEFAULT_PRECIS, $DEFAULT_QUALITY, 0, 'Arial')
        Local $hOldFont = _WinAPI_SelectObject($hDC, $hFont)
        Local $tRect = $mTab.RectItem   ; in Variable extrahieren - sonst kein ByRef-Zugriff mit _DrawText möglich
        _WinAPI_SetTextColor($hDC, 0xAA0020)
        _WinAPI_SetBkColor($hDC, 0xFFFFFF)
        _WinAPI_DrawText($hDC, $mTab.Item, $tRect, BitOR($DT_BOTTOM,$DT_CENTER))
        _WinAPI_SelectObject($hDC, $hOldFont)
        _WinAPI_DeleteObject($hFont)
        _WinAPI_ReleaseDC(0, $hDC)
    EndFunc
    
    
    Func _SciTE_GetTabInfo()
        Local $hScite, $aResult, $aChild, $hWndTab = Null
        Local $mResult[]
        $hScite = WinGetHandle('[ACTIVE]')
        $aResult = DllCall("user32.dll", "int", "GetClassNameW", "hwnd", $hScite, "wstr", "", "int", 4096)
        If Not @error And $aResult[2] = 'SciTEWindow' Then
            $aChild = _WinAPI_EnumChildWindows($hScite) ; only visible
            If Not @error Then
                For $i = 1 To $aChild[0][0]
                    If $aChild[$i][1] = "SciTeTabCtrl" Then
                        $hWndTab = $aChild[$i][0]
                        ExitLoop
                    EndIf
                Next
            EndIf
            If $hWndTab <> Null Then
                $mResult.hSciTE   = $hScite
                $mResult.Title    = WinGetTitle($hScite)
                $mResult.hTab     = $hWndTab
                $mResult.RectTab  = _WinAPI_GetWindowRect($hWndTab)
                $mResult.Style    = _WinAPI_GetWindowLong ($hWndTab, $GWL_STYLE)
                $mResult.StyleEx  = _WinAPI_GetWindowLong ($hWndTab, $GWL_EXSTYLE)
                $mResult.Index    = _GUICtrlTab_GetCurFocus($hWndTab)
                $mResult.Item     = _GUICtrlTab_GetItemText($hWndTab, $mResult.Index)
                $mResult.RectItem = _GUICtrlTab_GetItemRectEx($hWndTab, $mResult.Index)
                Return $mResult
            EndIf
        EndIf
        Return SetError(1)
    EndFunc
    Alles anzeigen

    Dateien

    SciTE_DrawTabItem.au3 3,59 kB – 144 Downloads
  • Diskussion zu: FAQ SciTE Editor

    • BugFix
    • 14. März 2023 um 14:01

    Ich habe mal ein Skript erstellt, zum Zeichnen des Tab-Item.

    Sieht dann so aus:

    AutoIt: SciTE_DrawTabItem.au3
    ;-- TIME_STAMP   2023-03-14 13:53:32
    
    #include <FontConstants.au3>
    #include <GuiTab.au3>
    #include <WinAPIGdi.au3>
    #include <WinAPISys.au3>
    #include <WindowsConstants.au3>
    
    
    HotKeySet("!{F7}", _DrawTabItem)   ; <Alt><F7> Markiert aktives TabItem
    HotKeySet("!{F8}", _End)            ; <Alt><F8> Beenden
    
    While True
        Sleep(10)
    WEnd
    
    
    Func _End()
        Exit
    EndFunc
    
    
    Func _DrawTabItem()
        Local $mTab = _SciTE_GetTabInfo()
        Local $hDC = _WinAPI_GetDC($mTab.hTab)
        Local $hFont = _WinAPI_CreateFont(15, 0, 0, 0, 500, True, False, False, $DEFAULT_CHARSET, _
                    $OUT_DEFAULT_PRECIS, $CLIP_DEFAULT_PRECIS, $DEFAULT_QUALITY, 0, 'Arial')
        Local $hOldFont = _WinAPI_SelectObject($hDC, $hFont)
        Local $tRect = $mTab.RectItem   ; in Variable extrahieren - sonst kein ByRef-Zugriff mit _DrawText möglich
        _WinAPI_SetTextColor($hDC, 0xAA0020)
        _WinAPI_SetBkColor($hDC, 0xFFFFFF)
        _WinAPI_DrawText($hDC, $mTab.Item, $tRect, BitOR($DT_BOTTOM,$DT_CENTER))
        _WinAPI_SelectObject($hDC, $hOldFont)
        _WinAPI_DeleteObject($hFont)
        _WinAPI_ReleaseDC(0, $hDC)
    EndFunc
    
    
    Func _SciTE_GetTabInfo()
        Local $hScite, $aResult, $aChild, $hWndTab = Null
        Local $mResult[]
        $hScite = WinGetHandle('[ACTIVE]')
        $aResult = DllCall("user32.dll", "int", "GetClassNameW", "hwnd", $hScite, "wstr", "", "int", 4096)
        If Not @error And $aResult[2] = 'SciTEWindow' Then
            $aChild = _WinAPI_EnumChildWindows($hScite) ; only visible
            If Not @error Then
                For $i = 1 To $aChild[0][0]
                    If $aChild[$i][1] = "SciTeTabCtrl" Then
                        $hWndTab = $aChild[$i][0]
                        ExitLoop
                    EndIf
                Next
            EndIf
            If $hWndTab <> Null Then
                $mResult.hSciTE   = $hScite
                $mResult.Title    = WinGetTitle($hScite)
                $mResult.hTab     = $hWndTab
                $mResult.RectTab  = _WinAPI_GetWindowRect($hWndTab)
                $mResult.Style    = _WinAPI_GetWindowLong ($hWndTab, $GWL_STYLE)
                $mResult.StyleEx  = _WinAPI_GetWindowLong ($hWndTab, $GWL_EXSTYLE)
                $mResult.Index    = _GUICtrlTab_GetCurFocus($hWndTab)
                $mResult.Item     = _GUICtrlTab_GetItemText($hWndTab, $mResult.Index)
                $mResult.RectItem = _GUICtrlTab_GetItemRectEx($hWndTab, $mResult.Index)
                Return $mResult
            EndIf
        EndIf
        Return SetError(1)
    EndFunc
    Alles anzeigen

    Nun kannst du dir Gedanken machen:

    • Wie du das aufrufst (Überwachung aktives Tab-Item - mit der Funktion _SciTE_GetTabInfo findest du die nötigen Informationen.)
    • Wie du dafür sorgst, dass beim Überfahren des TabItem mit der Maus entweder nicht neu gezeichnet wird, oder wieder die modifizierten Daten gezeichnet werden.
      Da der modifizierte Text sofort verschwindet (und die alte Version erscheint), wenn der Mauszeiger in das Rect gerät, würde ich beim Verlassen das Item neu Zeichnen. (Prüfen z.B. mit .._PtInRect() - aber beachten: Die Itemkoordinaten sind relativ zum TabCtrl!) Ist dann auch ein interessanter optischer Effekt. ;)

    Bekommst du mit AutoIt alles gebacken. Probier dich mal aus.

    Wenn es gar nicht geht, sind wir ja auch noch da.

    Dateien

    SciTE_DrawTabItem.au3 2,48 kB – 156 Downloads
  • Diskussion zu: FAQ SciTE Editor

    • BugFix
    • 13. März 2023 um 17:31
    Zitat von BigRox

    Das ist wohl ein Einstellungssache oder ein Installationsfehler

    Oder - was ich jetzt mal vermute: ein Systemfehler (Windows 10/11 ? ) .

    Ich habe Windows 7, da sahen die Fenster noch ordentlich aus und nicht so platt gequetscht. Vielleicht liegt es daran.

  • Diskussion zu: FAQ SciTE Editor

    • BugFix
    • 13. März 2023 um 12:06
    Zitat von BigRox

    Wenn ich den Tab wechsele, so kann man den aktuellen Tab fast nicht von den anderen Tabs unterscheiden.

       Fast nicht zu unterscheiden?! Da solltest du dich an den Optiker deines Vertrauens wenden. ;)

    Zitat von BigRox

    Daher suche ich nach einer Möglichkeit, den aktuellen Tab besser hervorzuheben z.B. den Text (der Dateiname) fett oder in einer anderen Farbe schreiben o.ä.


    Eventuell gibt es ja eine Möglichkeit dies in SciTE so einzustellen, oder mit LUA etwas in dieser Art "nachzuhelfen".

    Dergleichen ist so nicht umsetzbar.

    Einzige vorstellbare Möglichkeit:

    - Tab-Handle abfragen

    - Style auf $TCS_OWNERDRAWFIXED setzen

    - Globalen Hook verwenden um WM_DRAWITEM abzufangen

    Ich hatte mal getestet, ein eigenes Tab-Ctrl benutzerdefiniert zu zeichnen:

    Spoiler anzeigen
    AutoIt
    #include <FontConstants.au3>
    #include <TabConstants.au3>
    #include <WinAPI.au3>
    #include <GuiConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <GuiTab.au3>
    
    Global Const $ODT_TAB        = 101
    Global Const $ODS_SELECTED   = 0x0001
    Global Const $ODA_DRAWENTIRE = 0x1
    Global Const $ODS_FOCUS      = 0x0010
    
    Global $aColTabItem[3][2] = [['Item1',0x11AADD],["Item2",0xEEBB99],["Item3",0x4763FF]] ; [[TabItem-Bezeichnung,TabItem-Color]]
    Global $hFont, $iBrush
    
    $hGUI = GUICreate("Draw Tab", 300, 200)
    $hTab = GUICtrlCreateTab(10, 10, 280, 180, $TCS_OWNERDRAWFIXED)
    $TabItem_1 = GUICtrlCreateTabItem("Item1")
    GUICtrlCreateLabel("L1", 10, 33, 277, 155)
    
    $TabItem_2 = GUICtrlCreateTabItem("Item2")
    GUICtrlCreateLabel("L2", 10, 33, 277, 155)
    
    $TabItem_2 = GUICtrlCreateTabItem("Item3")
    GUICtrlCreateLabel("L3", 10, 33, 277, 155)
    GUICtrlCreateTabItem("")
    
    GUISetState()
    
    GUIRegisterMsg($WM_DRAWITEM, "WM_DRAWITEM")
    
    _GUICtrlTab_SetCurSel($hTab, 2)
    _GUICtrlTab_SetCurSel($hTab, 1)
    _GUICtrlTab_SetCurSel($hTab, 0)
    _GUICtrlTab_SetCurFocus($hTab, 1)
    
    Do
    Until GUIGetMsg() = -3
    _WinAPI_DeleteObject($hFont)
    _WinAPI_DeleteObject($iBrush)
    
    Func WM_DRAWITEM($hWnd, $Msg, $wParam, $lParam)
        Local $DRAWITEMSTRUCT = DllStructCreate("uint cType;uint cID;uint itmID;uint itmAction;uint itmState;" & _
                                "hwnd hItm;hwnd hDC;dword itmRect[4];dword itmData", $lParam)
        If DllStructGetData($DRAWITEMSTRUCT, "cType") <> $ODT_TAB Then Return $GUI_RUNDEFMSG
        If DllStructGetData($DRAWITEMSTRUCT, "itmAction") <> $ODA_DRAWENTIRE Then Return $GUI_RUNDEFMSG
        Local $itmID = DllStructGetData($DRAWITEMSTRUCT, "itmID")
    
        Local $hDC   = DllStructGetData($DRAWITEMSTRUCT, "hDC")
        Local $hItm  = DllStructGetData($DRAWITEMSTRUCT, "hItm")
    
        Local $itmText = $aColTabItem[$itmID][0], $iBrushColor = $aColTabItem[$itmID][1]
    
        DLLCall("gdi32.dll","int","SetBkMode", "hwnd", $hDC, "int", 1)
    
        Local $iBrush = DLLCall("gdi32.dll","hwnd","CreateSolidBrush", "int", $iBrushColor)
        $iBrush = $iBrush[0]
    
        Local $iBrushOld = _WinAPI_SelectObject($hDC, $iBrush)
        DLLCall("user32.dll","int","FillRect", "hwnd", $hDC, "ptr", DllStructGetPtr($DRAWITEMSTRUCT, "itmRect"), "hwnd", $iBrush)
        Local $tBuffer = DllStructCreate("char[256]")
        DllStructSetData($tBuffer, 1, $itmText)
        $itmText = DllStructGetData($tBuffer, 1)
    
        DllStructSetData($DRAWITEMSTRUCT, "itmRect", DllStructGetData($DRAWITEMSTRUCT, "itmRect", 1) + 10, 1)
        DllStructSetData($DRAWITEMSTRUCT, "itmRect", DllStructGetData($DRAWITEMSTRUCT, "itmRect", 2) + 5, 2)
    
        DllCall("user32.dll", "int", "DrawText", "hwnd", $hDC, "str", $itmText, "int", StringLen($itmText), _
                "ptr", DllStructGetPtr($DRAWITEMSTRUCT, "itmRect"), "int", $DT_LEFT)
    
        Return $GUI_RUNDEFMSG
    EndFunc
    Alles anzeigen

    Das müsste dann angepasst in der Hook-Prozedur ausgeführt werden.

    Einfacher ist vielleicht ein farbiges Rect um das Tab-Item zu zeichnen. Es muss aber auf jedes Neuzeichnen des Tab durch das Programm reagiert werden, da die Größe und Position der Tab-Item sich ja ändern.

    Was ich dir noch anbieten kann, ist eine Funktion zum Abfragen der Tab-Infos:

    EDIT:

    Nochmal etwas geändert.

    SciTE_TabInfo.au3
    AutoIt
    #include <WinAPISys.au3>
    #include <GuiTab.au3>
    
    
    HotKeySet("!{F7}", _getInfoCurrTab) ; <Alt><F7> Info aktiver Tab in Konsole ausgeben
    HotKeySet("!{F8}", _End)            ; <Alt><F8> Beenden
    
    While True
        Sleep(10)
    WEnd
    
    
    Func _End()
        Exit
    EndFunc
    
    
    Func _getInfoCurrTab()
        Local $mInfo = _SciTE_GetTabInfo()
        If Not @error Then
            ConsoleWrite("hwnd SciTE:    " & $mInfo.hSciTE & @CRLF)
            ConsoleWrite("Titel SciTE:   " & $mInfo.Title & @CRLF)
            ConsoleWrite("hwnd Tab:      " & $mInfo.hTab & @CRLF)
            ConsoleWrite("Rect Tab:      " & $mInfo.RectTab.Left & ', ' & $mInfo.RectTab.Top & ', ' & _
                                             $mInfo.RectTab.Right & ', ' & $mInfo.RectTab.Bottom & @CRLF)
            ConsoleWrite("Style Tab:     " & $mInfo.Style & @CRLF)
            ConsoleWrite("StyleEx Tab:   " & $mInfo.StyleEx & @CRLF)
            ConsoleWrite("Index TabItem: " & $mInfo.Index & @CRLF)
            ConsoleWrite("Text TabItem:  " & $mInfo.Item & @CRLF)
            ; Rect Tab-Item ist relativ zum Tab-Ctrl
            ConsoleWrite("Rect TabItem:  " & $mInfo.RectItem.Left & ', ' & $mInfo.RectItem.Top & ', ' & _
                                             $mInfo.RectItem.Right & ', ' & $mInfo.RectItem.Bottom & @CRLF & @CRLF)
        EndIf
    EndFunc
    
    
    Func _SciTE_GetTabInfo()
        Local $hScite, $aResult, $aChild, $hWndTab = Null
        Local $mResult[]
        $hScite = WinGetHandle('[ACTIVE]')
        $aResult = DllCall("user32.dll", "int", "GetClassNameW", "hwnd", $hScite, "wstr", "", "int", 4096)
        If Not @error And $aResult[2] = 'SciTEWindow' Then
            $aChild = _WinAPI_EnumChildWindows($hScite) ; only visible
            If Not @error Then
                For $i = 1 To $aChild[0][0]
                    If $aChild[$i][1] = "SciTeTabCtrl" Then
                        $hWndTab = $aChild[$i][0]
                        ExitLoop
                    EndIf
                Next
            EndIf
            If $hWndTab <> Null Then
                $mResult.hSciTE   = $hScite
                $mResult.Title    = WinGetTitle($hScite)
                $mResult.hTab     = $hWndTab
                $mResult.RectTab  = _WinAPI_GetWindowRect($hWndTab)
                $mResult.Style    = _WinAPI_GetWindowLong ($hWndTab, $GWL_STYLE)
                $mResult.StyleEx  = _WinAPI_GetWindowLong ($hWndTab, $GWL_EXSTYLE)
                $mResult.Index    = _GUICtrlTab_GetCurFocus($hWndTab)
                $mResult.Item     = _GUICtrlTab_GetItemText($hWndTab, $mResult.Index)
                $mResult.RectItem = _GUICtrlTab_GetItemRectEx($hWndTab, $mResult.Index)
                Return $mResult
            EndIf
        EndIf
        Return SetError(1)
    EndFunc
    Alles anzeigen

    Ausgabe:

    Code
    hwnd SciTE:    0x00050386
    Titel SciTE:   C:\CODE\AutoIt\TEST\SciTE_TabInfo.au3 - SciTE [14 of 18]
    hwnd Tab:      0x0005039A
    Rect Tab:      62, 66, 1920, 90
    Style Tab:     1442890304
    StyleEx Tab:   0
    Index TabItem: 13
    Text TabItem:  SciTE_TabInfo.au3
    Rect TabItem:  1188, 2, 1296, 22

    Dateien

    SciTE_TabInfo.au3 2,69 kB – 167 Downloads
  • [offen] Problem: Kompiliert als GUI - CopyToClipboard nicht möglich!

    • BugFix
    • 10. März 2023 um 22:40

    Ich habe in einem Programm folgende Proc (stammt glaub ich von Oscar )

    Nim
    proc copyTextToClip(sText: string): bool {.discardable.} =
      let data = newWideCString(sText)
      let pData = cast[LPWSTR](data[0].addr)
      let iLen = data.len * 2 + 2
      let hMem = GlobalAlloc(GMEM_MOVEABLE, cast[SIZE_T](iLen))
      if hMem == 0: return false
      let pMem = GlobalLock(hMem)
      if pMem == NULL: return false
      copyMem(pMem, pData, iLen)
      GlobalUnlock(hMem)
      OpenClipboard(0)
      if SetClipboardData(CF_UNICODETEXT, hMem) == 0:
        GlobalFree(hMem)
        CloseClipboard()
        return false
      return CloseClipboard() != 0
    Alles anzeigen

    Kompiliere ich die Datei mit nim c File.nim funktioniert das Kopieren. Da es aber eine Anwendung mit Fenster ist brauche ich den Schalter für GUI.

    Verwende ich jedoch nim c --app:gui File.nim bzw. nim c --cpu:i386 --app:gui File.nim schlägt es fehl, es wird nichts in die Zwischenablage geschrieben.


    Hat jemand eine Idee, wie ich das gebacken bekomme?

    EDIT:

    Ein weiteres Problem: Der kopierte Inhalt ist z.B. in Office-Dokumente nicht direkt einfügbar, das geht nur über ein Textfeld.

    Aber ich habe zumindest eine Lösung gefunden: cliptomania. Damit funktioniert alles, wie gewünscht.

  • Map: Value Funktionspointer nicht per Punktnotation nutzbar

    • BugFix
    • 9. März 2023 um 18:33
    Zitat von BugTracker

    Changed 4 months ago by Jpm

    Owner set to Jon
    Status changed from reopened to assigned

  • Map: Value Funktionspointer nicht per Punktnotation nutzbar

    • BugFix
    • 9. März 2023 um 11:29
    Zitat von AspirinJunkie

    Keine Lösung - lediglich ein Workaround:

    Ist von der Schreibbarkeit immer noch angenehmer, als den Funktionsnamen zusätzlich in Stringbegrenzer zu setzen.

    Danke für die Mühe, die ich euch gemacht habe. :D

  • Wie informiert Ihr Eure User in einer Domain am PC-Arbeitsplatz über umgehend wichtige und zu beachtende Dinge?

    • BugFix
    • 9. März 2023 um 11:12
    Zitat von bazii

    Aber sie wollen die Richtlinien nach BSI erfüllen arbeiten gerade am ISO

    Ich habe dir mal per PN die von mir genutzte Anweisung zur Softwarevalidierung und die Validierung für einen Softwareprozess zur Veranschaulichung gesendet. Diese Dinge sind, natürlich etwas abhängig von der Branche, in der Regel nicht durch Normen fixiert. Das heißt, die konkreten Abläufe sind im Handbuch festzulegen und die entsprechenden Kriterien zur Bewertung dazu.

    Edit:

    Apropos Nachweispflicht. Für bestimmte Punkte gibt es Normvorgaben, da muss man sich einfach dran halten.

    Aber: Die meisten Abläufe im Betrieb sind individuell. Hier muss einfach eine Regel bestehen und die kann ich selber definieren.

    Bsp. Datensicherung:

    Die Norm verlangt z.B., dass deine Daten nicht verloren gehen dürfen und im Katastrophenfall wieder herstellbar sind. Das WIE ist dabei völlig egal. Ob du (mal überspitzt gesagt) aus Tausenden von Papierbelegen händisch alles wieder herstellst, oder dazu eine Datensicherung zurückspielst ist dein Ding. Insofern ist es auch an dir festzulegen, wie oft du Sicherungslogs prüfst oder dieses automatisierst etc. Nur wenn du Festlegungen dazu getroffen hast, dann musst du dich auch dran halten. ;)

  • Map: Value Funktionspointer nicht per Punktnotation nutzbar

    • BugFix
    • 9. März 2023 um 10:39

    Ich habe hier eine Map Objekt-ähnlich gestaltet, mit Parameter und Methode.

    Der Parameter lässt sich in Punktnotation abrufen, aber nicht die Funktion.

    Da die Map ja nach wie vor als experimentell gehandelt wird, vermute ich mal. dass das einfach noch nicht sauber implementiert wurde.

    Nutzt hier jemand die Beta und kann sagen, ob das dort gefixed ist?

    AutoIt
    Global $mX[]
    $mX.param = StringFormat('%02d.%02d.%d', @MDAY, @MON, @YEAR) ; String
    $mX.method = _myHalloFunc                                    ; Funktionspointer
    
    ;~ $mX.method('AutoIt')     ; The requested action with this object has failed
    $mX['method']('AutoIt')     ; funktioniert
    
    Func _myHalloFunc($_s)
        ConsoleWrite('[' & $mX.param & '] Hallo ' & $_s & '!' & @CRLF)
    EndFunc
  • Wie informiert Ihr Eure User in einer Domain am PC-Arbeitsplatz über umgehend wichtige und zu beachtende Dinge?

    • BugFix
    • 8. März 2023 um 21:29

    bazii

    Hätte ich tatsächlich nicht gedacht, dass sich Betriebsräte Entscheidungen über Unternehmenssoftware anmaßen. M. M. nach ist es eher unwahrscheinlich, dass gerade dort Personen mit Kompetenz auf diesem Gebiet zu finden sind.

    Aber sei es, wie es sei. Ich wollte eigentlich noch auf etwas Anderes aufmerksam machen:

    Ich gehe mal davon aus, dass euer Unternehmen ISO zertifiziert ist. Dementsprechend muss für neue Software auch der QMB ins Boot geholt werden. Hier sind die Betrachtungsweisen aber anders fundiert. Im Qualitätsmanagement wird für jede Software eine Validierung durchgeführt (und in Intervallen wiederholt). Dabei wird betrachtet

    - was sind die Ziele

    - wie sollen sie erreicht werden

    - woran ist messbar, dass sie erreicht wurden

    - mit welchem Verfahren soll die Wirksamkeit geprüft werden (z. B. 1-wöchiger Probelauf mit Dokumentation)

    - konnte die Wirksamkeit nachgewiesen werden - Ja: Freigabe zur Anwendung

    Aber da wird euer QMB vermutlich eigene Vorlagen haben.

    Ich drücke die Daumen, dass alle Genehmigungsverantwortlichen (Ha, das Wort gefällt mir ^^) zügig ihrer Aufgabe gerecht werden.

  • winhttp?

    • BugFix
    • 27. Februar 2023 um 18:30

    So, das war jetzt dann doch zuviel. Bevor hier alles entartet, habe ich alle vorigen Posts ohne direkten Themenbezug gelöscht.

    Weitere Posts hier ausschließlich zum Thema!

    Wer damit ein Problem hat, kann mich per PN kontaktieren.

  • Alle Beträge von Textdatei auslesen und addieren

    • BugFix
    • 26. Februar 2023 um 13:25
    Zitat von HGF

    For $i = 0 To $iLineCount - 1 ; Durchläuft das Array. UBound($aArray) kann auch verwendet werden

    ;~ MsgBox($MB_SYSTEMMODAL, "", $aArray[$i]) ; Zeigt den Inhalt des Arrays.

    $Summe = StringReplace ($aArray[$i], ",", ".")

    MsgBox($MB_SYSTEMMODAL, "", $Summe) ; Zeigt den Inhalt des Arrays.

    Next

    Was du falsch gemacht hast:

    Du hast $Summe in jedem Durchlauf überschrieben mit dem Inhalt des Arrayelements.

    Also statt:

    $Summe = StringReplace ($aArray[$i], ",", ".")

    muss:

    $Summe += StringReplace ($aArray[$i], ",", ".")

    Dazu musst du aber vor der Schleife eine leere Variable $Summe deklarieren!

  • Alle Beträge von Textdatei auslesen und addieren

    • BugFix
    • 26. Februar 2023 um 12:04

    - Datei in ein Array lesen (FileReadToArray)

    - in Schleife durch das Array gehen

    - jeden Eintrag zuerst "," mit Punkt ersetzen (StringReplace)

    - diesen Wert zu einer Summenvariable aufaddieren

  • Kompilieren x86 & x64 mit Startprogramm zur Architekturerkennung

    • BugFix
    • 18. Februar 2023 um 20:21
    Zitat von Racer

    WMIC ist tot...wird es auch in der nächsten Windows Version nicht mehr geben

    Jein:

    Zitat

    [Update 10.03.2022]: Nachdem Microsoft WMIC (Windows Management Instrumentation Command-line) aus der Windows 11 Insider entfernt hatte, wurde diese Funktion jetzt als „Optionales Feature“ in der Windows 11 22572 wieder zurückgebracht.

  • Kompilieren x86 & x64 mit Startprogramm zur Architekturerkennung

    • BugFix
    • 16. Februar 2023 um 11:10

    Wenn wir nicht sicher wissen, welche Architektur beim Anwender vorliegt ist es ganz praktisch sowohl x86 als auch x64 kompilierte Programme bereitzustellen.

    Die beiden dann als "MEIN_PROG_x86.exe" und "MEIN_PROG_x64.exe" in einen gemeinsamen Ordner (z.B. "bin") packen. Im selben Root, wie der Ordner, das Startprogramm "MEIN_PROG.exe" platzieren.

    EDIT:

    Hab mal noch ein paar kleine Änderunegn eingefügt, damit kein CMD-Window beim Aufruf flasht.

    Nim
    # Startprogramm mit Architekturerkennung Kompilieren als 32-Bit
    # nim c --cpu:i386 --app:gui MEIN_PROG.nim
    
    import osproc
    import strutils
    
    let
      run32Bit = r".\bin\MEIN_PROG_x86.exe" # Pfad relativ zum Startprogramm
      run64Bit = r".\bin\MEIN_PROG_x64.exe"
    
    proc getWindowsArchitecture(): string =
      let output = execProcess("wmic os get OSArchitecture", options={poUsePath, poStdErrToStdOut, poEvalCommand, poDaemon})
      var arch = "32-Bit"
      for line in output.splitlines():
        if line.startsWith("64"):
          arch = "64-Bit"
      return arch
           
    if getWindowsArchitecture() == "32-Bit":
      discard execProcess(run32Bit, options={poUsePath, poStdErrToStdOut, poEvalCommand, poDaemon})
    else:
      discard execProcess(run64Bit, options={poUsePath, poStdErrToStdOut, poEvalCommand, poDaemon})
    Alles anzeigen
  • _ArrayDisplay() kann keine Null-Keywords verarbeiten

    • BugFix
    • 4. Februar 2023 um 18:01

    Das ist gar nicht so abwegig.

    Da leere Arraypositionen im Kontext des Zugriffs völlig unterschiedlich interpretiert werden, ist per se keine Abfrage möglich: Ist das Element leer?

    Aus diesem Grund ist es sinnvoll, für echte Leerinfos Variablen oder Arraypositionen mit Null vorzubelegen. Verwende ich ständig. Vor Einführung des Keywords Null musste man da irgendwelche abartigen Vorbelegungswerte generieren um auf tatsächlich leer zu prüfen.

    Insofern halte ich das Problem für nicht sehr exotisch.

  • "​Super Bowl 2023​"

    • BugFix
    • 3. Februar 2023 um 10:16
    Zitat von Moombas

    aber kein Bubble American Football

    Was die Amis machen, ist ja von der Idee her eine "Bubble"-Version, Schutz durch Helm und Panzerung. Dadurch gibt es ja die schweren Verletzungen, weil sie denken sie seien geschützt und ohne Rücksicht auf Verluste, wie Stiere ineinander rennen (Ich hoffe, ich tue den Stieren jetzt nicht unrecht. Eigentlich halte ich die nicht für so bekloppt). :Face:

    In der Muttersportart des Football - namens Rugby - wird Wert gelegt auf Kontaktarmut und deshalb auch ohne Helm und Panzerung gespielt. Das Verletzungsrisiko bewegt sich dadurch dort in etwa, wie im Fußball.

  • "​Super Bowl 2023​"

    • BugFix
    • 2. Februar 2023 um 13:19
    Zitat von Alina

    Wie ich sehe, gibt es hier wenige die dem Sport Begeisterung schenken.

    Ich finde es schon grenzwertig, was sich z.B. Fußballer an Verletzungen zuziehen. Aber das sind dann überwiegend Muskel-/Sehnen-/Bänder-/Kapselverletzungen. (Schwere) Kopfverletzungen sind dort tatsächlich die Ausnahme.

    Hingegen ist das Krankheitsbild eines langjährigen Football Spielers vorgezeichnet:

    Neben allen o.a. Verletzungen gesellen sich dazu:

    - chronisch-traumatischer Enzephalopathie (eigentlich eine typische Boxerkrankheit)

    - Depressionen

    - Alzheimer

    - Demenz

    Und das sind keine Ausnahmefälle, sondern eher die Regel.

    Naja, wie im alten Rom: Brot und Spiele. :rolleyes: Hauptsache die Bier-Saufenden und HotDog-Fressenden Massen werden bespaßt und die TV-Lizenzen spülen Geld in die Kassen der Klub-Eigner.

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™