Kann man es auch so machen , dass dieses Fenster die Maus verfolgt ?
=) Wäre total gut
Das ist doch nun wirklich einfach ![]()
- MouseGetPos
- WinMove
Kann man es auch so machen , dass dieses Fenster die Maus verfolgt ?
=) Wäre total gut
Das ist doch nun wirklich einfach ![]()
- MouseGetPos
- WinMove
Woher kommt dieser Leerbereich?
Sieht mir rein optisch aus wie die Hintergrundfarbe des Controls.
Genauso ist es, die Hintergrundfarbe des Controls ist natürlich sichtbar auch wenn kein weiteres Item folgt. Solange Platz da ist, wird er auch eingefärbt.
Besonders deutlich wird das, wenn du die Spaltenbreite verringerst. (s. Bild)
Allerdings habe ich diesen Leerbereich nach unten nur dann, wenn es weniger Item sind, als im LV-Bereich dargestellt werden könnten. Also wenn die vertikale Scrollleiste sichtbar ist, ist bei mir dieser Effekt aufgehoben.
Ich würde schon gerne Deine Mehrfarbenlösung benutzen. Hast Du noch ne Idee, wie man das beschleunigen kann?
Ich sehe hier leider kein Potential, das weiter zu beschleunigen. Das Problem liegt dadrin, dass bei jedem Zeichnen des Item die Aufrufe zum Zeichnen neu erfolgen müssen.
PS. Weißt Du warum am Ende meines zweiten Beispiels unten ein Leerzeile sichtbar ist?
Seltsam, wenn ich das Bsp. ausführe, ist dort keine Leerzeile. ![]()
P.S. Auf meinem lahmen Schleppi (Intel Celeron; 1,5 GHz; 448 MB RAM) läuft das recht zügig. Ja, es ruckelt - aber nicht so, dass ich Augenkrebs bekomme. ![]()
Edit:
Hatte gar nicht bedacht, dass du ja die Fontfunktionen nicht benötigst. Habe WM_NOTIFY jetzt mal etwas gekürzt. Könnte noch ein bischen Performance bringen.
Func WM_NOTIFY($hWnd, $Msg, $wParam, $lParam)
Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR
$tNMHDR = DllStructCreate($tagNMHDR, $lParam)
$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
$iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
$iCode = DllStructGetData($tNMHDR, "Code")
Switch $hWndFrom
Case $hListView1, $hListView2
Switch $iCode
Case $NM_CUSTOMDRAW
If Not _GUICtrlListView_GetViewDetails($hWndFrom) Then Return $GUI_RUNDEFMSG
Local $tCustDraw = DllStructCreate($tagNMLVCUSTOMDRAW, $lParam)
Local $iItem
Switch DllStructGetData($tCustDraw, 'dwDrawStage')
Case $CDDS_ITEMPREPAINT
Return $CDRF_NOTIFYSUBITEMDRAW
Case BitOR($CDDS_ITEMPREPAINT, $CDDS_SUBITEM)
$iItem = DllStructGetData($tCustDraw, 'dwItemSpec')
DllStructSetData($tCustDraw, 'clrTextBk', RGB2BGR($aColor[$iItem])) ; Hintergrundfarbe aus Array
EndSwitch
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NOTIFY
Zitat von skyteddyIch hab Dein Script jetzt mal als Basis genommen um zu verstehen, wie das colorieren funktioniert. So richtig verstanden habe ich es nicht
Ist gar nicht so schwer, wenn auch nicht unbedingt offensichtlich. ![]()
Passiert alles in WM_NOTIFY:
$tCustDraw = DllStructCreate($tagNMLVCUSTOMDRAW, $lParam)
Hier wird die Struktur $tCustDraw befüllt mit den Werten vom Pointer $lParam (für das aktuelle ListViewItem).
Werden jetzt Werte in dieser Struktur geändert, so sind diese sofort gültig.
Das passiert für die Hintergrundfarbe in folgendem Befehl:
DllStructSetData($tCustDraw, 'clrTextBk', RGB2BGR($aColor[$iItem]))
Und genau dafür brauche ich deinen Lösung, oder kann man das anders auch lösen?
Ja, kann man. Da ist es nicht nötig für jede Zelle die Werte zu hinterlegen. Es wird einfach der Farbwert für die Zeile in einem Array hinterlegt:
#include <FontConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
#include <ListViewConstants.au3>
#include <StructureConstants.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>
Opt("GUIOnEventMode", 1)
#region - GUI
$GUI = GUICreate("Test", 600, 440)
GUISetOnEvent($GUI_EVENT_CLOSE, '_exit')
$cListView1 = GUICtrlCreateListView("", 2, 2, 290, 420, -1, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT))
$hListView1 = GUICtrlGetHandle($cListView1)
_GUICtrlListView_InsertColumn($hListView1, 0, "Column 1", 90)
_GUICtrlListView_InsertColumn($hListView1, 1, "Column 2", 90)
_GUICtrlListView_InsertColumn($hListView1, 2, "Column 3", 90)
$cListView2 = GUICtrlCreateListView("", 300, 2, 290, 420, -1, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT))
$hListView2 = GUICtrlGetHandle($cListView2)
_GUICtrlListView_InsertColumn($hListView2, 0, "Column 1", 90)
_GUICtrlListView_InsertColumn($hListView2, 1, "Column 2", 90)
_GUICtrlListView_InsertColumn($hListView2, 2, "Column 3", 90)
For $i = 1 To 30
_GUICtrlListView_AddItem($hListView1, "Row" & $i & ": Col 1", $i-1)
_GUICtrlListView_AddItem($hListView2, "Row" & $i & ": Col 1", $i-1)
For $j = 1 To 2
_GUICtrlListView_AddSubItem ($hListView1, $i-1, "Row" & $i & ": Col " & $j+1, $j)
_GUICtrlListView_AddSubItem ($hListView2, $i-1, "Row" & $i & ": Col " & $j+1, $j)
Next
Next
#endregion - GUI
#region - Global settings
Global $hFont, $defColLV = 0x000000
; Array mit Farben für jede Zeile:
Global $aColor[30] = [ _
0x0033FF,0xCCFFFF,0x3333FF,0x99FFFF,0x6633FF,0xFF99FF,0x0099FF,0xCC99FF,0x00FFFF,0xFF33FF, _
0xFFFF00,0x003300,0x99FF00,0x663300,0xFF9900,0x009900,0xFF3300,0x669900,0x00BFFF,0xDAA520, _
0x87CEEB,0xD2691E,0xFFDEAD,0x7B68EE,0xDEB887,0xEE82EE,0x3CB371,0xF4A460,0xADD8E6,0x00FF7F]
#endregion - Global settings
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
GUISetState(@SW_SHOW, $GUI)
While True
Sleep(100)
WEnd
Func _exit()
_WinAPI_DeleteObject($hFont)
Exit
EndFunc ;==>_exit
Func WM_NOTIFY($hWnd, $Msg, $wParam, $lParam)
Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR
$tNMHDR = DllStructCreate($tagNMHDR, $lParam)
$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
$iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
$iCode = DllStructGetData($tNMHDR, "Code")
Switch $hWndFrom
Case $hListView1, $hListView2
Switch $iCode
Case $NM_CUSTOMDRAW
If Not _GUICtrlListView_GetViewDetails($hWndFrom) Then Return $GUI_RUNDEFMSG
Local $tCustDraw = DllStructCreate($tagNMLVCUSTOMDRAW, $lParam)
Local $iDrawStage, $iItem, $hDC
$iDrawStage = DllStructGetData($tCustDraw, 'dwDrawStage')
Switch $iDrawStage
Case $CDDS_ITEMPREPAINT
Return $CDRF_NOTIFYSUBITEMDRAW
Case BitOR($CDDS_ITEMPREPAINT, $CDDS_SUBITEM)
$iItem = DllStructGetData($tCustDraw, 'dwItemSpec')
DllStructSetData($tCustDraw, 'clrTextBk', RGB2BGR($aColor[$iItem])) ; Hintergrundfarbe aus Array
DllStructSetData($tCustDraw, 'clrText', RGB2BGR($defColLV)) ; Standardschriftfarbe
$hFont = _WinAPI_CreateFont(14,0,0,0,$FW_NORMAL,False,False,False,$DEFAULT_CHARSET,$OUT_DEFAULT_PRECIS, _
$CLIP_DEFAULT_PRECIS,$DEFAULT_QUALITY,0,'Arial')
_WinAPI_SelectObject($hDC, $hFont)
Return $CDRF_NEWFONT
EndSwitch
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NOTIFY
Func RGB2BGR($iColor)
Local $sH = Hex($iColor,6)
Return '0x' & StringRight($sH, 2) & StringMid($sH,3,2) & StringLeft($sH, 2)
EndFunc ;==>RGB2BGR
jede zweite Reihe farbig mit einer Farbe zu versehen. Font ist mir derzeit nicht wichtig.
Also das Ziel erreichst du ohne meine Formatfunktion. Das geht schon seit geraumer Zeit standardmäßig:
#include <GuiListView.au3>
#include <GUIConstantsEx.au3>
GUICreate('Test')
$ListView1 = GUICtrlCreateListView("Spalte 1|Spalte 2", 15, 15, 300, 250)
GUICtrlSetBkColor(-1, 0xFF4400) ; Farbe ungerade Zeilen
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_LV_ALTERNATE)
_GUICtrlListView_SetColumnWidth($ListView1, 0, 148)
_GUICtrlListView_SetColumnWidth($ListView1, 1, 148)
For $i = 1 To 10
GUICtrlCreateListViewItem(Random(10000, 1000000, 1) & '|' & Random(10000, 1000000, 1), $ListView1)
GUICtrlSetBkColor(-1, 0xFFFF23) ; Farbe gerade Zeilen
Next
GUISetState()
[/autoit][autoit][/autoit][autoit]Do
Until GUIGetMsg() = -3
Machs mal so:
; Erstelle dein Listview so, dass es NICHT sortiert ist oder sortiert werden kann.
; Dann sind die Indexangaben identisch mit den Index im Array!
; ...
; ...
$LV = GUICtrlCreateListView('....')
$hLV = GUICtrlGetHandle($LV)
; ...
; ...
Local $path = 'Dein_Suchpfad'
Local $aFiles = _GetFilesFolder_Rekursiv($path, 'tib', 0) ; Ausgabe in Array, nur Dateien
If Not IsArray($aFiles) Then Exit MsgBox(0, 'Fehler', 'Keine "tib"-Files vorhanden.')
_ArrayDelete($aFiles, 0) ; Zähler löschen für Indexübereinstimmung mit LV
; Dateinamen in LV eintragen
Local $FileName
For $i = 0 To UBound($aFiles) -1
$FileName = StringRight($aFiles[$i], StringLen($aFiles[$i] - StringInStr($aFiles[$i], '\', -1)))
_GUICtrlListView_AddItem($hLV, $FileName)
Next
; beim Auslesen des markierten LV-Eintrages
Local $index = _GUICtrlListView_GetSelectedIndices($hLV)
; den zugehörigen Dateipfad kannst du jetzt direkt aus dem Array auslesen
Local $currFilePath = $aFiles[$index]
Mal unabhängig von deiner Frage: Warum tust du dir das überhaupt an? Ich erstelle die Images standardmäßig mit Option Validierung. Dann hast du sofort die geprüften Images.
wenn ich als Auflösung <= 1024x786 wähle...
Das ist die bei mir größtmögliche Auflösung... ![]()
Hi,
habt ihr auch auf der Portalseite unseres Forums solch verschobene Darstellung?
Habe es mit mehreren Browsern getestet - sieht überall gleichermaßen besch.. aus. ![]()
Du schreibst, daß die aktuellste Version in der Datei "FormatSubItemLV_new.au3" zu finden ist. Die ist aber viel kleiner als "FormatSubItemLVex.au3" (10 anstatt 18kb).
Obendrein ist nichts kommentiert und es fehlen Funktionen, wie z.B. _OneRowSetCol.
Ja klar ist die neueste Version viel kleiner, habe ich doch auch geschrieben:
ZitatCode ist kürzer und schneller. s. Post 1, Bsp.: FormatSubItemLV_new.au3
Mit der Funktion:
_SetItemParam($hWnd, $iItem, $iSubItem, $iBkCol=-1, $iCol=-1, $iSize=-1, $iWeight=-1, $sFont=-1)
kannst du alle notwendigen Einstellungen vornehmen, also Einzelzelle, Zeile oder Spalte formatieren. Mußt sie halt notwendigerweise in einer Schleife mehrfach ausführen.
ZitatIhr übergebt Pfad (für aktuellen Pfad kann '.' und für übergeordneten Pfad kann '..' verwendet werden), Dateierweiterung ('*' oder -1 für alle[Standard]) und ein OrdnerFlag (-1 Datei+Ordner[Standard], 0 nur Dateien, 1 nur Ordner).
Was von den erforderlichen Parametern soll bitte "poker" sein? ![]()
geht iwie nicht =(
Die genaueste Fehlerbeschreibung seit Erfindung der deutschen Sprache... ![]()
Dann versteh ich die Hilfe nicht.
Was ist denn dadran so unverständlich?
Zitat von Hilfe FileSaveDialog und FileOpenDialogRückgabewert
Erfolg: Gibt den kompletten Pfad der ausgewählten Datei zurück. Rückgabe mehrerer Dateien wie folgt: "Verzeichnis|Datei1|Datei2|..."
Wo wird gesagt was er speichern soll bei FileSaveDialog und wo bei FileOpenDialog
Der Rückgabewert der Funktionen enthält den Pfad. Steht aber auch in der Hilfe ![]()
Kein Problem, das geht so:
[autoit]Local $aExecute[3] = ['Beep(50,30)','Sleep(20)','Beep(2000, 20)']
For $i = 0 To UBound($aExecute) -1
Execute($aExecute[$i])
Next
Schau dir mal in der Hilfe die For - Next - Schleife an, dann löst sich dein Problem sicher von selbst.
Außerdem solltest du nicht die Werte aus dem Array löschen, nachdem du diese für deine Checkboxen verwendet hast. Ist sinnlos und kostet nur Rechenzeit.
Ich habe selbst mal ein wenig mit Tk/Tcl rumprobiert. Soweit ich das beurteilen kann, sind zumindest grundlegende GUI-Konstruktionen problemlos möglich. Feinheiten, wie ReBar o.ä. habe ich dort noch nicht gesucht und in den Musterkripts auch nicht entdeckt.
Ist aber auch intuitiv erlernbar. Also durchaus einen Versuch wert.
Eine weitere Frage drängt sich auf:
Wenn $sSearch = Leerstring, dann sollen alle Zeichen gezählt werden.
Sollen in diesem Fall auch die @lf,@cr und/oder Leerzeichen mitgezählt werden.
Das wäre dann kein Unterschied zu StringLen!
Mit der momentanen Testsuite wird ja derselbe Wert, wie bei StringLen ermittelt. Soll das nun so bleiben oder wollen wir uns von StringLen abgrenzen und uns auf die sichtbaren Zeichen beschränken (also auch Leerzeichen aber kein @LF, @CR) ? Das wäre dann auch die Zählweise, wie sie in Word verwendet wird. Ist m.E. praxisnäher.
Das hieße dann aber wirklich das Fahrrad neu erfinden. ![]()
Schließlich gibt es Gacutil.exe
Hi,
nur ganz kurz bevor ich losfahr:
MSIINSTALLCONTEXT_MACHINE ist eine Konstante, da muß noch der Wert zu rausgesucht werden.
Ich bin mir auch nicht ganz sicher ob alles rund ist. Im Moment hab ich nur keine Zeit weiter zu probieren. Evtl. komme ich heute Abend oder morgen nochmal dazu.