Habe ein vbs Script mit dem geht es.
Na dann zeig doch mal das VBS-Skript, läßt sich meist recht problemlos portieren.
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.
#include <ListViewConstants.au3>
#include <StructureConstants.au3>
#include<GUIConstantsEx.au3>
#include<WindowsConstants.au3>
#include <GUIListView.au3>
$gui = GUICreate('test')
$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
$msg = GUIGetMsg()
Until $msg = $GUI_EVENT_CLOSE
Func _LeftDblClick($aInfo)
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)
EndFunc
Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
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 $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
Leider grenzt das aufgrund der angewandten Methodik sehr an einen Keylogger, da man jede Taste dabei aufzeichnen kann.
Muß ich mal klar verneinen.
Nur aufgrund der Tatsache, dass man mit Autos auch Menschen totfahren kann, sind es keine Mordinstrumente.
Das hier verwendete (und von mir vorab angesprochene) Bsp. aus der Hilfe bietet keinerlei Anleitung zu illegalen Handlungen. Und wir sollten uns nicht Programmiermöglichkeiten selbst entziehen, nur weil irgendwer das zu anderen Zwecken nutzen könnte. Selbstkasteiung zum Schutze Anderer ? - Nein Danke!
Wenn jemand wirklich in Richtung Keylogger aktiv werden will, wird er sich spätestens, wenn er keine Hilfe bekommt, einen der zu Hunderten im Netz verügbaren herunterladen.
Das geht mit einem Keyboard-Hook. Einfach zusätzlich zu jedem Hook deinen Beep ausführen.
Wie bestimme ich deren Wert?
Const $HCBT_CREATEWND = 3 => Wie kommt man auf die 3?
Diese Werte sind vordefiniert, hier habe ich eine gute Auflistung gebräuchlicher Konstanten gefunden.
Grundsätzlich ist es egal, ob du Hex- oder Dezimalzahlen verwendest.
Mir gefällt der neue Stil. Das orange hatte ich mir schon satt gesehen. ![]()
Problem der Wiederherstellung eigener Abbrevs ist gelöst. s. Post #1
Versuch doch mal beim DllCall den Rückgabetyp deiner Funktion mit 'int' zu belegen (auch wenn du String definiert hast).
Der AutoIt-DllCall gibt den Returnwert ja nicht direkt zurück sondern über ein Array mit 0 oder dem Returnwert (Fehler od. Erfolg).
Wenn du mit Objekten arbeiten möchtest, mußt du dich mit den Befehlen (Methoden, Eigenschaften etc.) der jeweiligen Objekte vertraut machen. Darauf kann natürlich in der AutoIt-Hilfe nicht eingegangen werden, da dieses für das entsprechende Objekt spezifisch ist.
Die AutoIt-Objekt-Befehle ermöglichen dir (bei den Objekten, die es zulassen
) eine Referenz auf dieses Objekt zu erstellen um mit ihm zu arbeiten.
Öffne z.B. mal die Includes: Word.au3 oder Excel.au3
Dort kannst du dir anschauen, wie mit den Objekten gearbeitet wird.
Der Fehler kommt nach der ersten Gruppe. Schmeiß mal die 'Fast'-Leerzeilen raus, vielleicht sind die zusätzlichen Zeilen(umbrüche) in der Deklaration hinderlich.
PS: Clone-CD ist übrigends ein in Deutschland verbotenes Brennprogramm.
Das ist so nicht korrekt. Clone-CD in seiner ursprünglichen Fassung darf (auf dem deutschen Markt) nicht mehr vertrieben werden. Die Firma hat aber eine weichgespülte Version auf den Markt gebracht (ebenso bei Clone-DVD), die den rechtlichen Bestimmungen in DE gerecht wird. Was aber kaum jemanden hindern wird, so er denn will, das Original von den Seychellen zu kaufen. ![]()
Ich hab es jetzt mal in eine verständliche Darstellung gepackt:
Global $mChars[7][4][5][5] = _
[ _
[[[0, 0, 0, 0, 0],[0, 0, 0, 0, 0],[0, 0, 2, 1, 0],[0, 0, 1, 1, 0],[0, 0, 0, 0, 0]], _
[[0, 0, 0, 0, 0],[0, 0, 0, 0, 0],[0, 0, 2, 1, 0],[0, 0, 1, 1, 0],[0, 0, 0, 0, 0]], _
[[0, 0, 0, 0, 0],[0, 0, 0, 0, 0],[0, 0, 2, 1, 0],[0, 0, 1, 1, 0],[0, 0, 0, 0, 0]], _
[[0, 0, 0, 0, 0],[0, 0, 0, 0, 0],[0, 0, 2, 1, 0],[0, 0, 1, 1, 0],[0, 0, 0, 0, 0]]], _
_
[[[0, 0, 0, 0, 0],[0, 0, 0, 0, 0],[0, 1, 2, 1, 1],[0, 0, 0, 0, 0],[0, 0, 0, 0, 0]], _
[[0, 0, 0, 0, 0],[0, 0, 1, 0, 0],[0, 0, 2, 0, 0],[0, 0, 1, 0, 0],[0, 0, 1, 0, 0]], _
[[0, 0, 0, 0, 0],[0, 0, 0, 0, 0],[1, 1, 2, 1, 0],[0, 0, 0, 0, 0],[0, 0, 0, 0, 0]], _
[[0, 0, 1, 0, 0],[0, 0, 1, 0, 0],[0, 0, 2, 0, 0],[0, 0, 1, 0, 0],[0, 0, 0, 0, 0]]], _
_
[[[0, 0, 0, 0, 0],[0, 0, 1, 0, 0],[0, 0, 2, 0, 0],[0, 0, 1, 1, 0],[0, 0, 0, 0, 0]], _
[[0, 0, 0, 0, 0],[0, 0, 0, 0, 0],[0, 1, 2, 1, 0],[0, 1, 0, 0, 0],[0, 0, 0, 0, 0]], _
[[0, 0, 0, 0, 0],[0, 1, 1, 0, 0],[0, 0, 2, 0, 0],[0, 0, 1, 0, 0],[0, 0, 0, 0, 0]], _
[[0, 0, 0, 0, 0],[0, 0, 0, 1, 0],[0, 1, 2, 1, 0],[0, 0, 0, 0, 0],[0, 0, 0, 0, 0]]], _
_
[[[0, 0, 0, 0, 0],[0, 0, 1, 0, 0],[0, 0, 2, 0, 0],[0, 1, 1, 0, 0],[0, 0, 0, 0, 0]], _
[[0, 0, 0, 0, 0],[0, 1, 0, 0, 0],[0, 1, 2, 1, 0],[0, 0, 0, 0, 0],[0, 0, 0, 0, 0]], _
[[0, 0, 0, 0, 0],[0, 0, 1, 1, 0],[0, 0, 2, 0, 0],[0, 0, 1, 0, 0],[0, 0, 0, 0, 0]], _
[[0, 0, 0, 0, 0],[0, 0, 0, 0, 0],[0, 1, 2, 1, 0],[0, 0, 0, 1, 0],[0, 0, 0, 0, 0]]], _
_
[[[0, 0, 0, 0, 0],[0, 0, 0, 1, 0],[0, 0, 2, 1, 0],[0, 0, 1, 0, 0],[0, 0, 0, 0, 0]], _
[[0, 0, 0, 0, 0],[0, 0, 0, 0, 0],[0, 1, 2, 0, 0],[0, 0, 1, 1, 0],[0, 0, 0, 0, 0]], _
[[0, 0, 0, 0, 0],[0, 0, 1, 0, 0],[0, 1, 2, 0, 0],[0, 1, 0, 0, 0],[0, 0, 0, 0, 0]], _
[[0, 0, 0, 0, 0],[0, 1, 1, 0, 0],[0, 0, 2, 1, 0],[0, 0, 0, 0, 0],[0, 0, 0, 0, 0]]], _
_
[[[0, 0, 0, 0, 0],[0, 0, 1, 0, 0],[0, 0, 2, 1, 0],[0, 0, 0, 1, 0],[0, 0, 0, 0, 0]], _
[[0, 0, 0, 0, 0],[0, 0, 0, 0, 0],[0, 0, 2, 1, 0],[0, 1, 1, 0, 0],[0, 0, 0, 0, 0]], _
[[0, 0, 0, 0, 0],[0, 1, 0, 0, 0],[0, 1, 2, 0, 0],[0, 0, 1, 0, 0],[0, 0, 0, 0, 0]], _
[[0, 0, 0, 0, 0],[0, 0, 1, 1, 0],[0, 1, 2, 0, 0],[0, 0, 0, 0, 0],[0, 0, 0, 0, 0]]], _
_
[[[0, 0, 0, 0, 0],[0, 0, 1, 0, 0],[0, 0, 2, 1, 0],[0, 0, 1, 0, 0],[0, 0, 0, 0, 0]], _
[[0, 0, 0, 0, 0],[0, 0, 0, 0, 0],[0, 1, 2, 1, 0],[0, 0, 1, 0, 0],[0, 0, 0, 0, 0]], _
[[0, 0, 0, 0, 0],[0, 0, 1, 0, 0],[0, 1, 2, 0, 0],[0, 0, 1, 0, 0],[0, 0, 0, 0, 0]], _
[[0, 0, 0, 0, 0],[0, 0, 1, 0, 0],[0, 1, 2, 1, 0],[0, 0, 0, 0, 0],[0, 0, 0, 0, 0]]] _
]
Da erkennst du deutlich: 7 Gruppen mit 4 Reihen je 5 -mal 5 Einträge ![]()
Ab 3 Dimensionen ist diese Art der Deklaration von Arrays mit gleichzeitiger Wertzuweisung sehr crazy und besser zu vermeiden.
Hier kommst du mit Zuweisung gruppenweise je Dimension in einer Schleife besser weg.
Lucas, hast du nicht gesehen:
ZitatDonnerstag, 27. November 2008, 20:23
Das nennt man Leichenschändung. ![]()
Hi,
mir sind gerade die Umrechnungsrichtlinien für Farbräume in die Hände gefallen.
Falls das mal jemand braucht, hab ich hier mal einige Umrechnungs-Funktionen erstellt.
Folgende Umrechnungen sind möglich:
_RGB_to_CMY
_CMY_to_RGB
_RGB_to_XYZ
_XYZ_to_RGB
_RGB_to_HunterLab
_HunterLab_to_RGB
_RGB_to_CIELab
_CIELab_to_RGB
_RGB_to_HSV
_HSV_to_RGB
_XYZ_to_HunterLab
_HunterLab_to_XYZ
_XYZ_to_CIELab
_CIELab_to_XYZ
;=======================================================================
; einzig zu erklärender Parameter für alle Funktionen:
;
; $retType 0-Standard gibt Werte als Trennzeichnbasierter String zurück
; Trennzeichen ist das mit Opt('GUIDataSeparatorChar')
; definierte Zeichen (Standard '|')
; 1 gibt die Werte in einem Array zurück
;=======================================================================
#include-once
Func _RGB_to_CMY($iR, $iG, $iB, $retType=0)
If $retType <> 0 Then $retType = 1
Local $iC = Round(1 - ($iR / 255), 5)
Local $iM = Round(1 - ($iG / 255), 5)
Local $iY = Round(1 - ($iB / 255), 5)
If $retType Then
Local $Out[3] = [$iC,$iM,$iY]
Else
Local $delim = Opt('GUIDataSeparatorChar')
Local $Out = $iC & $delim & $iM & $delim & $iY
EndIf
Return $Out
EndFunc ;==>_RGB_to_CMY
Func _CMY_to_RGB($iC, $iM, $iY, $retType=0)
If $retType <> 0 Then $retType = 1
Local $iR = Int((1 - $iC) * 255)
Local $iG = Int((1 - $iM) * 255)
Local $iB = Int((1 - $iY) * 255)
If $retType Then
Local $Out[3] = [$iR,$iG,$iB]
Else
Local $delim = Opt('GUIDataSeparatorChar')
Local $Out = $iR & $delim & $iG & $delim & $iB
EndIf
Return $Out
EndFunc ;==>_CMY_to_RGB
Func _RGB_to_XYZ($iR, $iG, $iB, $retType=0); 0=String, 1=Array
If $iR < 0 Or $iR > 255 Or $iG < 0 Or $iG > 255 Or $iB < 0 Or $iB > 255 Then Return SetError(1,0,0)
If $retType <> 0 Then $retType = 1
Local $iX, $iY, $iZ
$iR /= 255
$iG /= 255
$iB /= 255
If $iR > 0.04045 Then
$iR = (($iR + 0.055 ) / 1.055 ) ^ 2.4
Else
$iR /= 12.92
EndIf
If $iG > 0.04045 Then
$iG = (($iG + 0.055 ) / 1.055 ) ^ 2.4
Else
$iG /= 12.92
EndIf
If $iB > 0.04045 Then
$iB = (($iB + 0.055 ) / 1.055 ) ^ 2.4
Else
$iB /= 12.92
EndIf
$iR *= 100
$iG *= 100
$iB *= 100
; Observer = 2°, Illuminant = D65
$iX = Round($iR * 0.4124 + $iG * 0.3576 + $iB * 0.1805, 3)
$iY = Round($iR * 0.2126 + $iG * 0.7152 + $iB * 0.0722, 3)
$iZ = Round($iR * 0.0193 + $iG * 0.1192 + $iB * 0.9505, 3)
If $retType Then
Local $Out[3] = [$iX,$iY,$iZ]
Else
Local $delim = Opt('GUIDataSeparatorChar')
Local $Out = $iX & $delim & $iY & $delim & $iZ
EndIf
Return $Out
EndFunc ;==>_RGB_to_XYZ
Func _XYZ_to_RGB($iX, $iY, $iZ, $retType=0)
If $retType <> 0 Then $retType = 1
Local $iR, $iG, $iB
$iX /= 100
$iY /= 100
$iZ /= 100
; Observer = 2°, Illuminant = D65
$iR = ($iX * 3.2406) + ($iY * -1.5372) + ($iZ * -0.4986)
$iG = ($iX * -0.9689) + ($iY * 1.8758) + ($iZ * 0.0415)
$iB = ($iX * 0.0557) + ($iY * -0.2040) + ($iZ * 1.0570)
If $iR > 0.0031308 Then
$iR = 1.055 * ($iR ^ (1/2.4)) - 0.055
Else
$iR *= 12.92
EndIf
If $iG > 0.0031308 Then
$iG = 1.055 * ($iG ^ (1/2.4)) - 0.055
Else
$iG *= 12.92
EndIf
If $iB > 0.0031308 Then
$iB = 1.055 * ($iB ^ (1/2.4)) - 0.055
Else
$iB *= 12.92
EndIf
$iR = Int($iR*255)
$iG = Int($iG*255)
$iB = Int($iB*255)
If $retType Then
Local $Out[3] = [$iR,$iG,$iB]
Else
Local $delim = Opt('GUIDataSeparatorChar')
Local $Out = $iR & $delim & $iG & $delim & $iB
EndIf
Return $Out
EndFunc ;==>_XYZ_to_RGB
Func _RGB_to_HunterLab($iR, $iG, $iB, $retType=0)
If $retType <> 0 Then $retType = 1
Local $aXYZ = _RGB_to_XYZ($iR, $iG, $iB, 1)
Local $Out = _XYZ_to_HunterLab($aXYZ[0], $aXYZ[1], $aXYZ[2])
If $retType Then
Return StringSplit($Out, Opt('GUIDataSeparatorChar'), 2)
Else
Return $Out
EndIf
EndFunc ;==>_RGB_to_HunterLab
Func _HunterLab_to_RGB($H_L, $H_a, $H_b, $retType=0)
If $retType <> 0 Then $retType = 1
Local $aXYZ = _HunterLab_to_XYZ($H_L, $H_a, $H_b, 1)
Local $Out = _XYZ_to_RGB($aXYZ[0], $aXYZ[1], $aXYZ[2])
If $retType Then
Return StringSplit($Out, Opt('GUIDataSeparatorChar'), 2)
Else
Return $Out
EndIf
EndFunc ;==>_HunterLab_to_RGB
Func _XYZ_to_HunterLab($iX, $iY, $iZ, $retType=0)
If $retType <> 0 Then $retType = 1
Local $H_L = Round(10 * Sqrt($iY), 3)
Local $H_a = Round(17.5 * (((1.02 * $iX) - $iY) / Sqrt($iY)), 3)
Local $H_b = Round(7 * (($iY - (0.847 * $iZ)) / Sqrt($iY)), 3)
If $retType Then
Local $Out[3] = [$H_L,$H_a,$H_b]
Else
Local $delim = Opt('GUIDataSeparatorChar')
Local $Out = $H_L & $delim & $H_a & $delim & $H_b
EndIf
Return $Out
EndFunc ;==>_XYZ_to_HunterLab
Func _HunterLab_to_XYZ($H_L, $H_a, $H_b, $retType=0)
If $retType <> 0 Then $retType = 1
Local $iY = $H_L / 10
Local $iX = $H_a / 17.5 * $H_L / 10
Local $iZ = $H_b / 7 * $H_L / 10
$iY = Round($iY ^ 2, 3)
$iX = Round(($iX + $iY) / 1.02, 3)
$iZ = Round(-1 * ($iZ - ($iY)) / 0.847, 3)
If $retType Then
Local $Out[3] = [$iX,$iY,$iZ]
Else
Local $delim = Opt('GUIDataSeparatorChar')
Local $Out = $iX & $delim & $iY & $delim & $iZ
EndIf
Return $Out
EndFunc ;==>_HunterLab_to_XYZ
Func _XYZ_to_CIELab($iX, $iY, $iZ, $retType=0)
If $retType <> 0 Then $retType = 1
; Observer= 2°, Illuminant= D65
$iX /= 95.047
$iY /= 100
$iZ /= 108.883
If ($iX > 0.008856) Then
$iX = $iX ^ (1/3)
Else
$iX = (7.787 * $iX) + (16 / 116)
EndIf
If ($iY > 0.008856) Then
$iY = $iY ^ (1/3)
Else
$iY = (7.787 * $iY) + (16 / 116)
EndIf
If ($iZ > 0.008856) Then
$iZ = $iZ ^ (1/3)
Else
$iZ = (7.787 * $iZ) + (16 / 116)
EndIf
Local $CIE_L = Round((116 * $iY) - 16, 3)
Local $CIE_a = Round(500 * ($iX - $iY), 3)
Local $CIE_b = Round(200 * ($iY - $iZ), 3)
If $retType Then
Local $Out[3] = [$CIE_L,$CIE_a,$CIE_b]
Else
Local $delim = Opt('GUIDataSeparatorChar')
Local $Out = $CIE_L & $delim & $CIE_a & $delim & $CIE_b
EndIf
Return $Out
EndFunc ;==>_XYZ_to_CIELab
Func _CIELab_to_XYZ($CIE_L, $CIE_a, $CIE_b, $retType=0)
If $retType <> 0 Then $retType = 1
Local $iY = ($CIE_L + 16) / 116
Local $iX = $CIE_a / 500 + $iY
Local $iZ = $iY - $CIE_b / 200
If ($iX^3 > 0.008856) Then
$iX = $iX ^ 3
Else
$iX = ($iX - 16 / 116) / 7.787
EndIf
If ($iY^3 > 0.008856) Then
$iY = $iY ^ 3
Else
$iY = ($iY - 16 / 116) / 7.787
EndIf
If ($iZ^3 > 0.008856) Then
$iZ = $iZ ^ 3
Else
$iZ = ($iZ - 16 / 116) / 7.787
EndIf
; Observer = 2°, Illuminant = D65
$iX = Round($iX * 95.047, 3)
$iY = Round($iY * 100.000, 3)
$iZ = Round($iZ * 108.883, 3)
If $retType Then
Local $Out[3] = [$iX,$iY,$iZ]
Else
Local $delim = Opt('GUIDataSeparatorChar')
Local $Out = $iX & $delim & $iY & $delim & $iZ
EndIf
Return $Out
EndFunc ;==>_CIELab_to_XYZ
Func _RGB_to_CIELab($iR, $iG, $iB, $retType=0)
If $retType <> 0 Then $retType = 1
Local $aXYZ = _RGB_to_XYZ($iR, $iG, $iB, 1)
Local $Out = _XYZ_to_CIELab($aXYZ[0], $aXYZ[1], $aXYZ[2])
If $retType Then
Return StringSplit($Out, Opt('GUIDataSeparatorChar'), 2)
Else
Return $Out
EndIf
EndFunc ;==>_RGB_to_CIELab
Func _CIELab_to_RGB($CIE_L, $CIE_a, $CIE_b, $retType=0)
If $retType <> 0 Then $retType = 1
Local $aXYZ = _CIELab_to_XYZ($CIE_L, $CIE_a, $CIE_b, 1)
Local $Out = _XYZ_to_RGB($aXYZ[0], $aXYZ[1], $aXYZ[2])
If $retType Then
Return StringSplit($Out, Opt('GUIDataSeparatorChar'), 2)
Else
Return $Out
EndIf
EndFunc ;==>_CIELab_to_RGB
Func _RGB_to_HSV($iR, $iG, $iB, $retType=0)
If $retType <> 0 Then $retType = 1
$iR /= 255
$iG /= 255
$iB /= 255
Local $Min = $iR
If $iG < $Min Then $Min = $iG
If $iB < $Min Then $Min = $iB
Local $Max = $iR
If $iG > $Max Then $Max = $iG
If $iB > $Max Then $Max = $iB
Local $Delta = $Max - $Min, $iH, $iS, $iV = $Max
If $Delta = 0 Then
$iH = 0
$iS = 0
Else
$iS = $Delta / $Max
Local $del_R = ((($Max - $iR ) / 6) + ($Max / 2 )) / $Max
Local $del_G = ((($Max - $iG ) / 6) + ($Max / 2 )) / $Max
Local $del_B = ((($Max - $iB ) / 6) + ($Max / 2 )) / $Max
If $iR = $Max Then
$iH = $del_B - $del_G
ElseIf $iG = $Max Then
$iH = 1 / 3 + $del_R - $del_B
Elseif $iB = $Max Then
$iH = 2 / 3 + $del_G - $del_R
EndIf
If $iH < 0 Then $iH += 1
If $iH > 1 Then $iH -= 1
EndIf
$iH = Round($iH, 4)
$iS = Round($iS, 4)
$iV = Round($iV, 4)
If $retType Then
Local $Out[3] = [$iH,$iS,$iV]
Else
Local $delim = Opt('GUIDataSeparatorChar')
Local $Out = $iH & $delim & $iS & $delim & $iV
EndIf
Return $Out
EndFunc ;==>_RGB_to_HSV
Func _HSV_to_RGB($iH, $iS, $iV, $retType=0)
If $retType <> 0 Then $retType = 1
Local $iR, $iG, $iB
If $iS = 0 Then
$iR = Int($iV * 255)
$iG = Int($iV * 255)
$iB = Int($iV * 255)
Else
$iH *= 6
If $iH = 6 Then $iH = 0
Local $i = Int($iH)
Local $1 = $iV * (1 - $iS)
Local $2 = $iV * (1 - $iS * ($iH - $i))
Local $3 = $iV * (1 - $iS * (1 - ($iH - $i)))
Switch $i
Case 0
$iR = $iV
$iG = $3
$iB = $1
Case 1
$iR = $2
$iG = $iV
$iB = $1
Case 2
$iR = $1
$iG = $iV
$iB = $3
Case 3
$iR = $1
$iG = $2
$iB = $iV
Case 4
$iR = $3
$iG = $1
$iB = $iV
Case Else
$iR = $iV
$iG = $1
$iB = $2
EndSwitch
$iR = Int($iR * 255)
$iG = Int($iG * 255)
$iB = Int($iB * 255)
EndIf
If $retType Then
Local $Out[3] = [$iR,$iG,$iB]
Else
Local $delim = Opt('GUIDataSeparatorChar')
Local $Out = $iR & $delim & $iG & $delim & $iB
EndIf
Return $Out
EndFunc ;==>_HSV_to_RGB
Autsch
da haben wir diesmal auch vergessen die Hilfe zu lesen. ![]()
ZitatBy default, a structure alignment of 8 is used (to be consistent with general Microsoft compilers and APIs).
Sowas? (Bitte warten, Hilfe wird gestartet)
#include <GUIConstantsEx.au3>
[/autoit] [autoit][/autoit] [autoit]Global $stat = 0
$gui1 = GUICreate('GUI')
WinSetOnTop($gui1, '', 1)
$btn1 = GUICtrlCreateButton('Starte Help', 10, 20, 100, 20)
GUICtrlSetBkColor($btn1, 0x00FF00)
GUISetState(@SW_SHOW, $gui1)
[/autoit] [autoit][/autoit] [autoit]While 1
$msg = GUIGetMsg()
$pid = ProcessExists('AutoIt3Help.exe')
If $stat <> $pid Then $stat = _ToggleBtnCol($btn1, $pid)
Switch $msg
Case $GUI_EVENT_CLOSE
Exit
Case $btn1
If $stat Then
ProcessClose($stat)
Else
ShellExecute(StringReplace(@AutoItExe, 'autoit3.exe', 'AutoIt3Help.exe'))
EndIf
EndSwitch
WEnd
Func _ToggleBtnCol($ID, $PID)
If $PID Then
GUICtrlSetBkColor($ID, 0xFA8072)
ControlSetText($gui1, '', $ID, 'Beende Help')
Else
GUICtrlSetBkColor($ID, 0x00FF00)
ControlSetText($gui1, '', $ID, 'Starte Help')
EndIf
Return $PID
EndFunc
Hab das jetzt mal mit verschiedenen Datentypen getestet und komme leider auch zu dem niederschmetternden Ergebnis:
Strukturgröße = Speicherbedarf größter Datentyp * Anzahl aller Strukturelemente inkl. Unterelemente
Das haut natürlich ganz schön rein, wenn man ein 'double' mit 8 Byte dabei hat und sonst nur 'byte'.
Warum das so ist - keinen Schimmer, aber es ist leider so.