Was bitte, soll eine "PIN Verzeichniss Struktur" sein? Wozu soll das dienen?
Beiträge von BugFix
-
-
Hi,
das war alles etwas zu kompliziert gedacht.
Problem war doch: Da ist "irgendein" Zeilenumbruch.
Und dazu gibt es doch die passende Funktion um alle "irgendwelche Nichtzeichen" zu killen:
StringStripWS ( "string", 2 ) -
Da du keinen Style angibst, wird der Default verwendet:
default ( -1) : $LBS_SORT, $WS_BORDER, $WS_VSCROLLUm also ohne $LBS_SORT zu arbeiten, gib als Style an:
BitOr($WS_BORDER, $WS_VSCROLL) -
Probier mal so:
[autoit]Local $txt = 'Dein Text'
[/autoit]
Local $txtBuffer = DllStructCreate('wchar[' & StringLen($txt)+1 & ']') ; Unicode
; Local $txtBuffer = DllStructCreate('char[' & StringLen($txt) & ']') ; ASCII
DllCall("test.dll", "int", "funktion1", "ptr", DllStructGetPtr($txtBuffer))hBitmap in der dll dürfte mit Integer funktionieren, in AutoIt nimmst du dafür dann "hwnd".
-
Hab ich keine Erklärung für, zumal bisher nur bei dir dieses Problem auftritt. Aus dem Code heraus ist es definitiv nicht erklärbar. Die folgende Funktion verarbeitet den erstellten Code in das Abbrevformat:
Spoiler anzeigen
[autoit]Func _Code2Abbrev()
[/autoit]
Local $out = '', $count = _GUICtrlEdit_GetLineCount($Edit2), $line
If @error Then Return SetError(1)
For $i = 0 To $count - 1
$line = _GUICtrlEdit_GetLine($Edit2, $i)
If StringInStr($line, @TAB, 1) Then $line = StringReplace($line, @TAB, '\t')
If $i = $count - 1 Then
$out &= $line
Else
$out &= $line & '\n'
EndIf
Next
Return $out
EndFunc ;==>_Code2AbbrevDa kann kein Fragezeichen angehängt werden.
-
Tja, gab eine Änderung bei @extend von RegRead. Früher wurde der Typ als String zurückgegeben - nun als Konstante.
Habe die Funktion angepaßt.Spoiler anzeigen
[autoit]Func _RegReadBinary($KEY, $VALUE)
[/autoit]
If $KEY = '' Or $VALUE = '' Then Return SetError(4,0,1)
Local $reg = RegRead($KEY, $VALUE)
Local $err = @error, $ext = @extended
If $err Then Return SetError($err,0,1)
If $ext <> 3 Then Return $reg
Local $val = ''
For $i = 1 To StringLen($reg) - 2 Step 2
$tmp = BinaryToString('0x' & StringMid($reg, $i, 2))
If $tmp <> "" Then
$val = $val & $tmp
EndIf
Next
Return $val
EndFunc ;==>_RegReadBinary -
Alles Gute zum Geburtstag!
Hast dir ja ein tolles Datum ausgesucht, entweder sind die Geschenke doppelt so groß
, oder man spart einmal ein
.Von mir Alles Gute und Viel Spaß usw. usf.

-
hm.. ich glaub du weis nicht was ich mein

