Vielen Dank dir
Beiträge von Floooooo24
-
-
Hi Andy,
Vielen Dank. Heißt Windows startet die ".exe" und hängt als Startparameter einfach den Dateipfad an?
-
Hallo zusammen,
ich möchte ein Programm schreiben, welches gestartet wird, wenn man auf eine Datei mit der Endung ".Bsp" doppel Klickt (oder über "Öffnen mit" mein Programm auswählt). Das Programm soll dann eben diese Datei verarbeiten und Anzeigen.
Ich finde aber leider nicht, wie ich das mache. Kann mir jemand einen Hinweis in die richtige Richtung geben?
Vielen Dank
Grüße
Flo
-
Vielen Dank, das war die Lösung. warum das ConsoleWrite das ganze auch behoben hat ist immer noch ein Wunder.
Ich hab einfach noch eine abfrage für ungleich 1 eingefügt und es klappt:
CodeIf $aPosControl[2] < $aPosLastSubitem[0] And ($aPosLastSubitem[2] - $aPosLastSubitem[0]) <> 50 Then If ($aPosLastSubitem[2] - $aPosLastSubitem[0]) <> 1 _GUICtrlListView_SetColumnWidth($gListviewPoints, _GUICtrlListView_GetColumnCount($gListviewPoints)-1, 1) EndIf ElseIf $aPosControl[2] <> $aPosLastSubitem[2] Then _GUICtrlListView_SetColumnWidth($gListviewPoints, _GUICtrlListView_GetColumnCount($gListviewPoints)-1, $aPosControl[2] - $aPosLastSubitem[0]) EndIf
-
Sers Velted,
danke für deine Antwort.
Der horizontale Scrollbalken stört mich schon. deswegen bearbeite ich auch die Nachricht "$HDN_ITEMCHANGEDW" und "$HDN_BEGINTRACKW" welche aber diesen Komischen Probleme mit dem Consolwirte haben.
Weiß noch jemand weiter? Werden vielleicht irgendwelche Bilioteken oder Funktionen in Consolwrite aufgerufen oder eben nicht aufgerufen? ich habe den Code der hinter der Funktion steht leider nicht gefunden, da es wie s aussieht nicht um eine Bibliotek handelt, in welcher die Funktion ist.
Mit freundlichen Grüßen
Flo
-
Hi,
ich bin dabei eine Listview farbig einfärben, was auch so weit mit diesem Code klappt:
AutoIt
Alles anzeigen; *** Start added by AutoIt3Wrapper *** #include <GUIConstantsEx.au3> #include <HeaderConstants.au3> #include <ListViewConstants.au3> #include <StaticConstants.au3> #include <StructureConstants.au3> #include <WindowsConstants.au3> ; *** End added by AutoIt3Wrapper *** #Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_Add_Constants=n #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** #include <WinAPISysWin.au3> #include <GuiListView.au3> #include <GDIPlus.au3> #Region Variablen ;Color with 6-digit Global Const $iColorBK_GUI6 = 0x13161F Global Const $iColorCtrlActive_GUI6 = 0x353840 Global Const $iColorText_GUI6 = 0xFFFFFF ;Text Color ;Color with 8-digit Global Const $iColorCtrlActive_GUI8 = 0xFF353840 Global Const $iColorText_GUI8 = 0xFFFFFFFF ;Text Color ;Listview Global $aListviewColumNames = ["Column 1", "Column 2", "Column 3", ""] Global Const $tagNMCUSTOMDRAW = "struct;" & $tagNMHDR & ";dword dwDrawStage;handle hdc;" & $tagRECT & ";dword_ptr dwItemSpec;uint uItemState;lparam lItemlParam;endstruct" #EndRegion Variablen #Region - hGui #Region - Create GUI Global $hGUI = GUICreate("Masetcam Settings Switch", 500, 300);, -1, -1, BitOR($WS_POPUP, $WS_BORDER)) GUISetBkColor($iColorBK_GUI6) ;Fenstergröße bestimmen Local $aWinPos = WinGetPos($hGUI) Global $GUI_Width = $aWinPos[2] Global $GUI_Height = $aWinPos[3] #EndRegion - Create GUI #Region - Main Gui Local $gListviewPoints = _GUICtrlListView_Create($hGUI, "", 10,10, 480, 280, -1, $LVS_EX_FULLROWSELECT) _GUICtrlListView_SetBkColor($gListviewPoints, _WinAPI_SwitchColor($iColorCtrlActive_GUI6)) _GUICtrlListView_SetTextColor($gListviewPoints, _WinAPI_SwitchColor($iColorText_GUI6)) _GUICtrlListView_SetTextBkColor($gListviewPoints, _WinAPI_SwitchColor($iColorText_GUI8)) _GUICtrlListView_AddColumn($gListviewPoints, "1Test Header", 100) _GUICtrlListView_AddColumn($gListviewPoints, "2Test Header", 100) _GUICtrlListView_AddColumn($gListviewPoints, "3Test Header", 100) _GUICtrlListView_AddItem($gListviewPoints, "Row 0: Col 0",0) _GUICtrlListView_AddSubItem($gListviewPoints, 0, "Row 0: Col 1", 1) _GUICtrlListView_AddSubItem($gListviewPoints, 0, "Row 0: Col 2", 2) _GUICtrlListView_AddItem($gListviewPoints, "Row 1: Col 0",0) _GUICtrlListView_AddSubItem($gListviewPoints, 1, "Row 1: Col 1", 1) _GUICtrlListView_AddSubItem($gListviewPoints, 1, "Row 1: Col 2", 2) _GUICtrlListView_AddItem($gListviewPoints, "Row 2: Col 0",0) _GUICtrlListView_AddSubItem($gListviewPoints, 2, "Row 2: Col 1", 1) _GUICtrlListView_AddSubItem($gListviewPoints, 2, "Row 2: Col 2", 2) _GUICtrlListView_AddItem($gListviewPoints, "Row 3: Col 0",0) _GUICtrlListView_AddSubItem($gListviewPoints, 3, "Row 3: Col 1", 1) _GUICtrlListView_AddSubItem($gListviewPoints, 3, "Row 3: Col 2", 2) GUISetState(@SW_SHOW, $hGUI) #EndRegion - Main Gui #EndRegion - hGui #Region - Activate Stuff ;GDIPlus starten _GDIPlus_Startup() ;Listview Header einfärben Global $hHeader = _GUICtrlListView_GetHeader($gListviewPoints) ;Get Header handle Global $hHdrFont = Listview_getHeaderFont($hHeader) ;WM_ Funktionen registieren GUIRegisterMsg($WM_Notify, "WM_NOTIFY") _GUICtrlListView_SetColumnWidth($gListviewPoints, _GUICtrlListView_AddColumn($gListviewPoints, "", 99), 50) _GUICtrlListView_BeginUpdate($gListviewPoints) _GUICtrlListView_EndUpdate($gListviewPoints) #EndRegion - Activate Stuff Func Listview_getHeaderFont($hHeader) Local $hDC = _WinAPI_GetDC($hHeader) ;Get Font of the Header Control Local $hFont = _SendMessage($hHeader, $WM_GETFONT) Local $hObject = _WinAPI_SelectObject($hDC, $hFont) Local $tLogFont = DllStructCreate($tagLOGFONT) _WinAPI_GetObject($hFont, DllStructGetSize($tLogFont), DllStructGetPtr($tLogFont)) _WinAPI_SelectObject($hDC, $hObject) _winapi_ReleaseDC($hHeader, $hDC) Local $iWeight = DllStructGetData($tLogFont, "Weight") DllStructSetData($tLogFont, "Weight", $iWeight) $hHdrFont = _WinAPI_CreateFontIndirect($tLogFont) EndFunc #Region While While 1 Switch GUIGetMsg() ;Empfängt alle klicks auf Buttons und verarbeitet diese Case $GUI_EVENT_CLOSE ;hGui (Main Gui) GUIDelete($hGUI) ;Gui löschen Exit EndSwitch WEnd #EndRegion While #Region Functions #STOP DBUG #Region - WM_Notify Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam) #forceref $hWnd, $iMsg, $iMsg, $iwParam Local $hWndFrom, $iCode, $tNMHDR, $tDropFiles, $hDrop, $aFileList, $sFileString $tNMHDR = DllStructCreate($tagNMHDR, $ilParam) $hWndFrom = HWnd($tNMHDR.hWndFrom) $iCode = $tNMHDR.Code Switch $hWndFrom Case $hHeader Switch $iCode Case $NM_CUSTOMDRAW Local $tNMCustomDraw = DllStructCreate($tagNMCUSTOMDRAW, $ilParam) Local $dwDrawStage = DllStructGetData($tNMCustomDraw,"dwDrawStage") ;Draw stage abrufen Switch $dwDrawStage Case $CDDS_PREPAINT ;Stage bevor der Zeichen Prozess beginnt Return $CDRF_NOTIFYITEMDRAW ;Notify parent window of any item related drawing operations Case $CDDS_ITEMPREPAINT ;Before an item is drawn: Default painting (frames and background) Return $CDRF_NOTIFYPOSTPAINT ; Notify parent window of any post item related drawing operations Case $CDDS_ITEMPOSTPAINT ;After an item is drawn: Custom painting (item texts) Local $iTextOffsetX = 0, $iTextOffsetY = 0, $sFont = "Arial", $iFontSize = 10, $iFontStyle = 0, $iAlign = 0, $iLineAlign = 1 Local $tRECT = DllStructCreate($tagRECT) Local $iIndex = DllStructGetData($tNMCustomDraw, "dwItemSpec") ;Item index Local $hDC = DllStructGetData($tNMCustomDraw, "hdc") ;Device context _WinAPI_SelectObject($hDC, $hHdrFont) ;Set text font _WinAPI_SetBkMode($hDC, 0xFF00A000) ;Transparent background _WinAPI_SetTextColor($hDC, _WinAPI_SwitchColor($iColorText_GUI6)) ;Set text colour ;Get header section size $tRECT.Left = DllStructGetData($tNMCustomDraw, 6); + 1) $tRECT.Top = DllStructGetData($tNMCustomDraw, 7); + 1) $tRECT.Right = DllStructGetData($tNMCustomDraw, 8); - 1 $tRECT.Bottom = DllStructGetData($tNMCustomDraw, 9); - 1 ;GDI Starten und ;Hintergrund Local $hDCGrafik = _GDIPlus_GraphicsCreateFromHDC($hDC) ;Zechenfläche Local $hBrush = _GDIPlus_BrushCreateSolid($iColorCtrlActive_GUI8) ;Rechteck ausfüllen Local $hPen =_GDIPlus_PenCreate("0xFF" & Hex(_WinAPI_ColorAdjustLuma($iColorCtrlActive_GUI6, 20), 6)) ;Linien ;Text Local $hBrushTxt = _GDIPlus_BrushCreateSolid($iColorText_GUI8) ;Pinsel Local $hFormat = _GDIPlus_StringFormatCreate() ;Format Local $hFamily = _GDIPlus_FontFamilyCreate($sFont) ;Font Family Local $hFont = _GDIPlus_FontCreate($hFamily, $iFontSize, $iFontStyle) ;Font Local $tLayout = _GDIPlus_RectFCreate($tRECT.Left + $iTextOffsetX, $tRECT.Top+$iTextOffsetY, $tRECT.Right - $tRECT.Left, $tRECT.Bottom - $tRECT.Top) ;Rechteck in dem der String kommt _GDIPlus_StringFormatSetAlign($hFormat, $iAlign) ;Width Ausrichtung _GDIPlus_StringFormatSetLineAlign($hFormat, $iLineAlign) ;Hight Ausrichtung ;Hintergurnd zeichnen _GDIPlus_GraphicsFillRect($hDCGrafik, $tRECT.Left, $tRECT.Top, $tRECT.Right, $tRECT.Bottom, $hBrush) _GDIPlus_GraphicsDrawLine($hDCGrafik, $tRECT.Left, $tRECT.Bottom-1, $tRECT.Right, $tRECT.Bottom-1, $hPen) _GDIPlus_GraphicsDrawLine($hDCGrafik, $tRECT.Right-1, $tRECT.Bottom-1, $tRECT.Right-1, $tRECT.Top, $hPen) ;Text schreiben _GDIPlus_GraphicsDrawStringEx($hDCGrafik, $aListviewColumNames[$iIndex], $hFont, $tLayout, $hFormat, $hBrushTxt) ;Zeichnet den String ;Resoursen frei geben ;Bild _GDIPlus_BrushDispose($hBrush) _GDIPlus_PenDispose($hPen) _GDIPlus_GraphicsDispose($hDCGrafik) ;Text _GDIPlus_BrushDispose($hBrushTxt) _GDIPlus_FontDispose($hFont) _GDIPlus_FontFamilyDispose($hFamily) _GDIPlus_StringFormatDispose($hFormat) Return $CDRF_NEWFONT ;$CDRF_NEWFONT must be returned after changing font or colors EndSwitch Case $HDN_BEGINTRACKW Local $tNMHeader = DllStructCreate($tagNMHEADER, $ilParam) Local $iIndex = $tNMHeader.Item If $iIndex = _GUICtrlListView_GetColumnCount($gListviewPoints)-1 Then Return True Else Return False EndIf Case $HDN_ITEMCHANGINGW _GUICtrlListView_BeginUpdate($gListviewPoints) Case $HDN_ITEMCHANGEDW ;~ ConsoleWrite(" ") ;Find Chanched-Item Local $tNMHeader = DllStructCreate($tagNMHEADER, $ilParam) Local $iIndex = $tNMHeader.Item ;If Chanched-Item is the last one then return If $iIndex = _GUICtrlListView_GetColumnCount($gListviewPoints)-1 Then Return $GUI_RUNDEFMSG EndIf ;Get Positions and Sizes Local $aPosControl = ControlGetPos($hGUI, "", $gListviewPoints) Local $aPosLastSubitem = _GUICtrlListView_GetSubItemRect($gListviewPoints, 0, _GUICtrlListView_GetColumnCount($gListviewPoints)-1) ;passt die Größe der letzten Spalte an, damit der Header immer mindestens so groß ist, wie die Listview und kein weißer rand entsteht. If $aPosControl[2] < $aPosLastSubitem[0] And ($aPosLastSubitem[2] - $aPosLastSubitem[0]) <> 50 Then ;~ ConsoleWrite("1" & @CRLF) _GUICtrlListView_SetColumnWidth($gListviewPoints, _GUICtrlListView_GetColumnCount($gListviewPoints)-1, 1) ElseIf $aPosControl[2] <> $aPosLastSubitem[2] Then ;~ ConsoleWrite("2" & @CRLF) _GUICtrlListView_SetColumnWidth($gListviewPoints, _GUICtrlListView_GetColumnCount($gListviewPoints)-1, $aPosControl[2] - $aPosLastSubitem[0]) EndIf _GUICtrlListView_EndUpdate($gListviewPoints) EndSwitch EndSwitch Return $GUI_RUNDEFMSG EndFunc ;==>WM_NOTIFY #EndRegion - WM_Notify #START DBUG #EndRegion Functions
Damit der Weiße Bereich oben rechts verschwindet habe ich eine Weiter Spalte eingefügt, Welche man von hand nicht größer oder kleiner machen kann, dafür aber sich dafür aber automatisch bis zum Rechten rand ausdehnt, sobald man eine Spalte in der größe verändert.
Das klappt auch und sieht so weit gut aus, bis die Vorletzte Spalte so groß ist, das eine scroll bar angezeigt wird, dann verschwinden die ganzen farbigen Header Elemente.
Wenn man das erste oder die beiden unteren ";~" entfernt, dann funktioniert es, bis man es Compaliert, da dann scheinbar ConsolWrite nicht mehr ausgeführt wird oder es seine Magische Eigenschaft verliert.
Kann mir da jemand helfen?
Noch alles gut:
Wärend Column 2 Größer gemacht wird und Colum 3 rechts zu groß ist:
Mit freundlichen Grüßen
Florian Etzel
-
Hi,
Velted danke dir, ich hab einiges davon gut verwenden und einbauen können.
-
Hallo noch mal, ich habe nun die Lösung gefunden, welche nicht wirklich aufwendig ist, wenn man weiß, was alles zu tun ist. Die Lösung hab ich hier gefunden:
Richedit : drag/drop .txt files and display contentHello I was used to drag and drop .txt files in Edit controls and then display the text at once But I got problems when trying to do the same with a Richedit…www.autoitscript.comIch hab das skript von ihn abgeändert zu:
C
Alles anzeigen#include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <GuiEdit.au3> #include <GuiRichEdit.au3> #include <WinAPISys.au3> #include <Array.au3> Global Const $ES_NOOLEDRAGDROP = 0x08 Global Const $tagDROPFILES = $tagNMHDR & ";handle hDrop;long cp;bool fProtected" $gui = GUICreate("test", 600, 400, -1, 100) $hRichEdit = _GUICtrlRichEdit_Create($gui, "", 10, 10, 580, 380, BitOr($ES_NOOLEDRAGDROP, $ES_MULTILINE, $ES_WANTRETURN, $WS_VSCROLL, $ES_AUTOVSCROLL)) _GUICtrlRichEdit_AutoDetectURL($hRichEdit, True) _WinAPI_DragAcceptFiles ($hRichEdit) _GUICtrlRichEdit_SetEventMask($hRichEdit, $ENM_DROPFILES) GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY") GUISetState() While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit EndSwitch WEnd Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam) #forceref $iMsg, $wParam Local $hWndFrom, $iCode, $tNMHDR, $tDropFiles, $hDrop, $aFileList $tNMHDR = DllStructCreate($tagNMHDR, $lParam) $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom")) $iCode = DllStructGetData($tNMHDR, "Code") Switch $hWndFrom Case $hRichEdit Switch $iCode Case $EN_DROPFILES ;Droped File Names extrahieren $tDropFiles = DllStructCreate($tagDROPFILES, $lParam) $hDrop = DllStructGetData($tDropFiles, "hDrop") $aFileList = _WinAPI_DragQueryFileEx($hDrop, 0) $sFileString = " File:" & _ArrayToString($aFileList, @CRLF & " File:", 1) & " " Local $iCharPos = _GUICtrlRichEdit_GetCharPosFromXY($hWndFrom, _WinAPI_GetMousePosX(True, $hWndFrom), _WinAPI_GetMousePosY(True, $hWndFrom)) _GUICtrlRichEdit_SetSel($hWndFrom, $iCharPos, $iCharPos) _GUICtrlRichEdit_InsertText($hWndFrom, $sFileString) Return 1 EndSwitch EndSwitch Return $GUI_RUNDEFMSG EndFunc ;==>WM_NOTIFY Func _NewFile($newfile) $filetxt = FileRead($newfile) _GUICtrlRichEdit_SetText($hRichEdit, "") _GUICtrlRichEdit_AppendText($hRichEdit, $filetxt) _GUICtrlRichEdit_SetSel($hRichEdit, 0, 0) EndFunc
Wichtig sind die Befehle:
_WinAPI_DragAcceptFiles ($hRichEdit)
_GUICtrlRichEdit_SetEventMask($hRichEdit, $ENM_DROPFILES)
und wichtig ist, dass man in der WM_NOTIFY das ganze abfragt und verarbeitet und anschließend ein Retrun 1 sendet, wenn man nicht möchte, das die Standart Befehle für die Nachricht ausgeführt werden.
und sobald man einmal den Befehl _GUICtrlRichEdit_SetReadOnly verwendet, funktioniert das ganze nicht mehr. Man kann aber mit _GUICtrlRichEdit_SetcharAttributes auf alle Charakter die eigenschaft "pr" setzen und auch wieder in WM_NOTIFY verarbeiten und einfach wenn $EN_Protect kommt Return 1 senden.
Das man draufklicken kann kann man über $EN_Link erreichen.
-
Es funktioniert schon alles so wie ich das möchte, nur was mir eben fehlt, ist das man Datein rin ein Richtextedit zeihen kann und diese dann per klick/doppel klick öffnen kann.
Weiß jemand wie man das am besten anstellen kann?
-
weil du sie nicht direkt öffnest. Das kam vielleicht falsch rüber:
Es gibt einen Ordner der zu speichern von verschieden Text datein verwendet wird. In den Textdateien kann man sich organisieren, und den Stand von verschiedenen Projekten reinschreiben. Damit man einen Ort hat an welchem alles steht. Da man ja aber auch immer wieder die verschiedesten Datein hat, welche für das Projekt relevant sind, sollen diese auch dort verknüpft werden können. Damit man diese schneller findet und am besten auch direkt öffnen kann.
-
Moombas, dass das Standart Programm verwendet werden soll, ist schon der Plan, ich hab die schwierigkeiten mit dem Auflisten der Datei, weil sie per Drag-And-Drop eingefügt werden sollen.
-
Ich bin dabei ein Projektmanager zuschreiben, welcher alle Datein auflistet, welche in einem Ordner sind, und dort dann möglichkeiten bietet die text-Datei zu bearbeiten, zum Beispiel einen Eintrag mit Zeitstempel einzufügen, die Datein zu durch suchen und die Suchergebnisse dann unteranderem Hervorzuheben,...
Jetzt bin ich gerade dabei, das man Datein ablegen kann, welche sich dann öffnen, sobald man draufklickt, aber es sollen eben die Orginalen Datein geöffnet werden.
-
Hallo water,
leider hat mir das nichts gebracht. Ich kann erkennen, wenn eine Drag-And-Drop-Aktion passiert ist, in dem ich schaue, was mir die funktion _GUICtrlRichEdit_GetNextUndo zurückgibt. Aber ich habe leider nicht rausgefunden, wie ich die Objekte, welche automatisch eingefügt werden, manipulieren kann, weil das für mich einfach nur sinnlose Zahlen und Buchstaben sind.
Auch habe ich leider nicht rausfinden können, wie ich beeinflussen kann, was bei einem doppel klick auf ein solches Objekt passieren soll.
Ich rede von diesen Objekten:
-
Hallo zusammen,
ich würde gerne in ein Richtextconrol Datein per Drag-and-Drop hinzufügen. Nur sollen sie als Verknüpft werden mit der Datei und nicht koppiert werden.
MfG Flo
-
Danke für deine Hilfe aufjeden Fall!
Weiß Jemand ob man das Blitzen unterdrücken kann?
-
Das bringt mir leider in meinem Anwendungsfall (Nicht in dem Beispiel) auch nicht das was ich brauche.
Ich muss wissen, ob der Button deaktiviert wurde. Wie zum Beispiel mit _GUICtrlButton_Enable($gSwitch, False).
-
Danke fürs Verschieben
- Die While Schleife war unbeabsichtigt, hab sie beseitig
- da mir GUICtrlGetState($gSwitch) immer 80 zurück gibt, war das die einzige Möglichkeit, welche ich gefunden habe. Wie kann ich denn noch abfragen, ob das Control Deaktiviert ist?
- Meine Titelbar ist immer 30, da ich sie selbst aus einem Lable erstelle im normal Fall.
-
Hallo zusammen,
Mir ist gerade aufgefallen, das Ich den Falschen Ordner für diesen Post ausgewählt haben. Kann er bitte nach Hilfe & Unterstützung verschoben werden? GtaSpider
Gruß Flo
-
Guten Tag zusammen,
ich bin dabei über eine Checkbox eine Bitmap zulegen, mit dem Befehl: _GUICtrlButton_SetImageList. Das klappt auch so weit.
Ich habe nur folgendes Problem:
Wenn die Checkbox den Status : "Unchecked" hat, und ich sie mit dem Befehl: _GUICtrlButton_Enable($gSwitch, False) deaktiviere, dann verschwindet meine Bitmap kurz, bevor die nächste erscheint.
Bei allen anderen Änderungen passiert das nicht.
Hier ist ein Beispiel Code:
C
Alles anzeigen#Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_Add_Constants=n #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** ;Funktionen #include <GDIPlus.au3> #include <GuiImageList.au3> #include <GuiButton.au3> ;Constanten #include <AutoItConstants.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> #include <ButtonConstants.au3> #include <GDIPlusConstants.au3> ;---------------------------------------------------------------------------- ;Create Main-GUI ;---------------------------------------------------------------------------- Global $hGUI = GUICreate(@ScriptName, 300, 330, -1, -1, $WS_POPUP+$WS_BORDER) ;Fenstergröße bestimmen Local $aWinPos = WinGetPos($hGUI) Global $GUI_Width = $aWinPos[2] Global $GUI_Height = $aWinPos[3] - 30 ;Wegen der Titelbar 30 abziehen GUISetBkColor(0x13161F, $hGUI) GUISetState(@SW_SHOW, $hGUI) Local $gButton = GUICtrlCreateButton("x", $aWinPos[2]-50,0, 50,30) ;Close Button Local $gButton2 = GUICtrlCreateButton("Disable", 120,50, 100,30) ; Local $gSwitch = CreateSwitch("Allgemein", 50,50, 60,30, 0xFF13161F, 0xFF00A000, 0xFFFFFFFF) ;---------------------------------------------------------------------------- ;Design GUI ;---------------------------------------------------------------------------- While 1 ;Endlosschleife Switch GUIGetMsg() ;Empfängt alle klicks auf Buttons und verarbeitet diese Case $GUI_EVENT_CLOSE, $gButton ;Kreuz oben rechts GUIDelete($hGUI) Exit 0 ;beendet das Skript ;-------------------------------------------------------------------- ;Buttons ;-------------------------------------------------------------------- Case $gButton2 GUICtrlSetData($gButton2, "Enable") If Not ControlCommand($hGUI, "", $gSwitch, "IsEnabled") Then _GUICtrlButton_Enable($gSwitch, True) Else _GUICtrlButton_Enable($gSwitch, False) EndIf EndSwitch WEnd Func CreateSwitch($sText, $iLeft,$iTop, $iWidth=90,$iHeight=40, $iBKColor = 0xFFFFFFFF, $iColorAkzent = 0xFF00A000, $iTxtColor = 0xFF000000, $iState = 15, $iFontSize = 8.5, $sFont = "Arial", $iAlign = 1, $iFontStyle = 0) Local $gButton = GUICtrlCreateCheckbox("", $iLeft, $iTop, $iWidth, $iHeight, $BS_BITMAP) ;Erstellt einen Button mit den Parametern des Nutzers GUICtrlSetBkColor(-1, "0x" & StringRight(Hex($iBKColor), 6)) Local $hBitmapWithText[8] _GDIPlus_Startup() ;Bitmaps erstellen If IsArray($iBKColor) Then For $i = 0 To UBound($hBitmapWithText)-1 If IsPtr($iBKColor[$i]) Then $hBitmapWithText[$i] = $iBKColor[$i] Else $hBitmapWithText[$i] = _GDIPlus_CreateSwitchBmp($iWidth, $iHeight, $iBKColor[$i], $sText, $iTxtColor, $iState, 0xFFFFFFFF, $iFontSize,$sFont,$iAlign,$iFontStyle) ;Standart-Farbe EndIf Next Else $hBitmapWithText[0] = _GDIPlus_CreateSwitchBmp($iWidth, $iHeight, $iBkColor, $iColorAkzent, $sText, $iTxtColor, 128, 0xFFFFFFFF, $iFontSize,$sFont,$iAlign,$iFontStyle) ;Standart-Farbe (unchecked) $hBitmapWithText[1] = _GDIPlus_CreateSwitchBmp($iWidth, $iHeight, $iBkColor, $iColorAkzent, $sText, $iTxtColor, 129, 0xFFFFFFFF, $iFontSize,$sFont,$iAlign,$iFontStyle) ;Hover-Over (unchecked) $hBitmapWithText[2] = _GDIPlus_CreateSwitchBmp($iWidth, $iHeight, $iBkColor, $iColorAkzent, $sText, $iTxtColor, 130, 0xFFFFFFFF, $iFontSize,$sFont,$iAlign,$iFontStyle) ;Pressed (State bevor: unchecked) $hBitmapWithText[3] = _GDIPlus_CreateSwitchBmp($iWidth, $iHeight, $iBkColor, $iColorAkzent, $sText, $iTxtColor, 192, 0xFFFFFFFF, $iFontSize,$sFont,$iAlign,$iFontStyle) ;Disabled $hBitmapWithText[4] = _GDIPlus_CreateSwitchBmp($iWidth, $iHeight, $iBkColor, $iColorAkzent, $sText, $iTxtColor, 260, 0xFFFFFFFF, $iFontSize,$sFont,$iAlign,$iFontStyle) ;Standart-Farbe (checked) $hBitmapWithText[5] = _GDIPlus_CreateSwitchBmp($iWidth, $iHeight, $iBkColor, $iColorAkzent, $sText, $iTxtColor, 264, 0xFFFFFFFF, $iFontSize,$sFont,$iAlign,$iFontStyle) ;Hover-Over (checked) $hBitmapWithText[6] = _GDIPlus_CreateSwitchBmp($iWidth, $iHeight, $iBkColor, $iColorAkzent, $sText, $iTxtColor, 272, 0xFFFFFFFF, $iFontSize,$sFont,$iAlign,$iFontStyle) ;Pressed (State bevor: checked) $hBitmapWithText[7] = _GDIPlus_CreateSwitchBmp($iWidth, $iHeight, $iBkColor, $iColorAkzent, $sText, $iTxtColor, 352, 0xFFFFFFFF, $iFontSize,$sFont,$iAlign,$iFontStyle) ;Disabled EndIf ;ImageList erstellen Local $gImageList = _GUIImageList_Create($iWidth, $iHeight, 5, 3, UBound($hBitmapWithText)-1) ;Erstellt eine Imagelist und scaliert dann alle Bilder auf die Maße des Buttons For $i = 0 To UBound($hBitmapWithText)-1 ;Befüllt die Imagelist mit den gewählten Icons aus der zuvor erstellten ".dll" Local $test = _GUIImageList_Add($gImageList, $hBitmapWithText[$i]) Next ;Button erstellen abschliesen _GUICtrlButton_SetImageList($gButton, $gImageList, 1, 0,0,0,0) ;weißt die Imagelist dem Button zu _GDIPlus_Shutdown() Return $gButton ;gibt den Handel zum Button zurück EndFunc Func _GDIPlus_CreateSwitchBmp($iW, $iH, $iBkColor = 0xFFFFFFFF, $iColorAkzent = 0xFF00A000, $sTXT = "", $iTxtColor = 0xFF000000, $iState = 0, $iStateColor = 0xFFFFFFFF, $iFontSize = 8.5, $sFont = "Arial", $iAlign = 1, $iFontStyle = 0) Local $hBitmap = DllCall($__g_hGDIPDll, "uint", "GdipCreateBitmapFromScan0", "int", $iW, "int", $iH, "int", 0, "int", $GDIP_PXF32ARGB, "ptr", 0, "int*", 0) ;Erstellt irgendwie eine Bitmap und gibt dazu eineige Infos mit aus $hBitmap = $hBitmap[6] ;Nimmt nur das was gebraucht wird. Local $hBmpCtxt = _GDIPlus_ImageGetGraphicsContext($hBitmap) ;erstellt ein Handel zu einem Graphic object basierend auf der erstellten Bitmap _GDIPlus_GraphicsSetSmoothingMode($hBmpCtxt, 2) ;Erstellt die benötigten Objekt-Tools ;Brusches Local $hBrushBackground = _GDIPlus_BrushCreateSolid($iBkColor) ;Pinsel Hintergrund Local $hBrushAkzent = _GDIPlus_BrushCreateSolid(0xFF606060) ;Pinsel Aktzent Farbe Local $hBrushWhite = _GDIPlus_BrushCreateSolid(0xFFFFFFFF) ;Pinsel White ;Pens Local $hPenBoarder = _GDIPlus_PenCreate($iStateColor, 1) ;Erstellt einen Stift, er wird später ggf. dicker gemacht Local $hPen = _GDIPlus_PenCreate($iStateColor, 1) ;Erstellt einen Stift ;Fonts for Text Local $hFormat = _GDIPlus_StringFormatCreate() ;Format Local $hFamily = _GDIPlus_FontFamilyCreate($sFont) ;Font Family Local $hFont = _GDIPlus_FontCreate($hFamily, $iFontSize, $iFontStyle) ;Font Local $tLayout = _GDIPlus_RectFCreate($iH, $iH / 2 - ($iFontSize / 1.3), $iW-$iH, $iH) ;Rechteck in dem der String kommt _GDIPlus_StringFormatSetAlign($hFormat, $iAlign) ;Ausrichtung ;zeichnen der Bitmap ;Hintergrund _GDIPlus_GraphicsFillRect($hBmpCtxt, -1,-1, $iW+1,$iH+1, $hBrushBackground) ;State dependig modifications If BitAND($iState, 1) = 1 Then _GDIPlus_BrushSetSolidColor($hBrushAkzent, 0xFF808080) ;setzt die Akzent farbe etwas Heller als Grau If BitAND($iState, 2) = 2 Then _GDIPlus_BrushSetSolidColor($hBrushAkzent, 0xFF707070) ;setzt die Akzent farbe auf die angegebene Akzentfarbe If BitAND($iState, 4) = 4 Then _GDIPlus_BrushSetSolidColor($hBrushAkzent, $iColorAkzent) ;setzt die Akzent farbe auf die angegebene Akzentfarbe If BitAND($iState, 8) = 8 Then _GDIPlus_BrushSetSolidColor($hBrushAkzent, GetChangeColor($iColorAkzent, 0x00202020, False)) ;setzt die Akzent farbe auf die angegebene Akzentfarbe If BitAND($iState, 16) = 16 Then _GDIPlus_BrushSetSolidColor($hBrushAkzent, GetChangeColor($iColorAkzent, 0x00101010, False)) ;setzt die Akzent farbe auf die angegebene Akzentfarbe If BitAND($iState, 32) = 32 Then _GDIPlus_BrushSetSolidColor($hBrushAkzent, GetChangeColor($iColorAkzent, 0x00404040, True)) ;setzt die Akzent farbe auf die angegebene Akzentfarbe $iW -=2 $iH -=2 _GDIPlus_GraphicsFillEllipse($hBmpCtxt, 0,0, $iH,$iH, $hBrushAkzent) _GDIPlus_GraphicsFillRect($hBmpCtxt, ($iH/2),0, $iW-$iH,$iH, $hBrushAkzent) _GDIPlus_GraphicsFillEllipse($hBmpCtxt, $iW-$iH,0, $iH,$iH, $hBrushAkzent) If BitAND($iState, 64) = 64 Then _GDIPlus_BrushSetSolidColor($hBrushWhite, 0xFFA0A0A0) ;setzt die Punkt Farbe Grauer If BitAND($iState, 128) = 128 Then _GDIPlus_GraphicsFillEllipse($hBmpCtxt, $iW/20,$iH/10, $iH-$iH/5,$iH-$iH/5, $hBrushWhite) ;Zeichnet den linken Punkt If BitAND($iState, 256) = 256 Then _GDIPlus_GraphicsFillEllipse($hBmpCtxt, $iW-$iW/20-($iH-$iH/5),$iH/10, $iH-$iH/5,$iH-$iH/5, $hBrushWhite) ;Zeichnet den Rechten Punkt ;Erstellt das Handle zu dem Objekt Local $hHBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBitmap) ;löscht alle nicht mehr benötigten Objekte _GDIPlus_FontDispose($hFont) _GDIPlus_FontFamilyDispose($hFamily) _GDIPlus_StringFormatDispose($hFormat) _GDIPlus_BrushDispose($hBrushAkzent) _GDIPlus_BrushDispose($hBrushWhite) _GDIPlus_GraphicsDispose($hBmpCtxt) _GDIPlus_BitmapDispose($hBitmap) ;rückgabe des handels Return $hHBitmap EndFunc Func GetChangeColor($hexColor, $hexOffset, $bDarker = True) Local $iColorLen = StringLen(Hex($hexColor)) Local $iOffsetLen = StringLen(Hex($hexOffset)) ;Color Local $iRed = Dec(StringMid(Hex($hexColor), $iColorLen-5, 2)) Local $iGrn = Dec(StringMid(Hex($hexColor), $iColorLen-3, 2)) Local $iBlu = Dec(StringMid(Hex($hexColor), $iColorLen-1, 2)) Local $iAlpha = -1 If $iColorLen = 8 Then Local $iAlpha = Dec(StringMid(Hex($hexColor), $iColorLen-7, 2)) ;Offset Local $iRedOffset = Dec(StringMid(Hex($hexOffset), $iOffsetLen-5, 2)) Local $iGrnOffset = Dec(StringMid(Hex($hexOffset), $iOffsetLen-3, 2)) Local $iBluOffset = Dec(StringMid(Hex($hexOffset), $iOffsetLen-1, 2)) Local $iAlphaOffset = -1 If $iOffsetLen = 8 Then Local $iAlphaOffset = Dec(StringMid(Hex($hexOffset), $iOffsetLen-7, 2)) If $bDarker Then ;Darker Color $iRed -= $iRedOffset $iGrn -= $iGrnOffset $iBlu -= $iBluOffset If $iAlpha <> -1 And $iAlphaOffset <> -1 Then $iAlpha -= $iAlphaOffset Else ;Brighter Color $iRed += $iRedOffset $iGrn += $iGrnOffset $iBlu += $iBluOffset If $iAlpha <> -1 And $iAlphaOffset <> -1 Then $iAlpha += $iAlphaOffset Endif Local $hexResult If $iAlpha <> -1 Then $hexResult = "0x" & Hex(ColorBorder($iAlpha), 2) & Hex(ColorBorder($iRed), 2) & Hex(ColorBorder($iGrn), 2) & Hex(ColorBorder($iBlu), 2) Else $hexResult = "0x" & ColorBorder($iRed) & ColorBorder($iGrn) & ColorBorder($iBlu) EndIf Return $hexResult EndFunc Func ColorBorder($iColor) If $iColor > 255 Then $iColor = 255 If $iColor < 0 Then $iColor = 0 Local $sResult = "" If $sResult < 10 Then $sResult = "0" $sResult &= String($iColor) Return $sResult EndFunc
-
Klingt definitv Sinnvoll, Danke