Wenn der Hover-Effekt eintreten soll, muß die Abfrage der Cursorinfo kontinuierlich in der Schleife erfolgen und nicht erst bei Betätigung des Button. ![]()
Beiträge von BugFix
-
-
Welchen Sinn macht es FileSelectFolder zu nutzen, wenn du den Pfad verwirfst?
[autoit]
OK, wenn du es willst- einfach den Ordnernamen selektieren:$selected = "C:\bla\blub"
[/autoit]
$folder = StringTrimLeft($selected, StringInStr($selected, '\', 1, -1)) -
Warum würdest Du Hotkey vermeiden ?
- sind auch wirksam, wenn dein Skript läuft, aber das Fenster nicht aktiv ist
- es kann leicht zu Konflikten mit HotKeys vom System oder anderen Programmen kommen
Mit GuiAcceleratorSet ist garantiert, dass der Hotkey ausschließlich in der zugeordneten GUI wirksam ist.
Definiere mal einen Hotkey mit ENTER und wechsle dann mal parallel in einen Editor zum Schreiben. Bei jedem Zeilenumbruch (Enter) wird der HotKey in deinem Skript aktiviert.
(Kann man natürlich unterbinden, indem in die HK-Funktion eine Abfrage nach dem aktiven Fenster eingebunden wird). -
[autoit]Es muß doch zuerst das ? Fenster ermittelt werden.
Opt("WinTitleMatchMode", 2)
[/autoit]Wenn ich das jetzt gerade richtig im Kopf habe ist Parameter 2 = Erkennung von Teilen des Fenster-Titels
Dein Fenstertitel ist z.B. "Acrobat Reader - DATEINAME", somit reicht es, wenn du nach "DATEINAME" das Fenster selektierst. -
Ich habe die Erfahrung gemacht, dass man mit den nativen Objektfunktionen wesentlich effektiver arbeiten kann als mit entsprechenden AutoIt-Umsetzungen. Ich habe zwar auch schon viele Dinge nach AutoIt portiert, muß aber eingestehen, dass in dem Moment, wenn man weiß wie es geht, das Original immer die bessere Wahl ist.
Z.B. muß ich in einer AutoIt-Funktion (um sie allgemeingültig zu halten) jedesmal eine Fehlerroutine abarbeiten (IsObj.. etc.), das kostet natürlich auch Zeit in der Abarbeitung.
Wer aber nur mal ein.. zwei Funktionen benötigt, für den sind die Funktionen sicher sehr nützlich.
Ergo: Ja, es macht sicher Sinn - und sei es nur aufzuzeigen, wie man Objekte anspricht.
(Falls du noch Zuarbeit benötigst, ich habe sicher noch ein paar Grafik-Exel Umsetzungen rumliegen ;)) -
Lies deine Frage nochmal durch und sag mir, ob du sie verstehst. :wacko:
Übrigens ist es wesentlicher hilfreicher, wenn du schreiben würdest:
- Ich habe dieses vor
- bei Aktion X soll Ereignis Y geschehen
- versucht habe ich es bisher mit (Skript)Bis jetzt habe ich nicht die geringste Vorstellung, was du vorhast.
-
Hotkey würde ich vermeiden. Erstelle dir ein Dummy-Control
[autoit]GUICtrlCreateDummy
[/autoit]und weise diesem die Funktion mit dem Shellexecute-Aufruf zu über
[autoit]GUISetAccelerators
[/autoit] -
das wenn man [Shift] + [a] drückt (=A) auch ein Großes A erkannt wird,
Was meinst du mit "erkannt wird" ? Das System erkennt doch diese Kombination und schreibt in jedes Edit-Ctrl den Großbuchstaben.
Einen Hotkey für Großbuchstaben kann es nicht geben, da ja Tastaturwerte rein virtuell sind und aus vorab erfolgten Tastenkombinationen in den eingestellten Tastaturcode übersetzt und dann der virtuelle Tastenwert ausgegeben wird. Es gibt keine Großbuchstaben auf der Tastatur.
Diese entstehen immer aus: {SHIFTDOWN}+{Buchstabentaste}+{SHIFTUP}
Willst du wissen ob eine derartige Kombination gedrückt wurde, mußt du sie also auch detailliert abfragen.
Wie das geht, darauf gehe ich nicht weiter ein und auch von Anderen wird es dazu sicher keinen Support geben, da wir dann schon in den Grenzbereich zu unseren Forenregeln kommen. -
Es gibt keinen Grund diese Diskussion bis zum St. Nimmerleinstag fortzuführen.
Wir hatten uns mit der Thematik bereits ausgiebig befaßt und sind zu dem Entschluß gekommen, dass wir kein Bedankungsritual einführen wollen. Punkt.[CLOSED]
-
Hi,
über den Umweg Messageauswertung gibt es ja einen Workaround beim Ändern der Spaltenbreite sofort wieder die Originalbreite zu setzen.In der Funktion nutze ich jetzt die ab Vista verfügbare Möglichkeit, ein Flag zum Fixieren der Spaltenbreite zu setzen (oder auch wieder zu löschen).
Es können wahlweise alle Spalten fixiert werden (Standard) oder einzelne.
Die Funktion kann mit ID oder Handle des Listview aufgerufen werden._GuiCtrlListView_HeaderItemFix(1.0)
[autoit]#Region - TimeStamp
[/autoit] [autoit][/autoit] [autoit]
; 2011-10-25 20:39:12 v 1.0
#EndRegion - TimeStamp#include-once
[/autoit] [autoit][/autoit] [autoit]
#include <GuiListView.au3>
#include <HeaderConstants.au3>
#include <ListViewConstants.au3>
#include <SendMessage.au3>;===============================================================================
[/autoit]
; Function Name....: _GuiCtrlListView_HeaderItemFix
; Description......: Fixiert die Spaltenbreite im Listview für eine oder alle Spalten, der User kann diese nicht ändern
; Fixierung läßt sich wieder aufheben
; Parameter(s).....: $hWnd Handle/ID des Listview
; $iItemIndex 0-basierter SpaltenIndex (-1 Standard, wird für alle Spalten ausgeführt)
; $fFixWidth 1 - Standard, Fixierung setzen; 0 - Fixierung aufheben
; Requirement(s)...: OS Vista oder höher
; Return Value(s)..: Fehler @error Spaltenindex größer als Maximalwert
; Author(s)........: BugFix ( [email='bugfix@autoit.de'][/email] )
;===============================================================================
Func _GuiCtrlListView_HeaderItemFix($hWnd, $iItemIndex=-1, $fFixWidth=1)
If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
Local $hHeader = _SendMessage($hWnd, $LVM_GETHEADER)
Local $iColumn = _SendMessage($hHeader, $HDM_GETITEMCOUNT)
Local $iFrom = $iItemIndex, $iTo = $iItemIndex, $iFmt
If $iItemIndex < 0 Then
$iFrom = 0
$iTo = $iColumn -1
EndIf
If $iItemIndex > $iColumn -1 Then Return SetError(1,0,-1)
Local Const $_HDM_GETITEM = 0x120B
Local Const $_HDM_SETITEM = 0x120C
Local Const $_HDF_FIXEDWIDTH = 0x0100
Local $HDITEM = DllStructCreate('uint mask;int cxy;ptr pszText;hwnd hbm;int cchTextMax;int fmt;lparam LPARAM;int iImage;int iOrder;uint type;int_ptr pvFilter;uint state;')
DllStructSetData($HDITEM, 'mask', BitOR($HDI_FORMAT,$HDI_FILTER,$HDI_TEXT))
DllStructSetData($HDITEM, 'cchTextMax', 260)
Local $pszText = DllStructCreate('char[260];')
If _GUICtrlListView_GetUnicodeFormat($hWnd) Then $pszText = DllStructCreate('wchar[260];')
DllStructSetData($HDITEM, 'pszText', DllStructGetPtr($pszText))
For $i = $iFrom To $iTo
If $fFixWidth Then
_SendMessage($hHeader, $_HDM_GETITEM, $i, DllStructGetPtr($HDITEM))
$iFmt = BitOR(DllStructGetData($HDITEM, 'fmt'), BitOR($HDF_OWNERDRAW,$HDF_STRING,$_HDF_FIXEDWIDTH))
DllStructSetData($HDITEM, 'fmt', $iFmt)
_SendMessage($hHeader, $_HDM_SETITEM, $i, DllStructGetPtr($HDITEM))
Else
_SendMessage($hHeader, $_HDM_GETITEM, $i, DllStructGetPtr($HDITEM))
$iFmt = DllStructGetData($HDITEM, 'fmt')
If BitAND($iFmt, $_HDF_FIXEDWIDTH) Then $iFmt = BitXOR($iFmt, $_HDF_FIXEDWIDTH)
DllStructSetData($HDITEM, 'fmt', $iFmt)
_SendMessage($hHeader, $_HDM_SETITEM, $i, DllStructGetPtr($HDITEM))
EndIf
Next
EndFunc ;==>_GuiCtrlListView_HeaderItemFix -
Du vergleichst Birnen mit Äpfeln.
[autoit]
Wenn du prüfen möchtest ob dein String leer ist, dann vergleiche mit einem Leerstring statt mit einem numerischen Wert.If $Value = '' Then ; String ohne Inhalt
[/autoit] -
Verwende doch mal die Suche.
[autoit]
Sichtbarkeit des Objekts setzt du ganz einfach mit:$object.visible = 0 ; 1 = sichtbar
[/autoit] -
OK, hab ich voll übersehen

Danke. -
Ich habe nun schon ..zig Foren durchforstet, kenne MSDN bald auswendig (:D) und bin doch keinen Schritt weiter.
Mein Problem: Wo zum Teufel speichert Windows die Styles für Controls?!
Style und ExStyle für Fenster sind mit GUIGetStyle() abfragbar. Und genauso sollte doch auch ein GUICtrlGetStyle möglich sein.
Leider ist das nicht der Fall. Für einige wenige Control gibt es Funktionen um Style und/oder ExStyle abzufragen.
Falls ihr euch fragt, wozu das gut sein soll - wenn man eine UDF erstellt, die bestimmte Styles erfordert bzw. bestimmte Styles ausschließt muß ich schon den Style des Controls kennen um notwendige Styles noch zu setzen (wobei das nicht vorrangig ist, da BitOr($oldStyle, $Style) sich nicht dran stört, wenn der Style bereits vorhanden ist) oder viel wichtiger zu entfernen (mit BitXOr($oldStyle, $Style) würde ich den ungewollten Style ja setzen, falls gar nicht vorhanden).
Da das AutoIt-Window-Info-Tool die Styles auslesen kann, muß es ja einen Weg geben. - Wer kennt ihn? -
Hi,
nach der FormatListview-UDF gibt es jetzt wieder etwas "Listviewmalerei".
Den meisten von euch wird die monotone blaue Färbung von selektierten Listviewitem wohl auch nicht so gefallen. Ich habe nun eine UDF erstellt mit der man das für ein (bis40beliebig viele) Listview einer GUI völlig separat gestalten kann. Das basiert auf einem Workaround von Achilles aus dem Jahr 2008. Aber außer mir hatte wohl noch niemand Interesse, das in eine vernünftig zu händelnde Funktion zu packen.
- Die verwendeten Listview müssen zwingend mit "GuiCtrlCreateListView" erstellt werden! Nur so gibt es eine ID, auf die auch aus der UDF heraus zugegriffen werden kann.
-Wird ein Listview-Style bei der Erstellung des LV gesetzt, so ist dieser beim Registrieren des LV mit an die UDF zu übergeben (Ausnahme: Default-Style)
- Für jedes registrierte Listview können eigene Selektionsfarben (Text/Hintergrund) gesetzt werden.
- Die Standardfarben der Listview der GUI (gültig für alle registrierten LV) lassen sich ebenfalls setzen.
- Es können registrierte LV auch wieder zurückgesetzt werden, sieerhalten dann die Standardfarben.werden dann wieder vom System gezeichnet und verhalten sich entsprechend (grau bei Fokusverlust). Der Style wird zurückgesetzt auf den Style bei Erstellung.
Ein entscheidender Vorteil dieser Variante ist (wie ihr auf dem Bild sehen könnt): Auch nach Fokusverlust bleibt die Selektionsfärbung erhalten.Edit 24.10.2011: Kleine Änderungen - s. durchgestrichene bzw. blaue Bereiche in der Beschreibung vorab.
OwnLVSelection(1.2).au3
[autoit]#Region - TimeStamp
[/autoit] [autoit][/autoit] [autoit]
; 2011-10-24 12:05:40 v 1.2
#EndRegion - TimeStamp
#include-once
#include <Array.au3>
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>Global Const $ODT_LISTVIEW = 102
[/autoit] [autoit][/autoit] [autoit]
Global Const $ODA_DRAWENTIRE = 0x1
Global Const $ODS_SELECTED = 0x0001;===============================================================================
[/autoit] [autoit][/autoit] [autoit]
; Function Name....: _GuiCtrlListview_OwnSelectionAdd
; Description......: Registriert ein Listview für eigene Selektion
; Parameter(s).....: $hWnd Handle (oder ID) des Listview
; Requirement(s)...: Das Listview MUSS ZWINGEND mit "GuiCtrlCreateListView" erstellt werden!
; Return Value(s)..: Fehler @error - Handle/ID nicht vorhanden
; Author(s)........: BugFix ( [email='bugfix@autoit.de'][/email] )
;===============================================================================
Func _GuiCtrlListview_OwnSelectionAdd($hWnd)
Local $ret = __ManageSelection('add', $hWnd)
If @error Then Return SetError(1)
EndFunc ;==>_GuiCtrlListview_OwnSelectionAdd;===============================================================================
[/autoit] [autoit][/autoit] [autoit]
; Function Name....: _GuiCtrlListview_OwnSelectionDel
; Description......: Listview nicht mehr in eigener Selektion zeichnen
; Selektion wird wieder vom System gezeichnet, graut aus bei Fokusverlust
; Parameter(s).....: $hWnd Handle (oder ID) des Listview
; Return Value(s)..: Fehler @error - 1 Handle/ID nicht vorhanden
; 2 Handle/ID nicht registriert
; Author(s)........: BugFix ( [email='bugfix@autoit.de'][/email] )
;===============================================================================
Func _GuiCtrlListview_OwnSelectionDel($hWnd)
Local $ret = __ManageSelection('del', $hWnd)
If @error Then Return SetError(@error)
EndFunc ;==>_GuiCtrlListview_OwnSelectionDel;===============================================================================
[/autoit] [autoit][/autoit] [autoit]
; Function Name....: _GuiCtrlListview_OwnSelectionSetColor
; Description......: Text- und Hintergrundfarbe für die Selektion setzen
; Parameter(s).....: $hWnd Handle (oder ID) des Listview (-1 setzt die Farben für alle registrierten Listview)
; $iForeColor Textfarbe der Selektion (-1 setzt Default-Color)
; $iBackColor Hintergrundfarbe der Selektion (-1 setzt Default-Color)
; Return Value(s)..: Fehler @error - 1 Handle/ID nicht vorhanden
; 2 Handle/ID nicht registriert
; Author(s)........: BugFix ( [email='bugfix@autoit.de'][/email] )
;===============================================================================
Func _GuiCtrlListview_OwnSelectionSetColor($hWnd=-1, $iForeColor=-1, $iBackColor=-1)
Local $aParam[3] = [$hWnd, $iForeColor, $iBackColor]
Local $ret = __ManageSelection('setcol', $aParam)
If @error Then Return SetError(@error)
EndFunc ;==>_GuiCtrlListview_OwnSelectionSetColor;===============================================================================
[/autoit] [autoit][/autoit] [autoit]
; Function Name....: _GuiCtrlListview_OwnSelectionSetDefCol
; Description......: Setzen der Standardfarben (nicht selektierter Bereich) für alle Listview
; Parameter(s).....: $iForeColor Textfarbe nicht selektierter Bereich (Standard: schwarz)
; $iBackColor Hintergrundfarbe nicht selektierter Bereich (Standard: weiß)
; Return Value(s)..: keiner
; Author(s)........: BugFix ( [email='bugfix@autoit.de'][/email] )
;===============================================================================
Func _GuiCtrlListview_OwnSelectionSetDefCol($iForeColor=0xFFFFFF, $iBackColor=0x000000)
Local $aParam[2] = [$iForeColor, $iBackColor]
__ManageSelection('defcol', $aParam)
EndFunc ;==>_GuiCtrlListview_OwnSelectionSetDefCol;===============================================================================
[/autoit] [autoit][/autoit] [autoit]
; Function Name....: Hilfsfunktion - __ManageSelection
; Description......: Verwaltung der Einstellungen
;===============================================================================
Func __ManageSelection($sAction, $vParam='')
Local Static $aHwnd[40][4], $iCurr = -1 ; [[hWnd, TxtCol, BackCol, OldStyle]]
Local Static $aDefCol[2] = [0x000000,0xFFFFFF]
Local $hLV, $index, $iFrom = 0, $iTo = $iCurr, $iStyle
Switch $sAction
Case 'add'
$hLV = $vParam
If Not IsHWnd($hLV) Then $hLV = GUICtrlGetHandle($hLV)
If Not IsHWnd($hLV) Then Return SetError(1)
If $iCurr = -1 Then GUIRegisterMsg($WM_DRAWITEM, "WM_DRAWITEM")
$iCurr += 1
If $iCurr > 39 Then ReDim $aHwnd[$iCurr+1][4]
$aHwnd[$iCurr][0] = $hLV
$iStyle = GUICtrlGetStyle($hLV)
$iStyle = Hex($iStyle[0],4)
$aHwnd[$iCurr][3] = $iStyle
GUICtrlSetStyle(_WinAPI_GetDlgCtrlID($hLV), BitOR($iStyle,$LVS_REPORT,$LVS_OWNERDRAWFIXED))
Case 'del'
$hLV = $vParam
If Not IsHWnd($hLV) Then $hLV = GUICtrlGetHandle($hLV)
If Not IsHWnd($hLV) Then Return SetError(1)
$index = _ArraySearch($aHwnd, $hLV)
If @error Then Return SetError(2)
; == Standardfarbe Systemmarkierung und Standardverhalten (Ausgrauen bei Fokusverlust)
GUICtrlSetStyle(_WinAPI_GetDlgCtrlID($hLV), '0x' & $aHwnd[$index][3])
$aHwnd[$index][0] = 0
Case 'setcol'
$hLV = $vParam[0]
If $hLV <> -1 Then ; == -1 alle Werte setzen
If Not IsHWnd($hLV) Then $hLV = GUICtrlGetHandle($hLV)
If Not IsHWnd($hLV) Then Return SetError(1)
$index = _ArraySearch($aHwnd, $hLV)
If @error Then Return SetError(2)
$iFrom = $index
$iTo = $index
EndIf
If $iCurr < 0 Then Return SetError(2) ; == noch kein Fenster registriert
If $vParam[1] = -1 Then $vParam[1] = $aDefCol[0]
If $vParam[2] = -1 Then $vParam[2] = $aDefCol[1]
For $i = $iFrom To $iTo
$aHwnd[$i][1] = RGB2BGR($vParam[1])
$aHwnd[$i][2] = RGB2BGR($vParam[2])
Next
Case 'getcol'
$index = _ArraySearch($aHwnd, $vParam)
If @error Then Return SetError(1)
Local $aRet[2] = [$aHwnd[$index][1],$aHwnd[$index][2]]
Return $aRet
Case 'defcol'
$aDefCol[0] = RGB2BGR($vParam[0])
$aDefCol[1] = RGB2BGR($vParam[1])
Case 'getdef'
Return $aDefCol
EndSwitch
EndFuncFunc RGB2BGR($iColor)
[/autoit] [autoit][/autoit] [autoit]
Local $sH = Hex($iColor,6)
Return '0x' & StringRight($sH, 2) & StringMid($sH,3,2) & StringLeft($sH, 2)
EndFuncFunc WM_DRAWITEM($hWnd, $Msg, $wParam, $lParam)
[/autoit] [autoit][/autoit] [autoit]
Local $tDRAWITEMSTRUCT, $iBrushColor, $cID, $itmID, $itmAction, $itmState, $hItm, $hDC, $bSelected, $aCol, $aDefCol
$tDRAWITEMSTRUCT = DllStructCreate("uint cType;uint cID;uint itmID;uint itmAction;uint itmState;" & _
"hwnd hItm;hwnd hDC;int itmRect[4];dword itmData", $lParam)
If DllStructGetData($tDRAWITEMSTRUCT, "cType") <> $ODT_LISTVIEW Then Return $GUI_RUNDEFMSG
$cID = DllStructGetData($tDRAWITEMSTRUCT, "cID")
$itmID = DllStructGetData($tDRAWITEMSTRUCT, "itmID")
$itmAction = DllStructGetData($tDRAWITEMSTRUCT, "itmAction")
$itmState = DllStructGetData($tDRAWITEMSTRUCT, "itmState")
$hItm = DllStructGetData($tDRAWITEMSTRUCT, "hItm")
$hDC = DllStructGetData($tDRAWITEMSTRUCT, "hDC")
$aCol = __ManageSelection('getcol', $hItm)
$aDefCol = __ManageSelection('getdef')
If @error Then Return $GUI_RUNDEFMSG
$bSelected = BitAND($itmState, $ODS_SELECTED)Switch $itmAction
[/autoit] [autoit][/autoit] [autoit]
Case $ODA_DRAWENTIRE
If $itmState = $bSelected Then
$iBrushColor = $aDefCol[1]
_WinAPI_SetTextColor($hDC, $aDefCol[0])
Else
$iBrushColor = $aCol[1]
_WinAPI_SetTextColor($hDC, $aCol[0])
EndIf
Local $aBrush = DLLCall("gdi32.dll","hwnd","CreateSolidBrush", "int", $iBrushColor)
Local $aBrushOld = _WinAPI_SelectObject($hDC, $aBrush[0])
_WinAPI_FillRect($hDC, DllStructGetPtr($tDRAWITEMSTRUCT, "itmRect"), $aBrush[0])
_WinAPI_SelectObject($hDC, $aBrushOld)
_WinAPI_DeleteObject($aBrush[0])
; == Item
Local $itmText = _GUICtrlListView_GetItemText($hItm, $itmID)
DllStructSetData($tDRAWITEMSTRUCT, "itmRect", DllStructGetData($tDRAWITEMSTRUCT, "itmRect", 1) +5, 1) ; == Schrift 5px nach rechts
DllStructSetData($tDRAWITEMSTRUCT, "itmRect", DllStructGetData($tDRAWITEMSTRUCT, "itmRect", 2) +2, 2) ; == Schrift 2px nach unten
DllCall("user32.dll", "int", "DrawText", "hwnd", $hDC, "str", $itmText, "int", StringLen($itmText), _
"ptr", DllStructGetPtr($tDRAWITEMSTRUCT, "itmRect"), "int", $DT_LEFT)
; == SubItem
Local $iCol = _GUICtrlListView_GetColumnCount($hItm)
If $iCol > 1 Then
For $i = 1 To $iCol -1
Local $iSubItmText = _GUICtrlListView_GetItemText($hItm, $itmID, $i)
Local $aSubItmRect = _GUICtrlListView_GetSubItemRect($hItm, $itmID, $i)
Local $iSubItmRect = DllStructCreate("int[4]")
DllStructSetData($iSubItmRect, 1, $aSubItmRect[0] +5, 1)
DllStructSetData($iSubItmRect, 1, $aSubItmRect[1] +2, 2)
DllStructSetData($iSubItmRect, 1, $aSubItmRect[2], 3)
DllStructSetData($iSubItmRect, 1, $aSubItmRect[3], 4)
DllCall("user32.dll", "int", "DrawText", "hwnd", $hDC, "str", $iSubItmText, "int", StringLen($iSubItmText), _
"ptr", DllStructGetPtr($iSubItmRect), "int", $DT_LEFT)
Next
EndIf
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc; #FUNCTION# =========================================================================================================
[/autoit]
; Name...........: GUICtrlGetStyle
; Description ...: Retrieves the Styles/ExStyles value(s) of the control.
; Syntax.........: GUICtrlGetBkColor($iControlID)
; Parameters ....: $iControlID - A valid control ID.
; Requirement(s).: v3.3.2.0 or higher
; Return values .: Success - Returns an Array[2] = [Style, ExStyle] with the Styles/ExStyles value(s).
; Failure - Returns an Array with -1 as the 0 & 1 Index's.
; Author ........: guinness & additional information from Melba23.
; Example........; Yes
;=====================================================================================================================
Func GUICtrlGetStyle($iControlID)
Local $aArray[2] = [-1, -1], $aExStyle, $aStyle, $hControl = $iControlID
If Not IsHWnd($hControl) Then $hControl = GUICtrlGetHandle($iControlID)
$aStyle = DllCall("user32.dll", "long", "GetWindowLong", "hwnd", $hControl, "int", 0xFFFFFFF0)
If Not @error Then
$aArray[0] = $aStyle[0]
EndIf
$aExStyle = DllCall("user32.dll", "long", "GetWindowLong", "hwnd", $hControl, "int", 0xFFFFFFEC)
If Not @error Then
$aArray[1] = $aExStyle[0]
EndIf
Return $aArray
EndFunc ;==>GUICtrlGetStyleOwnLVSelection_Bsp(0.2).au3
[autoit]#Region - TimeStamp
[/autoit] [autoit][/autoit] [autoit]
; 2011-10-24 00:42:01 v 0.2
#EndRegion - TimeStamp
#include <GuiListView.au3>
#include "OwnLVSelection.au3"$gui = GUICreate('Bsp. OwnLVSelection', 430, 300)
[/autoit] [autoit][/autoit] [autoit]
$cLV1 = GuiCtrlCreateListView('Spalte 1|Spalte 2', 10, 10, 200, 135)
$hLV1 = GUICtrlGetHandle($cLV1)
For $i = 1 To 20
$index = _GUICtrlListView_AddItem($hLV1, 'Item-' & $i)
_GUICtrlListView_AddSubItem($hLV1, $index, 'Item-' & $i & '-2', 1)
Next
_GuiCtrlListview_OwnSelectionAdd($hLV1)
_GuiCtrlListview_OwnSelectionSetColor($hLV1, 0xFF55AA, 0xFFFF00)$cLV2 = GuiCtrlCreateListView('Spalte 1|Spalte 2', 220, 10, 200, 135)
[/autoit] [autoit][/autoit] [autoit]
$hLV2 = GUICtrlGetHandle($cLV2)
For $i = 1 To 20
$index = _GUICtrlListView_AddItem($hLV2, 'Item-' & $i)
_GUICtrlListView_AddSubItem($hLV2, $index, 'Item-' & $i & '-2', 1)
Next
_GuiCtrlListview_OwnSelectionAdd($hLV2)
_GuiCtrlListview_OwnSelectionSetColor($hLV2, 0xFFFFFF, 0x0000FF)$cLV3 = GuiCtrlCreateListView('Spalte 1|Spalte 2', 10, 155, 200, 135)
[/autoit] [autoit][/autoit] [autoit]
$hLV3 = GUICtrlGetHandle($cLV3)
For $i = 1 To 20
$index = _GUICtrlListView_AddItem($hLV3, 'Item-' & $i)
_GUICtrlListView_AddSubItem($hLV3, $index, 'Item-' & $i & '-2', 1)
Next
_GuiCtrlListview_OwnSelectionAdd($hLV3)
_GuiCtrlListview_OwnSelectionSetColor($hLV3, 0x222222, 0xCCCCCC)$cLV4 = GuiCtrlCreateListView('Spalte 1|Spalte 2', 220, 155, 200, 135)
[/autoit] [autoit][/autoit] [autoit]
$hLV4 = GUICtrlGetHandle($cLV4)
For $i = 1 To 20
$index = _GUICtrlListView_AddItem($hLV4, 'Item-' & $i)
_GUICtrlListView_AddSubItem($hLV4, $index, 'Item-' & $i & '-2', 1)
Next
_GuiCtrlListview_OwnSelectionAdd($hLV4)
_GuiCtrlListview_OwnSelectionSetColor($hLV4, 0x1111FF, 0x00BBBB)GUISetState()
[/autoit] [autoit][/autoit] [autoit]Sleep(5000)
[/autoit] [autoit][/autoit] [autoit]
_GuiCtrlListview_OwnSelectionDel($hLV4)Do
[/autoit]
Until GUIGetMsg() = -3
Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist. -
Ich fand es schon immer nervig, dass ich im Listview bei Selektion eines Item 5 Befehle (inkl. UpdateLV) ausführen muß, damit es aussieht, wie von Hand geklickt den Fokus hat und garantiert sichtbar ist. :wacko:
[autoit]
Und deshalb habe ich die 5 Aufrufe in eine Funktion gepackt. Die Anwendung bedarf wohl keiner weiteren Erläuterung.
Func _GuiCtrlListView_SetFocusSelected($hWnd, $iIndex=0)
[/autoit]
_GUICtrlListView_BeginUpdate($hWnd)
_GUICtrlListView_SetItemState($hWnd, $iIndex, $LVIS_FOCUSED, $LVIS_FOCUSED)
_GUICtrlListView_SetItemState($hWnd, $iIndex, $LVIS_SELECTED, $LVIS_SELECTED)
_GUICtrlListView_EnsureVisible($hWnd, $iIndex)
_GUICtrlListView_EndUpdate($hWnd)
EndFunc -
Ich hatte ein Skript geschrieben, um ungenutzte Variablen zu ermitteln.
Es läßt sich aber auch nutzen, um alle Variablen des Skriptes und deren Vorkommen (Funktion, außerhalb Funktion) anzuzeigen.
https://autoit.de/index.php?page…7347#post217347 -
[OT]
dann ist da noch das leerzeichen zwischen sleep und der klammer ..
und es fehlt noch das endswitch ..
und die Formatierung ist auch kacke ..
Bitte unterlaß solch sinnlose Posts!
1. Du kannst soviele Leerzeichen zwischen Funktionsname und Klammer schreiben, wie du Lust hast! Hättest du je einen Blick in die Hilfe geworfen, wäre dir aufgefallen, dass in sehr vielen Bsp. immer ein Leerzeichen zwischen Funktionsname und Klammer steht!
2. Es ist unschwer erkennbar, dass dies hier der Ausschnitt aus einem Skript ist. Beim Kopieren ist EndSwitch nicht mit erwischt worden. - Ist dir sicher noch nie passiert.
3. Auch du hast sicher schon mal Code statt im Tab "Quellcode", im Tab "Editor" gepostet. Und schon ist die ganze Formatierung futsch.Melde dich bitte, wenn du etwas zur Sache zu sagen hast! Aber ein offensichtlich bereits beantwortetes Thema vollzuspamen kannst du dir schenken.
[/OT] -
bitte einfache erklärung
Diese ist ganz einfach: Lies mal ganz kurz in der Hilfe zu Switch..Case. Was fällt dir auf: Switch <expression>.
Du hast nicht festgelegt, welcher Ausdruck im Switch behandelt werden soll.
So, wie du den Aufbau hast, entspricht es einem Select..Case -
Die Message heißt übrigens WM_SIZING (da hatte ich mich vertan).
Das Problem ist zu Lösen mit "_WinAPI_SetWindowLong", allerdings will ich dir nicht dein Skript schreiben. Probier erst mal selbst.Na gut - hier mal ein Bsp., wie mit der Funktion gearbeitet wird. Das Anpassen für WM_SIZING kannst du ja dann selbst probieren.
Spoiler anzeigen
[autoit]#include <GuiImageList.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <GuiListView.au3>
#include <ListViewConstants.au3>
#include <StructureConstants.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>Local Const $GWL_WNDPROC = -4
[/autoit] [autoit][/autoit] [autoit]$hGui = GUICreate("Test", 400, 400)
[/autoit] [autoit][/autoit] [autoit]
$hListView = _GUICtrlListView_Create($hGui, "Listview", 10, 10, 380, 380)
_GUICtrlListView_SetExtendedListViewStyle($hListView, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT, $LVS_EX_SUBITEMIMAGES)); Load images
[/autoit] [autoit][/autoit] [autoit]
$hImage = _GUIImageList_Create()
_GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($hListView, 0xFF0000, 16, 16))
_GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($hListView, 0x00FF00, 16, 16))
_GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($hListView, 0x0000FF, 16, 16))
_GUICtrlListView_SetImageList($hListView, $hImage, 1); Add columns
[/autoit] [autoit][/autoit] [autoit]
_GUICtrlListView_InsertColumn($hListView, 0, "Column 1", 100)
_GUICtrlListView_InsertColumn($hListView, 1, "Column 2", 100)
_GUICtrlListView_InsertColumn($hListView, 2, "Column 3", 100); Add items
[/autoit] [autoit][/autoit] [autoit]
_GUICtrlListView_AddItem($hListView, "Row 1: Col 1", 0)
_GUICtrlListView_AddSubItem($hListView, 0, "Row 1: Col 2", 1)
_GUICtrlListView_AddSubItem($hListView, 0, "Row 1: Col 3", 2)
_GUICtrlListView_AddItem($hListView, "Row 2: Col 1", 1)
_GUICtrlListView_AddSubItem($hListView, 1, "Row 2: Col 2", 1)
_GUICtrlListView_AddItem($hListView, "Row 3: Col 1", 2)
GUISetState();
[/autoit] [autoit][/autoit] [autoit]
$hProc = DllCallbackRegister('_WinProc', 'ptr', 'hwnd;uint;wparam;lparam')
$hHook = _WinAPI_SetWindowLong($hGui, $GWL_WNDPROC, DllCallbackGetPtr($hProc))GUIRegisterMsg($WM_NOTIFY, 'WM_NOTIFY')
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]While GUIGetMsg() <> -3
[/autoit] [autoit][/autoit] [autoit]
Sleep(10)
WEnd_WinAPI_SetWindowLong($hGui, $GWL_WNDPROC, $hHook) ; original WinProc wiederherstellen
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Func _WinProc($hWnd, $iMsg, $iwParam, $ilParam)
[/autoit] [autoit][/autoit] [autoit]
; wenn nicht die gewünschte Msg kommt - Rückgabe an System
If $iMsg <> $WM_NOTIFY Then Return _WinAPI_CallWindowProc($hHook, $hWnd, $iMsg, $iwParam, $ilParam)Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView, $tInfo
[/autoit] [autoit][/autoit] [autoit]
$hWndListView = $hListView
If Not IsHWnd($hListView) Then $hWndListView = GUICtrlGetHandle($hListView)$tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
[/autoit] [autoit][/autoit] [autoit]
$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
$iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
$iCode = DllStructGetData($tNMHDR, "Code")
Switch $hWndFrom
Case $hWndListView
Switch $iCode
Case $LVN_COLUMNCLICK ; A column was clicked
$tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam)
ConsoleWrite('MyProc: $LVN_COLUMNCLICK -->Column: ' & DllStructGetData($tInfo, "SubItem") & @CRLF)
Return 0 ; <== Nachricht wird jetzt verworfen und kann über GUIRegisterMsg nicht verwertet werdenCase $NM_CLICK ; Sent by a list-view control when the user clicks an item with the left mouse button
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
$tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
ConsoleWrite("MyProc: $NM_CLICK " & "-->Index: " & DllStructGetData($tInfo, "Index") & _
" -->SubItem: " & DllStructGetData($tInfo, "SubItem") & @CRLF)
EndSwitch
EndSwitch
; jetzt wird die normale WinProc aufgerufen, die man mit GuiRegisterMsg auswerten kann
Return _WinAPI_CallWindowProc($hHook, $hWnd, $iMsg, $iwParam, $ilParam)
EndFunc ;==>_WinProcFunc WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
[/autoit]
Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView
$hWndListView = $hListView
If Not IsHWnd($hListView) Then $hWndListView = GUICtrlGetHandle($hListView)
$tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
$iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
$iCode = DllStructGetData($tNMHDR, "Code")
Switch $hWndFrom
Case $hWndListView
Switch $iCode
Case $LVN_COLUMNCLICK ; A column was clicked <== Diese Nachricht erreicht die Funktion nicht mehr
Local $tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam)
ConsoleWrite('GUIRegisterMsg: $LVN_COLUMNCLICK -->Column: ' & DllStructGetData($tInfo, "SubItem") & @CRLF)
Case $NM_CLICK ; Sent by a list-view control when the user clicks an item with the left mouse button
Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
ConsoleWrite("GUIRegisterMsg: $NM_CLICK " & "-->Index: " & DllStructGetData($tInfo, "Index") & _
" -->SubItem: " & DllStructGetData($tInfo, "SubItem") & @CRLF)
EndSwitch
EndSwitch
Return 0
EndFunc ;==>WM_NOTIFY