Wenn man zum Beispiel via tray optionen einstellen kann, dann kann man etwas "anhaken" bzw. "ankreuzen" oder nicht.
Standart ist ja eine einfache Schaltfläche, auf die man drauf drücken kann
Bei einem Klick wird der Menüpunkt angehakt (Standard), Schaltflächen gibt es keine. Das Bsp. von SEuBo zeigt alles, was passiert. -
Ich habe das mal erweitert (Übergabe als String oder Array) und direkt in die Funktion _GUICtrlMonthCal_SetDayState integriert.
Im EN-Forum (Developer Chat) hab ich mal zur Diskussion gestellt, ob es eine sinnvolle Ergänzung der bisherigen Funktion wäre. Mal sehen, wie die Reaktionen sind. -
Ich denke, das ist noch einfacher:
[autoit]Opt('GUIOnEventMode', 1)
[/autoit][autoit][/autoit][autoit]$gui = GUICreate('Test')
[/autoit][autoit][/autoit][autoit]
GUISetOnEvent(-3, '_ende')
$ID_LV = GUICtrlCreateListView('Bla|Blub', 10, 10, 300, 200)
For $i = 0 To 19
GUICtrlCreateListViewItem(Random(100, 999, 1) & '|' & Random(100, 999, 1), $ID_LV)
GUICtrlSetOnEvent(-1, '_ItemClick')
Next
GUISetState()While 1
[/autoit][autoit][/autoit][autoit]
Sleep(100)
WEndFunc _ende()
[/autoit][autoit][/autoit][autoit]
Exit
EndFuncFunc _ItemClick()
[/autoit]
Local $txt = GUICtrlRead(@GUI_CtrlId)
MsgBox(0, '', 'ListviewItem geklickt: ' & $txt)
EndFunc -
Zum Verstecken / Wiederherstellen der Smileys:
K-Meleon: Verstecken-JA / Wiederherstellen-erfordert Neuladen der Seite
Iron: Verstecken-JA / Wiederherstellen-JA-aber: s. Bild
[Blockierte Grafik: http://www.imgbox.de/users/BugFix/new_style.png] -
Hier ein Bsp.:
Spoiler anzeigen
[autoit]#include <GuiConstantsEx.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <GuiMonthCal.au3>
#include <WindowsConstants.au3>Opt('MustDeclareVars', 1)
[/autoit] [autoit][/autoit] [autoit]GUICreate("Month Calendar Set Day State", 400, 300)
[/autoit] [autoit][/autoit] [autoit]
Local $hMonthCal = GUICtrlCreateMonthCal("", 4, 4, -1, -1, BitOR($WS_BORDER, $MCS_DAYSTATE), 0x00000000)Local $aMasks[_GUICtrlMonthCal_GetMonthRangeSpan($hMonthCal, True)]
[/autoit] [autoit][/autoit] [autoit]$aMasks[1] = _GetHexMask('1,5,6,8,12,22,23,24,30', ',')
[/autoit] [autoit][/autoit] [autoit]
_GUICtrlMonthCal_SetDayState($hMonthCal, $aMasks)GUISetState()
[/autoit] [autoit][/autoit] [autoit]Do
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
Until GUIGetMsg() = $GUI_EVENT_CLOSEFunc _GetHexMask($sDays, $Delim=Default)
[/autoit]
If $Delim = Default Then $Delim = Opt('GUIDataSeparatorChar')
Local $aDays = StringSplit($sDays, $Delim, 2)
Local $aHex[8] = [0,0,0,0,0,0,0,0], $pos, $out = ''
For $i = 0 To UBound($aDays) -1
Select
Case $aDays[$i] < 5
$pos = 0
Case $aDays[$i] < 9
$pos = 1
Case $aDays[$i] < 13
$pos = 2
Case $aDays[$i] < 17
$pos = 3
Case $aDays[$i] < 21
$pos = 4
Case $aDays[$i] < 25
$pos = 5
Case $aDays[$i] < 29
$pos = 6
Case Else
$pos = 7
EndSelect
$aDays[$i] -= $pos * 4
$aHex[$pos] += 2 ^ ($aDays[$i]-1)
Next
For $i = 0 To UBound($aHex) -1
$out = Hex($aHex[$i], 1) & $out
Next
Return '0x' & $out
EndFunc ;==>_GetHexMask -
Hi,
wenn man in einem Monatskalender (GUICtrlCreateMonthCal) Tage fett markieren möchte (erfordert Style: $MCS_DAYSTATE) ist es erforderlich, die Tage zu maskieren.
Mit der folgenden Funktion wird das erledigt. Einfach einen String mit den zu markierenden Tagen übergeben (braucht nicht in Reihenfolge zu sein) und die Maske als Hexstring wird zurückgegeben.
Trennzeichen ist standardmäßig das per Opt('GUIDataSeparatorChar') festgelegte Zeichen.
Markiert wird mit _GUICtrlMonthCal_SetDayState($hMonthCal, $aMasks).Edit:
Übergabe nun als trennzeichenbasierter String oder als Array möglich.Edit 12.08.2011
Da sich diese Funktion nicht nur für _GUICtrlMonthCal_SetDayState verwenden läßt, sondern generell, wenn innerhalb eines Monats Markierungen für verschiedene Tage gesetzt werden sollen, habe ich jetzt mal noch die Gegenfunktion zum Auslesen der markierten Tage erstellt.
Die Funktionen sind also:_GetHexMask($vDays [, $Delim=Default])
Codiert die übergebenen Tageszahlen (1-31) als Hex-String, wie er als Maske zum Markieren mit _GUICtrlMonthCal_SetDayState im MonthCal Anwendung findet_DecodeHexMask($sHex [, $fArray=True[, $Delim=Default]])
Gibt die mit _GetHexMask() codierten Tageszahlen (1-31) als Array (Standard) oder Trennzeichenstring zurückDays2HexMask.au3
[autoit]Local $aDays[6] = [10,12,13,23,25,31]
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
$sHex1 = _GetHexMask($aDays)
ConsoleWrite('--@@Line[' & @ScriptLineNumber -1 & '] Debug_Var >> $sHex1 >>' & $sHex1 & @CRLF) ;### DebugToConsole
$sHex2 = _GetHexMask('1|5|7|22|30|31')
ConsoleWrite('--@@Line[' & @ScriptLineNumber -1 & '] Debug_Var >> $sHex2 >>' & $sHex2 & @CRLF) ;### DebugToConsole$sRet = _DecodeHexMask($sHex1, False)
[/autoit] [autoit][/autoit] [autoit]
ConsoleWrite($sRet & @CRLF)$sRet = _DecodeHexMask($sHex2, False)
[/autoit] [autoit][/autoit] [autoit]
ConsoleWrite($sRet & @CRLF)$aRet = _DecodeHexMask($sHex1)
[/autoit] [autoit][/autoit] [autoit]
_ArrayDisplay($aRet);===============================================================================
[/autoit] [autoit][/autoit] [autoit]
; Function Name..: _GetHexMask($vDays [, $Delim=Default])
; Description....: Codiert die übergebenen Tageszahlen (1-31) als Hex-String, wie er als Maske zum Markieren mit _GUICtrlMonthCal_SetDayState
; ...............: im MonthCal Anwendung findet
; Parameter(s)...: $vDays Trennzeichenbasierter String oder Array mit den zu markierenden Tagen
; ...............: $Delim das Trennzeichen, Standard ist 'Default' (Zeichen von 'GUIDataSeparatorChar')
; Return Value(s): Hexstring für $aMasks
; Author(s)......: BugFix ([email='bugfix@autoit.de'][/email])
;===============================================================================
Func _GetHexMask($vDays, $sDelim=Default)
If $sDelim = Default Then $sDelim = Opt('GUIDataSeparatorChar')
If (( Not IsArray($vDays) ) And ($vDays = '') ) Or _
(( IsArray($vDays) ) And ($vDays[0] = '') ) Then
Return '0x0'
Else
Local $aDays
If (Not IsArray($vDays)) Then
$aDays = StringSplit($vDays, $sDelim, 2)
Else
$aDays = $vDays
EndIf
Local $aHex[8] = [0,0,0,0,0,0,0,0], $pos, $mask = ''
For $i = 0 To UBound($aDays) -1
Select
Case $aDays[$i] < 5
$pos = 0
Case $aDays[$i] < 9
$pos = 1
Case $aDays[$i] < 13
$pos = 2
Case $aDays[$i] < 17
$pos = 3
Case $aDays[$i] < 21
$pos = 4
Case $aDays[$i] < 25
$pos = 5
Case $aDays[$i] < 29
$pos = 6
Case Else
$pos = 7
EndSelect
$aDays[$i] -= $pos * 4
$aHex[$pos] += 2 ^ ($aDays[$i]-1)
Next
For $i = 0 To UBound($aHex) -1
$mask = Hex($aHex[$i], 1) & $mask
Next
Return '0x' & $mask
EndIf
EndFunc ;==>_GetHexMask;===============================================================================
[/autoit]
; Function Name..: _DecodeHexMask($sHex [, $fArray=True[, $Delim=Default]])
; Description....: Gibt die mit _GetHexMask() codierten Tageszahlen (1-31) als Array (Standard) oder Trennzeichenstring zurück
; Parameter(s)...: $sHex Der Hex-String mit dem/den codierten Zahlenwert/-en
; ...............: $fArray Rückgabe als Array (Standard), $a[0]=Anzahl oder String mit Trennzeichen
; ...............: $Delim Das Trennzeichen für Stringausgabe, Standard ist 'Default' (Zeichen von 'GUIDataSeparatorChar')
; Return Value(s): Array/String mit den im Hex-String codierten Tageszahlen
; Author(s)......: BugFix ([email='bugfix@autoit.de'][/email])
;===============================================================================
Func _DecodeHexMask($sHex, $fArray=True, $sDelim=Default)
If $sDelim = Default Then $sDelim = Opt('GUIDataSeparatorChar')
Local $aHex = StringSplit(Hex($sHex, 8), '', 2), $iInt, $sOut = ''
Local $aMask[8][4] = [[29,30,31],[25,26,27,28],[21,22,23,24],[17,18,19,20],[13,14,15,16],[9,10,11,12],[5,6,7,8],[1,2,3,4]]
For $i = 7 To 0 Step -1
$iInt = Int('0x' & $aHex[$i])
If $iInt = 0 Then ContinueLoop
For $j = 0 To 3
If BitAND($iInt, 2^$j) Then
$sOut &= $aMask[$i][$j] & ","
$iInt = BitXOR($iInt, 2^$j)
EndIf
Next
Next
If $fArray Then Return StringSplit(StringTrimRight($sOut, 1), ',')
Return StringTrimRight($sOut, 1)
EndFunc ;==>_DecodeHexMask -
LOL - wußte gar nicht, dass es dafür schon eine UDF gibt.

Zumindest kannst du damit einen Tag (Heute) markieren.Edit: Mehrere Tage markierst du (fett) mit _GUICtrlMonthCal_SetDayState($hWnd, $aMasks).
In der Hilfe findest du ein Bsp. dazu.Edit: Um das Erstellen der Maske zu vereinfachen: Maske zum Markieren in Monatskalender erstellen
[autoit]#Include <GuiMonthCal.au3>
[/autoit][autoit][/autoit][autoit]
$gui = GUICreate('')
$cal = GUICtrlCreateMonthCal('MyCal', 10, 10)
$hWnd = GUICtrlGetHandle($cal)
GUISetState()Sleep(1000)
[/autoit]
_GUICtrlMonthCal_SetToday($hWnd, 2009, 12, 24)
Do
Until GUIGetMsg() = -3 -
Man könnte experimentieren, ob sich der Bereich (Rectangle) eines Datums selektieren und dann OWNERDRAW darauf anwenden läßt. Wer will kann loslegen.

-
Was wir brauchen ist eine Beschreibung der Dll. Dann können wir sicher weiterhelfen.
-
Es waren noch zwei Bugs, die ich nun geFixed habe.

-
Habe ein vbs Script mit dem geht es.
Na dann zeig doch mal das VBS-Skript, läßt sich meist recht problemlos portieren. -
Bei mir geht es garnicht mehr richtig seit der neuen AutoIt Version, werden immer ? oder sonstige komische Zeichen ans Ende jeder Linie geschrieben
Auch mit der aktuellen Stable (3.3.2.0) läuft das bei mir problemlos.
Was für ein Betriebssystem verwendest du? -
@Vor"Redner"
- Von ListBox war nicht die Rede, sondern von Listview. 
Und nun mal noch ein Bsp.

Du brauchst nicht alle Parameter, die in $tInfo enthalten sind. Habe sie der Vollständigkeit alle angeführt.
Damit ein Klick/Doppelklick auch die richtige Spalte verwertet, ist der Style $LVS_EX_FULLROWSELECT notwendig.Spoiler anzeigen
[autoit]#include <ListViewConstants.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <StructureConstants.au3>
#include<GUIConstantsEx.au3>
#include<WindowsConstants.au3>
#include <GUIListView.au3>$gui = GUICreate('test')
[/autoit] [autoit][/autoit] [autoit]
$ListView = GUICtrlCreateListView('Spalte1|Spalte2', 10, 10, 300, 200, -1, BitOR($LVS_EX_FULLROWSELECT,$LVS_EX_TRACKSELECT))
$hListView = GUICtrlGetHandle($ListView)
_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', $ListView)
Next
GUISetState()
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")Do
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
$msg = GUIGetMsg()
Until $msg = $GUI_EVENT_CLOSEFunc _LeftDblClick($aInfo)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
Local $sMsg = 'Doppelklick auf:' & @LF & 'ZeilenIndex: ' & $aInfo[3] & @LF & _
'Spaltenindex: ' & $aInfo[4] & @LF & _
'Zellen Text: ' & _GUICtrlListView_GetItemText($hListView, $aInfo[3], $aInfo[4])
MsgBox(0, 'Doppelklick', $sMsg)
EndFuncFunc WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
[/autoit] [autoit][/autoit] [autoit]
Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView
$hWndListView = $hListView
If Not IsHWnd($hListView) Then $hWndListView = GUICtrlGetHandle($hListView)$tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
[/autoit]
$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
$iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
$iCode = DllStructGetData($tNMHDR, "Code")
Switch $hWndFrom
Case $hWndListView
Switch $iCode
Case $NM_DBLCLK ; Sent by a list-view control when the user double-clicks an item with the left mouse button
Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
Local $aInfo[12] = [$hWndFrom, _
$iIDFrom, _
$iCode, _
DllStructGetData($tInfo, "Index"), _
DllStructGetData($tInfo, "SubItem"), _
DllStructGetData($tInfo, "NewState"), _
DllStructGetData($tInfo, "OldState"), _
DllStructGetData($tInfo, "Changed"), _
DllStructGetData($tInfo, "ActionX"), _
DllStructGetData($tInfo, "ActionY"), _
DllStructGetData($tInfo, "lParam"), _
DllStructGetData($tInfo, "KeyFlags")]
_LeftDblClick($aInfo)
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NOTIFY