Ich hab gerade mal probiert. Umbenennen geht doch.
Einfach mit
GUICtrlSetData($tab1, 'Tab_1')
[/autoit]Ich hab gerade mal probiert. Umbenennen geht doch.
Einfach mit
GUICtrlSetData($tab1, 'Tab_1')
[/autoit]Versuch mal:
[autoit]#Include <WinAPI.au3>
_WinAPI_InvalidateRect($hWnd)
Na dann steck die Werte doch in ein Array:
[autoit]$date = _GetDate(2009, 5, 13)
ConsoleWrite('Datum: ' & $date[0] & @CRLF & 'Wochentag: ' & $date[1] & @CRLF)
#include-once
#include <Date.au3>
Func _GetDate($Year,$Mon,$Day)
Local $aRet[2] = [$Day & "." & $Mon & "." & $Year]
Switch _DateToDayOfWeekISO(@YEAR, @MON, @MDAY)
Case 0
$aRet[1] = "Montag"
Case 1
$aRet[1] = "Dienstag"
Case 2
$aRet[1] = "Mittwoch"
Case 3
$aRet[1] = "Donnerstag"
Case 4
$aRet[1] = "Freitag"
Case 5
$aRet[1] = "Samstag"
Case 6
$aRet[1] = "Sonntag"
EndSwitch
Return $aRet
EndFunc
Für diese Funktion kannst du keinen Fortschritt anzeigen.
Intern wird im Wesentlichen das Array mit einem einzigen Befehl erstellt:
$aArray = StringSplit(StringStripCR($aFile), @LF) ; bzw. @CR
[/autoit]Notepad ist ein Programm, mit FileOpen verschaffst du dir nur eine Referenz auf die Datei. Also ist doch deine Bedingung erfüllt.
Ähhh...
[autoit]FileReadLine()
[/autoit]Meinst du das? - Muß aber vorher geöffnet werden mit FileOpen.
Finde ich ja krass, 2-mal das selbe zu fragen. ![]()
@oliverh: Ich hatte den betreffenden Thread nicht gelesen und hatte trotzdem exakt dieselbe Lösungsvariante. Entweder sind wir 100% seelenverwandt oder es ist einfach die optimale Lösung. ![]()
bugfix kann ich diese GUICtrlCreateSlider nicht im tabfenster einbauen
Schau mein 2. Bsp. hier an. ![]()
AutoBert, da ist noch ein Komma zuviel:
[autoit]$var = RegRead("\\" & GUICtrlRead($cnameinput) & "\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\winlogon", "Defaultusername")
[/autoit]kann eigentlich die Funktion StringinStr mit Platzhaltern umgehen ?
Nein, für eine variable Überprüfung mußt du StringRegExp einsetzen (oder umständlich mit ODER-Verknüpfungen arbeiten).
Ist es nicht traurig, da kommt jemand neu zu uns ohne die Forenregeln zu lesen und hat nur Interesse an Bots.
Schlechter Anfang.
[Topic Closed]
Schau dir mal die Funktionen in der <GuiTreeView.au3> an. Das sollte deine Fragen klären.
So,
ich habe nun mal Windows-Msg verwendet. Das läuft etwas flüssiger.
#include <GUIConstantsEx.au3>
#include <StructureConstants.au3>
#include <WindowsConstants.au3>
Global $aButton[12][2] ; zweite Dim. für y-Wert
$gui = GUICreate('Test', 600, 400)
$tab = GUICtrlCreateTab(10, 10, 580, 380)
$tab0 = GUICtrlCreateTabItem("tab0")
$y = 45
For $i = 0 To 11
$aButton[$i][0] = GUICtrlCreateButton('B ' & $i+1, 20, $y, 60, 20)
$aButton[$i][1] = $y
$y += 40
Next
$slider = GUICtrlCreateSlider(560, 40, 20, 340, BitOR(0x0001,0x0002))
GUICtrlSetLimit(-1, 120, 0)
; verfügbarer Bereich auf Tab: 340
; Bereich für alle Button wäre: 12x Button-Höhe + 11x Zwischenraum = 240+220 = 460
; Differenz ist Sliderbereich: 120
$tab1 = GUICtrlCreateTabItem("tab1")
GUICtrlCreateTabItem("")
GUIRegisterMsg($WM_NOTIFY, 'WM_NOTIFY')
[/autoit][autoit][/autoit][autoit]GUISetState()
While 1
$msg = GUIGetMsg()
Switch $msg
Case -3
Exit
EndSwitch
WEnd
Func _moveButton()
Local $moveDiff = GUICtrlRead($slider), $posCtrl, $y
GUICtrlSetState($gui, @SW_LOCK)
For $i = 0 To UBound($aButton) -1
$posCtrl = ControlGetPos($gui, '', $aButton[$i][0])
$y = $aButton[$i][1] - GUICtrlRead($slider)
ControlMove($gui, '', $aButton[$i][0], $posCtrl[0], $y)
If ($y < 45) Or ($y > 365) Then
GUICtrlSetState($aButton[$i][0], $GUI_HIDE)
Else
GUICtrlSetState($aButton[$i][0], $GUI_SHOW)
EndIf
Next
GUICtrlSetState($gui, @SW_UNLOCK)
EndFunc
Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
Local $hWndFrom, $iCode, $tNMHDR, $hWndSlider
$hWndSlider = $slider
If Not IsHWnd($hWndSlider) Then $hWndSlider = GUICtrlGetHandle($slider)
$tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
$iCode = DllStructGetData($tNMHDR, "Code")
If $hWndFrom = $hWndSlider And ($iCode = -12 Or $iCode = -16) Then _moveButton()
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NOTIFY
allerdings musst du beachten, dass nicht jeder anfänger gleich mit 2D Arrays
arbeiten will, geschweigedenn diese versteht.
Nun ja, das sehe ich nicht unbedingt als Widerspruch. Zumal ich eigentlich bemüht bin, die wichtigen Passagen in den Bsp.-Skripts zu kommentieren. Und zudem besteht doch die Hoffnung, dass der User die präsentierte Lösung nachgestaltet um für sich dauerhaften Nutzen zu ziehen.
Andererseits existiert mein Array-Tutorial. Wer es liest und noch Probleme hat, kann sich bei mir melden - darauf weise ich ausdrücklich im Tut hin. Aus den Fragen wollte ich dann eine FAQ erstellen um noch bessere Hilfe geben zu könne. Das Tut ist seit ca. 1,5 Jahren online. Bisher gestellte Fragen: 0!
Schlußfolgerung: Jeder der es liest, versteht es. ![]()
Ich glaube, ich weiß was du willst.
Auf einem Tab mehr Elemente untereinander anzeigen als draufpassen. Das geht schon. Dazu mußt du dann ALLE Controls auf dem Tab verschieben. Die "Nicht gültigen" dann immer ausblenden. Hab mal eine grobe Musterlösung erstellt. Geht eleganter mit Msg-Codes, kannst du dann ja anpassen.
#include <GUIConstantsEx.au3>
Global $aButton[12][2] ; zweite Dim. für y-Wert
$gui = GUICreate('Test', 600, 400)
$slider = GUICtrlCreateSlider(540, 20, 20, 380, BitOR(0x0001,0x0002))
GUICtrlSetLimit(-1, 120, 0)
; verfügbarer Bereich auf Tab: 340
; Bereich für alle Button wäre: 12x Button-Höhe + 11x Zwischenraum = 240+220 = 460
; Differenz ist Sliderbereich: 120
$tab = GUICtrlCreateTab(10, 10, 500, 380)
$tab0 = GUICtrlCreateTabItem("tab0")
$y = 45
For $i = 0 To 11
$aButton[$i][0] = GUICtrlCreateButton('B ' & $i+1, 20, $y, 60, 20)
$aButton[$i][1] = $y
$y += 40
Next
$tab1 = GUICtrlCreateTabItem("tab1")
GUICtrlCreateTabItem("")
GUISetState()
While 1
$msg = GUIGetMsg()
Switch $msg
Case -3
Exit
Case $slider
_moveButton()
EndSwitch
WEnd
Func _moveButton()
Local $posCtrl, $y
For $i = 0 To UBound($aButton) -1
$posCtrl = ControlGetPos($gui, '', $aButton[$i][0])
$y = $aButton[$i][1] - GUICtrlRead($slider)
ControlMove($gui, '', $aButton[$i][0], $posCtrl[0], $y)
If ($y < 45) Or ($y > 360) Then
GUICtrlSetState($aButton[$i][0], $GUI_HIDE)
Else
GUICtrlSetState($aButton[$i][0], $GUI_SHOW)
EndIf
Next
EndFunc
ich möchte ein scrollbalken in ein tabfenster einbauen mit so ein grösse wie unten
Wo, bitteschön, willst du denn scrollen? Dein Tab wird in voller Größe abgebildet, da is nix zum Scrollen.
Du könntest z.B. ein Edit einbauen - in dem kannst du dann scrollen.
ich versuche mit StringRegExp nach folgendem Muster zu suchen und zwar:
-[Zahl 0-9][Zahl 0-9].doc --> also z.B. W-81734-34.doc (-34.doc)
Das wäre das passende Pattern dazu: "W-\d+-\d+\.doc"
Bei der Lösung zum Finden der Doppel bin ich (anhand der Musterdatei) davon ausgegangen, dass neuere Versionsinformationen immer am Dateianfang eingefügt werden.
Falls die Möglichkeit besteht, dass mehr als 2 gleiche Dateien auftauchen und diese irgendwo in der Datei eingeschrieben werden, müßte man zweistufig sortieren, um definitiv die jüngste Datei zu erwischen. Vielleicht sogar generell der bessere Weg. Vielleicht erstelle ich diese Lösung mal noch. ![]()
Edit:
Habe die Lösung mal abgeändert mit mehrstufiger Sortierung. Nun können beliebig viele Dateien derselben Version irgendwo in der Datei stehen: Es wird nur die neueste rausgefischt. ![]()
#include <File.au3>
#include <Array.au3>
#include <SQLite.au3>
#include <SQLite.dll.au3>
Global $path = @ScriptDir & '\test_x.txt'
Global $aFile, $tmpSplit, $aSplit[_FileCountLines($path)][3], $aIndexDelete[1] = [-1]
_FileReadToArray($path, $aFile) ; Textdatei in Array einlesen, jede Textzeile in einem Element
If @error Then Exit MsgBox(0, 'Fehler', 'Datei konnte nicht eingelesen werden')
; gesamten Dateiinhalt in einem 2D-Array ($aSplit) darstellen
For $i = 1 To UBound($aFile) -1
$tmpSplit = StringSplit($aFile[$i], ',', 2)
If @error Then ContinueLoop ; falls Leerzeile
For $j = 0 To 2
$aSplit[$i-1][$j] = $tmpSplit[$j]
Next
Next
;~ _ArrayDisplay($aSplit, 'unsortiert')
; sortieren nach Version und innerhalb der Version nach Datum
_Array2DSortFree($aSplit, "1|1,2|1")
;~ _ArrayDisplay($aSplit, 'sortiert 2-stufig')
; bei mehrfacher Versionsnummer die älteren zum Löschen vormerken
Local $new = -1
For $i = 0 To UBound($aSplit) -1
If $aSplit[$i][1] <> $new Then
$new = $aSplit[$i][1]
Else ; jedes weitere Vorkommen ist aufgrund der Sortierung älter ==> Löschen
If $aIndexDelete[UBound($aIndexDelete)-1] <> -1 Then ReDim $aIndexDelete[UBound($aIndexDelete)+1]
$aIndexDelete[UBound($aIndexDelete)-1] = $i
EndIf
Next
;~ _ArrayDisplay($aIndexDelete)
; anhand der Lösch-Indexe die Einträge im Array löschen, ABER rückwärts, da sonst die Indexe nicht mehr stimmen!
For $i = UBound($aIndexDelete) -1 To 0 Step -1
_ArrayDelete($aSplit, $aIndexDelete[$i])
Next
;~ _ArrayDisplay($aSplit, 'bereinigt')
; zurückschreiben in Datei
Local $strWrite = ''
For $i = 0 To UBound($aSplit) -1
For $j = 0 To 2
$strWrite &= $aSplit[$i][$j] & ','
Next
$strWrite = StringTrimRight($strWrite, 1) & @CRLF
Next
Local $fh = FileOpen($path, 2)
FileWrite($fh, StringTrimRight($strWrite, 2))
;==================================================================================================
; Function Name: _Array2DSortFree($ARRAY, $sCOL_ASC [, $NUM=False])
; Description:: Sortierung von 1D/2D-Arrays nach freier Wahl
; 1D Sortierung Auf- oder Absteigend
; 2D mehrstufige Sortierung, Reihenfolge und Sortier-
; richtung (je Spalte) frei wählbar
; auch einzelne Spalte sortierbar
; Parameter(s): $ARRAY Das zu sortierende Array
; $sCOL_ASC String mit Sortierangaben "Spalte|Richtung [, Spalte|Richtung]"
; zu sortierende Spalte (0-Index)|Richtung (0-Asc, 1-Desc)
; z.B. Spalte 2 aufsteigend und in 2 absteigend Spalte 1
; _Array2DSortFree($ar2Sort, '1|0,0|1')
; optional $NUM "False" sortiert alphabetisch (Standard), "True" sortiert numerisch
; Return Value(s): Erfolg 0
; Fehler 1 Set Error 1 $ARRAY ist kein Array
; 2 1D-Array, aber Spaltenangabe für 2D
; 3 SQL-Fehler
; 4 Angaben für Spalte|Sortierrichtung fehlerhaft
; Requirements: #include <SQLite.au3>
; #include <SQLite.dll.au3>
; #include <Array.au3>
; Note: Es ist dringend erforderlich, die SQLite-Includes am Beginn des aufrufenden
; Skriptes auszuführen. Anderenfalls schlägt die Initialisierung der SQLite.dll
; durch _SQLite_Startup() fehl.
; Version: 3.3.0.0
; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
;==================================================================================================
#include-once
#include <SQLite.au3>
#include <SQLite.dll.au3>
#include <Array.au3>
Func _Array2DSortFree(ByRef $ARRAY, $sCOL_ASC, $NUM=False)
If Not IsArray($ARRAY) Then Return SetError(1,0,1)
Local $tableStr = "CREATE TABLE [tblTEST] ("
Local $insertStr = '', $insertBase = "INSERT INTO tblTEST VALUES ("
Local $sortOrder = '', $sortStr = "SELECT * FROM tblTEST ORDER BY "
Local $aResult, $asc, $iRows, $iCol
$sCOL_ASC = StringStripWS($sCOL_ASC, ![]()
Local $ub2nd = UBound($ARRAY, 2)
If @error = 2 Then
If (StringLen($sCOL_ASC) > 3) Or (StringLeft($sCOL_ASC, 1) <> '0') Then Return SetError(2,0,1)
If StringRight($sCOL_ASC, 1) = 0 Then
_ArraySort($ARRAY)
Else
_ArraySort($ARRAY, 1)
EndIf
Return 0
Else
Local $aOut[UBound($ARRAY)][$ub2nd]
EndIf
_SQLite_Startup ()
If @error > 0 Then Return SetError(3,0,1)
$hSQL = _SQLite_Open ()
If @error > 0 Then
_SQLite_Shutdown ()
Return SetError(3,0,1)
EndIf
For $i = 0 To UBound($ARRAY, 2) -1
$tableStr &= "'field" & $i & "',"
Next
$tableStr = StringTrimRight($tableStr, 1) & ");"
For $i = 0 To UBound($ARRAY) -1
$insertStr &= $insertBase
For $k = 0 To UBound($ARRAY, 2) -1
$insertStr &= "'" & $ARRAY[$i][$k] & "',"
Next
$insertStr = StringTrimRight($insertStr, 1) & ");"
Next
If _SQLite_Exec ( $hSQL, $tableStr & $insertStr ) <> $SQLITE_OK Then
_SQLite_Shutdown ()
Return SetError(3,0,1)
EndIf
If StringInStr($sCOL_ASC, ',') Then
Local $aOrder = StringSplit($sCOL_ASC, ',')
For $i = 1 To UBound($aOrder) -1
If StringInStr($sCOL_ASC, '|') Then
Local $var = StringSplit($aOrder[$i], '|')
$asc = ' ASC'
If $var[2] = 1 Then $asc = ' DESC'
If $NUM Then
$sortOrder &= 'ABS(field' & $var[1] & ')' & $asc & ','
Else
$sortOrder &= 'field' & $var[1] & $asc & ','
EndIf
Else
_SQLite_Shutdown ()
Return SetError(4,0,1)
EndIf
Next
$sortOrder = StringTrimRight($sortOrder, 1) & ';'
Else
If (StringLen($sCOL_ASC) > 2) And (StringInStr($sCOL_ASC, '|')) Then
Local $var = StringSplit($sCOL_ASC, '|')
$asc = ' ASC'
If $var[2] = 1 Then $asc = ' DESC'
If $NUM Then
$sortOrder &= 'ABS(field' & $var[1] & ')' & $asc
Else
$sortOrder &= 'field' & $var[1] & $asc
EndIf
Else
_SQLite_Shutdown ()
Return SetError(4,0,1)
EndIf
EndIf
If _SQLite_GetTable2d ( $hSQL, $sortStr & $sortOrder, $aResult, $iRows, $iCol ) <> $SQLITE_OK Then
_SQLite_Shutdown ()
Return SetError(3,0,1)
EndIf
For $i = 1 To UBound($aResult) -1
For $j = 0 To UBound($ARRAY,2) -1
$ARRAY[$i-1][$j] = $aResult[$i][$j]
Next
Next
_SQLite_Exec ($hSQL, "DROP TABLE tblTEST;")
_SQLite_Close ()
_SQLite_Shutdown ()
Return 0
EndFunc ;==>_Array2DSortFree
Hi,
ich hab dir mal 'ne Lösung erstellt (natürlich mit Arrays :D).
#include <File.au3>
#include <Array.au3>
Global $path = @ScriptDir & '\test_x.txt'
Global $aFile, $tmpSplit, $aSplit[_FileCountLines($path)][3], $aIndexDelete[1] = [-1]
_FileReadToArray($path, $aFile) ; Textdatei in Array einlesen, jede Textzeile in einem Element
If @error Then Exit MsgBox(0, 'Fehler', 'Datei konnte nicht eingelesen werden')
; gesamten Dateiinhalt in einem 2D-Array ($aSplit) darstellen
For $i = 1 To UBound($aFile) -1
$tmpSplit = StringSplit($aFile[$i], ',', 2)
If @error Then ContinueLoop ; falls Leerzeile
For $j = 0 To 2
$aSplit[$i-1][$j] = $tmpSplit[$j]
Next
Next
;~ _ArrayDisplay($aSplit)
; sortieren nach Version
_ArraySort($aSplit, 1, 0, 0, 1)
;~ _ArrayDisplay($aSplit, 'sortiert')
; bei mehrfacher Versionsnummer die älteren zum Löschen vormerken
Local $new = -1
For $i = 0 To UBound($aSplit) -1
If $aSplit[$i][1] <> $new Then
$new = $aSplit[$i][1]
Else
If $aIndexDelete[UBound($aIndexDelete)-1] <> -1 Then ReDim $aIndexDelete[UBound($aIndexDelete)+1]
If $aSplit[$i][2] < $aSplit[$i-1][2] Then ; Datum kleiner als im vorigen Eintrag gleicher Version
; wenn noch nicht zum Löschen vermerkt ==> eintragen
_ArraySearch($aIndexDelete, $i)
If @error Then $aIndexDelete[UBound($aIndexDelete)-1] = $i
Else
_ArraySearch($aIndexDelete, $i-1)
If @error Then $aIndexDelete[UBound($aIndexDelete)-1] = $i-1
EndIf
EndIf
Next
;~ _ArrayDisplay($aIndexDelete)
; anhand der Lösch-Indexe die Einträge im Array löschen, ABER rückwärts, da sonst die Indexe nicht mehr stimmen!
For $i = UBound($aIndexDelete) -1 To 0 Step -1
_ArrayDelete($aSplit, $aIndexDelete[$i])
Next
;~ _ArrayDisplay($aSplit, 'bereinigt')
; zurückschreiben in Datei
Local $strWrite = ''
For $i = 0 To UBound($aSplit) -1
For $j = 0 To 2
$strWrite &= $aSplit[$i][$j] & ','
Next
$strWrite = StringTrimRight($strWrite, 1) & @CRLF
Next
Local $fh = FileOpen($path, 2)
FileWrite($fh, StringTrimRight($strWrite, 2))
FileClose($fh)
Mit meinem XP bin ich eigentlich ganz zufrieden
Und was treibt dich dann, ein laufendes System zu ersetzen? ![]()
Du weißt doch: Never change a running system!
Und nach den bisherigen Erfahrungen mit $MS ist auch dieses mal davon auszugehen, dass das System erst in 1-2 Jahren wirklich auf die User losgelassen werden kann. Da XP noch bis 2014 unterstützt wird, kannst du also in Ruhe schauen, welche Bugs dort so anfallen und wenn die ausgemerzt sind immer noch wechseln.
Für mich steht außer Frage, dass XP das letzte Windows für mich ist. Parallel bin ich eh schon mit Linux 'befreundet' und wenn der Tag kommt, an dem keine Hardware mehr XP unterstützt, wird Windows endgültig zu Grabe getragen. ![]()
deine udf hat doch irgendwo drinne stehen wingetprocess
Ja, für den Fall, dass keine PID übergeben wird, wird damit der Prozeß des aktiven Fensters verwendet (steht auch in der Funktionsbeschreibung erklärt):
If $PID = -1 Then $PID = WinGetProcess(WinGetTitle("[active]"))
[/autoit]
Es gibt nicht nur WinList sondern auch ProcessList und letzteres gibt dir die PID der Prozesse.