"Element wurde nicht gefunden"
Bau eine Überprüfung ein, ob der erstellte Ordner existiert (ggf. in Schleife bis er existiert) und verschiebe die Datei erst dann.
"Element wurde nicht gefunden"
Bau eine Überprüfung ein, ob der erstellte Ordner existiert (ggf. in Schleife bis er existiert) und verschiebe die Datei erst dann.
Bei Listview und deutlicher bei Tab-Ctrl sieht man als Markierung des Item mit Fokus einen unschönen gepunkteten Rahmen.
Diesen zu Entfernen ist (wenn man es endlich gefunden hat) doch recht simpel. Die folgende Funktion für die GUI aufrufen und alle Elemente der GUI bekommen das HIDEFOCUS-Setting. Man kann auch die Nachricht an ein beliebiges Ctrl auf der GUI senden. Dann wird die Nachricht hinauf geleitet bis zum Parent und von dort wieder hinunter zu allen Childs. - Was natürlich auch bedeutet, dass dieses Setting ein "all or nothing" Setting ist, keine Selektion auf einzelne Ctrl.
; required: #include <WinAPISysWin.au3>, #include <WinAPIConv.au3>
Func _RemoveFocus($_hWnd)
Local Const $UIS_SET = 1
Local Const $UISF_HIDEFOCUS = 0x1
_WinAPI_PostMessage($_hWnd, $WM_CHANGEUISTATE, _WinAPI_MakeLong($UIS_SET, $UISF_HIDEFOCUS), 0)
EndFunc
Hier ein Bsp.
#include <GuiConstantsEx.au3>
#include <ListViewConstants.au3>
#include <WinAPISysWin.au3>
#include <WinAPIConv.au3>
#include <WindowsConstants.au3>
Global $g_hGui = GUICreate('Test')
Global $g_idLV = GUICtrlCreateListView('col 1|col 2|col 3|col 4', 10, 30, 380, 160, -1, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT))
For $i = 1 To 10
GUICtrlCreateListViewItem(StringFormat('%d|%d|%d|%d', Random(100,999,1), Random(100,999,1), Random(100,999,1), Random(100,999,1)), $g_idLV)
Next
Global $g_aTabItm[] = ['Alpha','Beta','Gamma','Delta']
GUICtrlCreateTab(10, 210, 380, 160)
For $i = 0 To UBound($g_aTabItm) -1
GUICtrlCreateTabItem($g_aTabItm[$i])
GUICtrlCreateTabItem('')
Next
; wird an alle Childs durchgereicht
_RemoveFocus($g_hGui)
GUISetState()
Do
Until GUIGetMsg() = -3
Func _RemoveFocus($_hWnd)
Local Const $UIS_SET = 1
Local Const $UISF_HIDEFOCUS = 0x1
_WinAPI_PostMessage($_hWnd, $WM_CHANGEUISTATE, _WinAPI_MakeLong($UIS_SET, $UISF_HIDEFOCUS), 0)
EndFunc
Alles anzeigen
Um das fokussierte Element aber besser zu sehen, vergrößere ich im folgenden Bsp. die Fontgröße von 14.5 auf 15 wenn es den Fokus erhält.
#include <FontConstants.au3>
#include <GuiConstantsEx.au3>
#include <StructureConstants.au3>
#include <WinAPIGdi.au3>
#include <WinAPISysWin.au3>
#include <WindowsConstants.au3>
#include <GuiListView.au3>
#include <GuiHeader.au3>
#include <GuiTab.au3>
#include <StructureConstants.au3>
; Focus Rectangle (gepunktete Linie) wird entfernt
; Element mit Focus erhält stattdessen Fontgröße 15.0 statt 14.5
Global $g_hGui = GUICreate('Test')
; ------------------------------------------------------ Listview
; [[bgColor,textColor]] colors as BGR
Global $g_aColumn[][2] = [[0xCC483F,0xFAFAFA],[0xF0F0F0,0x440000],[0x409340,0x00F2FF],[0x3030FF,0xFAFAFA]]
Global $g_idLV = GUICtrlCreateListView('col 1|col 2|col 3|col 4', 10, 10, 380, 180, -1, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT))
For $i = 1 To 10
GUICtrlCreateListViewItem(StringFormat('%d|%d|%d|%d', Random(100,999,1), Random(100,999,1), Random(100,999,1), Random(100,999,1)), $g_idLV)
Next
Global $g_hLV = GUICtrlGetHandle($g_idLV)
; ------------------------------------------------------ Tab-Ctrl
; [[Text,bgColor,textColor]] colors as BGR
Global $g_aTabItm[][3] = [['Alpha',0xCC483F,0xFAFAFA],['Beta',0xF0F0F0,0x440000],['Gamma',0x409340,0x00F2FF],['Delta',0x3030FF,0xFAFAFA]]
Global $g_hTab = GUICtrlGetHandle(GUICtrlCreateTab(10, 210, 380, 180, $TCS_OWNERDRAWFIXED))
; Create Tab items, coloring the tab page
For $i = 0 To UBound($g_aTabItm) -1
GUICtrlCreateTabItem($g_aTabItm[$i][0])
_GUICtrlTab_PageColor(_BGRvvRGB($g_aTabItm[$i][1]))
GUICtrlCreateTabItem('')
Next
; ------------------------------------------------------
GUIRegisterMsg($WM_DRAWITEM, "_WM_DRAWITEM")
GUIRegisterMsg($WM_NOTIFY, "_WM_NOTIFY")
GUISetState()
_RemoveFocus($g_hGui)
Do
Until GUIGetMsg() = -3
Func _WM_DRAWITEM($hWnd, $Msg, $wParam, $lParam)
Local Const $ODT_TAB = 101
Local Const $ODA_DRAWENTIRE = 0x1
Local $DIS = DllStructCreate("uint cType;uint cID;uint itmID;uint itmAction;uint itmState;" & _
"hwnd hItm;hwnd hDC;dword itmRect[4];dword itmData", $lParam) ; DRAWITEMSTRUCT
If $DIS.hItm <> $g_hTab Then Return $GUI_RUNDEFMSG
If BitAND($DIS.cType, $ODT_TAB) <> $ODT_TAB Then Return $GUI_RUNDEFMSG
If BitAND($DIS.itmAction, $ODA_DRAWENTIRE) <> $ODA_DRAWENTIRE Then Return $GUI_RUNDEFMSG
Local $tRect = DllStructCreate($tagRECT, DllStructGetPtr($DIS, 'itmRect'))
Local $bFocus = (_GUICtrlTab_GetCurFocus($DIS.hItm) = $DIS.itmID)
Local $itmText = _GUICtrlTab_GetItemText($DIS.hItm, $DIS.itmID)
Local $iFontSize = $bFocus ? 15 : 14.5
Local $hFont = _WinAPI_CreateFont($iFontSize, 0, 0, 0, 400, False, False, False, $DEFAULT_CHARSET, _
$OUT_DEFAULT_PRECIS, $CLIP_DEFAULT_PRECIS, $DEFAULT_QUALITY, 0, 'Lucida Sans Unicode Standard')
Local $hOldFont = _WinAPI_SelectObject($DIS.hDC, $hFont)
; draw and fill rect
Local $hBrush = _WinAPI_CreateSolidBrush($g_aTabItm[$DIS.itmID][1])
Local $hOldBrush = _WinAPI_SelectObject($DIS.hDC, $hBrush)
_WinAPI_Rectangle($DIS.hDC, $tRect)
; draw text
_WinAPI_SetTextColor($DIS.hDC, $g_aTabItm[$DIS.itmID][2])
_WinAPI_SetBkColor($DIS.hDC, $g_aTabItm[$DIS.itmID][1])
; move text rect with focus
If $bFocus Then
_WinAPI_OffsetRect($tRect, 0, 3)
Else
_WinAPI_OffsetRect($tRect, 0, 1)
EndIf
_WinAPI_DrawText($DIS.hDC, $itmText, $tRect, BitOR($DT_BOTTOM,$DT_CENTER))
; clear ressources
_WinAPI_SelectObject($DIS.hDC, $hOldFont)
_WinAPI_DeleteObject($hFont)
_WinAPI_SelectObject($DIS.hDC, $hOldBrush)
_WinAPI_DeleteObject($hBrush)
Return 0
EndFunc
Func _WM_NOTIFY($hWnd, $Msg, $wParam, $lParam)
Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR
$tNMHDR = DllStructCreate($tagNMHDR, $lParam)
$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
$iCode = DllStructGetData($tNMHDR, "Code")
If $hWndFrom <> $g_hLV Then Return $GUI_RUNDEFMSG
Switch $hWndFrom
Case $g_hLV
Switch $iCode
Case $NM_CUSTOMDRAW
Local $tCustDraw = DllStructCreate($tagNMLVCUSTOMDRAW, $lParam)
Local $iDrawStage, $iItem, $iSubitem, $hDC = $tCustDraw.hdc, $tRect, $hFont
$iDrawStage = $tCustDraw.dwDrawStage
Switch $iDrawStage
Case $CDDS_ITEMPREPAINT
Return $CDRF_NOTIFYSUBITEMDRAW
Case BitOR($CDDS_ITEMPREPAINT, $CDDS_SUBITEM)
$iItem = $tCustDraw.dwItemSpec
$iSubitem = $tCustDraw.iSubItem
$tCustDraw.clrText = $g_aColumn[$iSubitem][1] ; (sub)item text color
$tCustDraw.clrTextBk = $g_aColumn[$iSubitem][0] ; (sub)item bg color
Local $iFontSize = BitAND($tCustDraw.uItemState, $CDIS_FOCUS) = $CDIS_FOCUS ? 15 : 14.5 ; enlarge focusssed item
$hFont = _WinAPI_CreateFont($iFontSize,0,0,0,$FW_NORMAL,False,False,False,$DEFAULT_CHARSET,$OUT_DEFAULT_PRECIS, _
$CLIP_DEFAULT_PRECIS,$DEFAULT_QUALITY,0,'Lucida Sans Unicode Standard')
_WinAPI_SelectObject($hDC, $hFont)
_WinAPI_DeleteObject($hFont)
Return $CDRF_NEWFONT
EndSwitch
EndSwitch
EndSwitch
EndFunc
Func _RemoveFocus($_hWnd)
Local Const $UIS_SET = 1
Local Const $UISF_HIDEFOCUS = 0x1
_WinAPI_PostMessage($_hWnd, $WM_CHANGEUISTATE, _WinAPI_MakeLong($UIS_SET, $UISF_HIDEFOCUS), 0)
EndFunc
Func _GUICtrlTab_PageColor($_bgCol)
; Tab position
Local $aTabPos = ControlGetPos($g_hGui, '', $g_hTab)
; size of user area
Local $aTabRect = _GUICtrlTab_GetItemRect($g_hTab, -1)
; Create label
GUICtrlCreateLabel('', $aTabPos[0] + 2, $aTabPos[1] + $aTabRect[3] + 4, $aTabPos[2] - 6, $aTabPos[3] - $aTabRect[3] - 7)
; set color
GUICtrlSetBkColor(-1, $_bgCol)
; Disable label
GUICtrlSetState(-1, $GUI_DISABLE)
EndFunc
Func _BGRvvRGB($_iCol) ; BGR to RGB and vice versa
Local $a = StringLeft(Hex($_iCol,6), 2)
Local $b = StringMid(Hex($_iCol,6), 3, 2)
Local $c = StringRight(Hex($_iCol,6), 2)
Return '0x' & $c & $b & $a
EndFunc
Alles anzeigen
ist eine Übersetzung aus meinem AHK-Pool.
Funktioniert leider bei mir (Win 11) nicht.
Ich hatte schon ein ähnliches Herangehen probiert (Quelle: https://www.hofmann-robert.info/computer/2017/…srectangle.html), aber auch ohne Erfolg.
Func WM_CHANGEUISTATE($hWnd, $iMsg = Default, $wParam = Default, $lParam = Default)
If $hWnd <> $g_hTab Then Return $GUI_RUNDEFMSG
Local Const $UIS_SET = 1
Local Const $UISF_HIDEFOCUS = 0x1
_WinAPI_PostMessage($hWnd, $WM_CHANGEUISTATE, _WinAPI_MakeLong($UIS_SET, $UISF_HIDEFOCUS), 0)
EndFunc
EDIT: GELÖST!
#include <FontConstants.au3>
#include <GuiConstantsEx.au3>
#include <GuiTab.au3>
#include <StructureConstants.au3>
#include <WinAPIGdi.au3>
#include <WinAPISysWin.au3>
#include <WindowsConstants.au3>
; [[Text,bgColor,textColor]] colors as BGR
Global $g_aTabItm[][3] = [['Alpha',0xCC483F,0xFAFAFA],['Beta',0xF0F0F0,0x440000],['Gamma',0x409340,0x00F2FF],['Delta',0x3030FF,0xFAFAFA]]
Global $g_hGui = GUICreate('Test')
Global $g_hTab = GUICtrlGetHandle(GUICtrlCreateTab(10, 10, 380, 200, $TCS_OWNERDRAWFIXED))
; Create Tab items, coloring the tab page
For $i = 0 To UBound($g_aTabItm) -1
GUICtrlCreateTabItem($g_aTabItm[$i][0])
_GUICtrlTab_PageColor(_BGRvvRGB($g_aTabItm[$i][1]))
GUICtrlCreateTabItem('')
Next
GUIRegisterMsg($WM_DRAWITEM, "WM_DRAWITEM")
GUISetState()
Do
Until GUIGetMsg() = -3
Func _GUICtrlTab_PageColor($_bgCol)
; Tab position
Local $aTabPos = ControlGetPos($g_hGui, '', $g_hTab)
; size of user area
Local $aTabRect = _GUICtrlTab_GetItemRect($g_hTab, -1)
; Create label
GUICtrlCreateLabel('', $aTabPos[0] + 2, $aTabPos[1] + $aTabRect[3] + 4, $aTabPos[2] - 6, $aTabPos[3] - $aTabRect[3] - 7)
; set color
GUICtrlSetBkColor(-1, $_bgCol)
; Disable label
GUICtrlSetState(-1, $GUI_DISABLE)
EndFunc
Func WM_DRAWITEM($hWnd, $Msg, $wParam, $lParam)
Local Const $ODT_TAB = 101
Local Const $ODA_DRAWENTIRE = 0x1
Local $DIS = DllStructCreate("uint cType;uint cID;uint itmID;uint itmAction;uint itmState;" & _
"hwnd hItm;hwnd hDC;dword itmRect[4];dword itmData", $lParam) ; DRAWITEMSTRUCT
If $DIS.hItm <> $g_hTab Then Return $GUI_RUNDEFMSG
If BitAND($DIS.cType, $ODT_TAB) <> $ODT_TAB Then Return $GUI_RUNDEFMSG
If BitAND($DIS.itmAction, $ODA_DRAWENTIRE) <> $ODA_DRAWENTIRE Then Return $GUI_RUNDEFMSG
Local $tRect = DllStructCreate($tagRECT, DllStructGetPtr($DIS, 'itmRect'))
Local $bFocus = (_GUICtrlTab_GetCurFocus($DIS.hItm) = $DIS.itmID)
Local $itmText = _GUICtrlTab_GetItemText($DIS.hItm, $DIS.itmID)
Local $iFontSize = $bFocus ? 15 : 14.5
Local $hFont = _WinAPI_CreateFont($iFontSize, 0, 0, 0, 400, False, False, False, $DEFAULT_CHARSET, _
$OUT_DEFAULT_PRECIS, $CLIP_DEFAULT_PRECIS, $DEFAULT_QUALITY, 0, 'Lucida Sans Unicode Standard')
Local $hOldFont = _WinAPI_SelectObject($DIS.hDC, $hFont)
; draw and fill rect
Local $hBrush = _WinAPI_CreateSolidBrush($g_aTabItm[$DIS.itmID][1])
Local $hOldBrush = _WinAPI_SelectObject($DIS.hDC, $hBrush)
_WinAPI_Rectangle($DIS.hDC, $tRect)
; draw text
_WinAPI_SetTextColor($DIS.hDC, $g_aTabItm[$DIS.itmID][2])
_WinAPI_SetBkColor($DIS.hDC, $g_aTabItm[$DIS.itmID][1])
; move text rect with focus
If $bFocus Then
_WinAPI_OffsetRect($tRect, 0, 3)
Else
_WinAPI_OffsetRect($tRect, 0, 1)
EndIf
_WinAPI_DrawText($DIS.hDC, $itmText, $tRect, BitOR($DT_BOTTOM,$DT_CENTER))
; clear ressources
_WinAPI_SelectObject($DIS.hDC, $hOldFont)
_WinAPI_DeleteObject($hFont)
_WinAPI_SelectObject($DIS.hDC, $hOldBrush)
_WinAPI_DeleteObject($hBrush)
; remove focus rect
Local Const $UIS_SET = 1
Local Const $UISF_HIDEFOCUS = 0x1
_WinAPI_PostMessage($hWnd, $WM_CHANGEUISTATE, _WinAPI_MakeLong($UIS_SET, $UISF_HIDEFOCUS), 0)
Return 0
EndFunc
Func _BGRvvRGB($_iCol) ; BGR to RGB and vice versa
Local $a = StringLeft(Hex($_iCol,6), 2)
Local $b = StringMid(Hex($_iCol,6), 3, 2)
Local $c = StringRight(Hex($_iCol,6), 2)
Return '0x' & $c & $b & $a
EndFunc
Alles anzeigen
Windows 10/11 haben ja nun diese Flat - gestrickten Fenster. Da Ctrl nix anderes als Fenster sind, sehen auch die genauso verbaselt aus.
Ränder sind kaum noch auszumachen, umso hässlicher macht sich dann der gepunktete Rahmen des Tab-Item mit Focus aus.
Damit man die Item überhaupt sieht, nutze ich jetzt selbst gezeichnete Item. Das kann man dann auch schön bunt (wenn man mag für jedes Item anders) gestalten. Aber ich finde ums Verrecken nicht heraus, wie ich das Zeichnen des Focusrahmens verhindern kann.
Hier mal ein Code-Bsp. - hat jemand 'ne Idee, wie ich dem Focusrahmen beikommen kann?
#include <FontConstants.au3>
#include <GuiConstantsEx.au3>
#include <GuiTab.au3>
#include <StructureConstants.au3>
#include <WinAPIGdi.au3>
#include <WindowsConstants.au3>
Global $g_hGui = GUICreate('Test')
Global $g_hTab = GUICtrlGetHandle(GUICtrlCreateTab(10, 10, 380, 200, BitOR($TCS_MULTILINE,$TCS_OWNERDRAWFIXED)))
GUICtrlCreateTabItem('Alpha')
GUICtrlCreateTabItem('Beta')
GUICtrlCreateTabItem('Gamma')
GUICtrlCreateTabItem('Delta')
GUICtrlCreateTabItem('Epsilon')
GUICtrlCreateTabItem('Zeta')
GUICtrlCreateTabItem('Eta')
GUICtrlCreateTabItem('Theta')
GUICtrlCreateTabItem('Iota')
GUICtrlCreateTabItem('Kappa')
GUICtrlCreateTabItem('Lambda')
GUICtrlCreateTabItem('My')
GUICtrlCreateTabItem('Ny')
GUICtrlCreateTabItem('Xi')
GUICtrlCreateTabItem('Omikron')
GUICtrlCreateTabItem('Pi')
GUICtrlCreateTabItem('Rho')
GUICtrlCreateTabItem('Sigma')
GUICtrlCreateTabItem('Tau')
GUICtrlCreateTabItem('Ypsilon')
GUICtrlCreateTabItem('Phi')
GUICtrlCreateTabItem('Chi')
GUICtrlCreateTabItem('Psi')
GUICtrlCreateTabItem('Omega')
; Tab item color:
;~ Global $g_BGcolor = 0xCC483F ; hellblau
;~ Global $g_BGcolor = 0x409340 ; grün
;~ Global $g_BGcolor = 0x3030FF ; rot
;~ Global $g_BGcolor = 0xE3E3E3 ; dunkelgrau
Global $g_BGcolor = 0xF0F0F0 ; lichtgrau
;~ Global $g_BGcolor = 0x000000 ; schwarz
GUIRegisterMsg($WM_DRAWITEM, "WM_DRAWITEM")
GUISetState()
Do
Until GUIGetMsg() = -3
Func WM_DRAWITEM($hWnd, $Msg, $wParam, $lParam)
Local Const $ODT_TAB = 101
Local Const $ODA_DRAWENTIRE = 0x1
Local $DIS = DllStructCreate("uint cType;uint cID;uint itmID;uint itmAction;uint itmState;" & _
"hwnd hItm;hwnd hDC;dword itmRect[4];dword itmData", $lParam) ; DRAWITEMSTRUCT
If $DIS.hItm <> $g_hTab Then Return $GUI_RUNDEFMSG
If BitAND($DIS.cType, $ODT_TAB) <> $ODT_TAB Then Return $GUI_RUNDEFMSG
If BitAND($DIS.itmAction, $ODA_DRAWENTIRE) <> $ODA_DRAWENTIRE Then Return $GUI_RUNDEFMSG
Local $tRect = DllStructCreate($tagRECT, DllStructGetPtr($DIS, 'itmRect'))
Local $bFocus = (_GUICtrlTab_GetCurFocus($DIS.hItm) = $DIS.itmID)
Local $itmText = _GUICtrlTab_GetItemText($DIS.hItm, $DIS.itmID)
Local $hFont = _WinAPI_CreateFont(14.5, 0, 0, 0, 400, False, False, False, $DEFAULT_CHARSET, _
$OUT_DEFAULT_PRECIS, $CLIP_DEFAULT_PRECIS, $DEFAULT_QUALITY, 0, 'Lucida Sans Unicode Standard')
Local $hOldFont = _WinAPI_SelectObject($DIS.hDC, $hFont)
; draw and fill rect
Local $hBrush = _WinAPI_CreateSolidBrush($g_BGcolor)
Local $hOldBrush = _WinAPI_SelectObject($DIS.hDC, $hBrush)
_WinAPI_Rectangle($DIS.hDC, $tRect)
; draw text
_WinAPI_SetTextColor($DIS.hDC, _GuiCtrl_GetColorContrast($g_BGcolor))
_WinAPI_SetBkColor($DIS.hDC, $g_BGcolor)
; move text rect by focus
If $bFocus Then
_WinAPI_InflateRect($tRect, 0, -2) ; reduce rectangle
_WinAPI_OffsetRect($tRect, 0, 2) ; move rectangle down by 2px
EndIf
_WinAPI_DrawText($DIS.hDC, $itmText, $tRect, BitOR($DT_BOTTOM,$DT_CENTER))
; clear ressources
_WinAPI_SelectObject($DIS.hDC, $hOldFont)
_WinAPI_DeleteObject($hFont)
_WinAPI_SelectObject($DIS.hDC, $hOldBrush)
_WinAPI_DeleteObject($hBrush)
Return 0
EndFunc
; #FUNCTION# =======================================================================================
; Name ..........: _GuiCtrl_GetColorContrast
; Description ...: The appropriate contrast color for the text is determined depending
; ...............: on the brightness of the BG color.
; Parameter(s)...: $_BkCol The background color
; ....[optional].: $_ColOnDark The text color if BG is dark (Default: -1, almost white)
; ....[optional].: $_ColOnBright The text color if BG is bright (Default: -1, very deep blue)
; Return values .: Text color
; Author ........: BugFix
; ==================================================================================================
Func _GuiCtrl_GetColorContrast($_BkCol, $_ColOnDark=-1, $_ColOnBright=-1)
$_ColOnDark = $_ColOnDark = -1 ? 0xFAFAFA : $_ColOnDark
;~ $_ColOnBright = $_ColOnBright = -1 ? 0x000088 : $_ColOnBright ; RGB
$_ColOnBright = $_ColOnBright = -1 ? 0x440000 : $_ColOnBright ; BGR
; get contrast
Local $R = BitAND(BitShift($_BkCol, 16), 0xFF)
Local $G = BitAND(BitShift($_BkCol, 8), 0xFF)
Local $B = BitAND($_BkCol, 0xFF)
Local $Brightness = Sqrt($R^2*0.299 + $G^2*0.587 + $B^2*0.114)
Return ($Brightness < 140 ? $_ColOnDark : $_ColOnBright)
EndFunc
Alles anzeigen
nun sollte endlich ruhe sein
Vergiß es. Mit dem nächsten Sicherheits-Update, dass du ja wohl doch mal zum Selbstschutz drauf ziehst, wird auch diese "Lücke" wieder geschlossen.
meine eigenen Abbrevs gehen nur mit dem Schalter CTRL + b.
Wie hast du diese denn eingebunden?
Wenn du die Abbrevs im AbbrevManager erstellst (AU3 Script in SciTE öffnen, <Strg+1><AbbrevManager> klicken), dann sind dise Abbrevs auch wirksam.
EDIT:
"Ctrl+B" dürfte eigentlich gar nicht reagieren - hast du evtl. gar nicht SciTE4AutoIt sondern nur die Lite-Version?
Die meiner Erfahrung nach schnellste Methode eines Datenimportes in sqlite ist die >>.import-Funktion<< des CLI-Tools von sqlite.
Klingt gut, Danke. Werde ich testen.
Ich stelle zum Befüllen der Tabellen einer SQLite-DB die Queries in einer Funktion zusammen. Dabei hänge ich alle Insert-Befehle hintereinander und führe danach aus:
Function _Insert($_kind, $_sCSV)
Local $aLines = FileReadToArray($_sCSV)
Local $aSplit, $sQuery = 'BEGIN;'
For $i = 1 To UBound($aLines) -1
If $_kind = 'Tab1' Then
$aSplit = StringSplit($aLines[$i], ',', 2)
$sQuery &= _
StringFormat("INSERT INTO tab1 VALUES (%d, '%s', '%s', '%s', '%s', '%s', '%s');", $i, _
$aSplit[0], $aSplit[1], $aSplit[2], $aSplit[3], $aSplit[4], $aSplit[5])
Else
$aSplit = _SplitStreetLine($aLines[$i])
$sQuery &= _
StringFormat("INSERT INTO tab2 VALUES (%d, '%s', '%s', '%s', '%s');", $i, _
$aSplit[0], $aSplit[1], $aSplit[2], $aSplit[3])
EndIf
Next
Local $SQLiteResult = _SQLite_Exec($hSQL, $sQuery & 'COMMIT;')
If $SQLiteResult <> $SQLITE_OK Then
ConsoleWrite('!> ERROR! ' & @TAB & 'Inserting data in table [' & $_kind & '] has failed.' & @CRLF & _
'!> The sql-query is stored to "@ScriptDir\err_insert.txt".' & @CRLF & _
'!> Check this file.' & @CRLF)
Local $fh = FileOpen(@ScriptDir & '\err_insert.txt', 2+256)
FileWrite($fh, 'SQLite-Error = ' & $SQLiteResult & @CRLF & $sQuery)
FileClose($fh)
Exit
EndIf
EndFunc
Alles anzeigen
Tabelle 1 hat nur ein paar Hundert Datensätze, das Insert funktioniert ohne Probleme.
Für Tabelle 2 stelle ich 1,8 Mio Datensätze zusammen. AutoIt hat kein Problem mit der Stringlänge.
Aber das _SQLite_Exec schlägt fehl, Fehlercode = 1 - Error calling SQLite API 'sqlite3_exec'. Natürlich sehr aussagekräftig.
Meine Vermutung ist, dass der Befehlsstring einfach zu lang ist (~103 Mio. Zeichen).
Bevor ich jetzt anfange zu stückeln: Ist euch ein Limit für den Befehlsstring bekannt? Ich möchte mich da nicht rantasten.
Das selbe geschieht, wenn ich das aktuelle Tab schließe. Dann wird ja wieder ein anderes Tab zum aktuellen Tab, aber es wird nicht entsprechend markiert. Ich muss erst wieder mit dem Cursor auf diese Tab fahren und dann den Cursor wieder weg bewegen, damit es auch markiert wird.
Das ist in der Version 0.5 nicht mehr der Fall. Jetzt wird im Intervall von 750 ms auf das aktive Tab überprüft und bei Bedarf markiert.
[v0.5] Gefixed: Flickern der Markierung. Danke Velted fürs Suchen & Finden
[v0.5] Gefixed: Markierung hat nicht gewechselt bei Nutzung der Tastatur zur Auswahl der Tabs.
Wenn die Variable $iHoverLast eine Funktion haben soll, sollte es dann im ElseIf nicht eher $iHoverLast = 0 sein?
Klassisches Eigentor. Beim Erstellen des ElseIf-Zweiges mal eben die Zeile gedoppelt und vergessen den Wert zu ändern.
Danke für's aufmerksame Lesen. Das war der Kern des Übels.
nur alle paar Sekunden flackert das markierte Tab,
Ja, das meine ich. Es ist nicht direkt nervig, aber spürbar. Ich habe jetzt nochmal auf dem Win 7 Rechner geschaut. Dort passiert das auch, aber mit deutlich geringerer Häufigkeit. Dadurch war es mir nicht bewusst geworden.
Ich meine mich zu erinnern, dass peethebee vor Urzeiten sowas realisiert hat. Kann mich im Moment nur nicht an den UDF Namen erinnern. Aber vielleicht erinnert sich jemand anders.
Hast Du die Datenbank schon mal "gepackt",
Ja, VACUUM ist eine gute Idee. Oder du setzt gleich pragma auto_vacuum auf 1.
Ich hatte mal häufig Zugriffsfehler, habe mir dann angewöhnt Backup immer in Kombination mit Vacuum auszuführen. So bleibt auch die DB schön schlank.
gibts hier irgendwelche Umwege?
Such mal im Forum nach der BigNum UDF.
Vielleicht schaust Du mal da...
Na dann bietet es sich doch an, wenn man Zitate verwendet auch sofort die Quelle zu benennen - oder sehe ich das falsch?
Natürlich könnte ich diese "einfach" als Menüpunkt einbauen, aber dann sind diese ja "auswählbar".
Würde ich trotzdem so machen - dann prüfst du bei der Auswahl, ob ein Trenner gewählt wurde und tust einfach nichts.
d.h. es ist kein MySQL-ODBC Treiber installiert.
Dann arbeite ohne ODBC-Treiber.
Hier die UDF von prog@ndy:
Im Startpost hinzugefügt:
Dark-Theme für Lua-Skripte.
Wirf mal einen Blick in unser Unterforum Datenbanken. z.B. dieser Beitrag könnte für dich zutreffen.