Wahnsinn Jungs/Mädels,
Vielen Dank für die Mühe. Werd die Infos und Funktionen mal alle verarbeiten und dann entscheiden, welchen Weg ich weiter gehe.
Wahnsinn Jungs/Mädels,
Vielen Dank für die Mühe. Werd die Infos und Funktionen mal alle verarbeiten und dann entscheiden, welchen Weg ich weiter gehe.
Derzeit sehen die Einträge folgendermaßen aus:
[evo100_ff20186725_messerhalter_schritt_1.pdf___projekt_F27389042601]
laufzeit=21
stueckzahl=1
Quellpfad=\\ffnas01.xxxxx.com\tebis\Bauteile\FF2018\FF20186725\
cad=\\ffnas01.xxxxx.com\tebis\Bauteile\FF2018\FF20186725\ff20186725_messerhalter.cad
freigabedatum=2019-10-22 13:18:17
freigegeben_von=xxxx
status=100
blockiert=xxxx
fertig=2019/11/14 14:24:22
fertigsteller=xxxx
extra=
Alles anzeigen
Momentan befinden sich ungefähr 430 solche Einträge in der Datenbank(ini)
Dafür verwende ich normale Textdateien als Config-Dateien (*.cfg).
Struktur je Zeile:
sektion;Schlüssel=Wert;Schlüssel=Wert;Schlüssel=Wert;Schlüssel=Wert
Ist easy mit FileReadLine, FileWriteLine, StringSplit zu handeln.
An diese Möglichkeit hab ich auch schon gedacht.
Ist halt nur n großer Umbau
#cs ----------------------------------------------------------------------------
AutoIt Version: 3.3.6.1
Script Version: 2.2.2
Author: XXXX
Script Function:
Script verwaltet NC-Daten
Änderungen:
Baugruppen wurden entfernt.
verschiedene Konfigurationsdateien wurde eingebunden.
Verwendung eines gesonderten Arbeitsverzeichnisses möglich
Tnc-Remo wird über eine extra Konfigurations-Datei gesteuert.
Freigabe wurde eingebunden
Shellexecute wird über die Prozess-ID wieder geschlossen.
Globaler Programmstop über Konfigdatei eingebracht.
automatisches Ausführen eines Updates möglich.
Für Tebis wird der unc-Pfad in einen Laufwerksbuchstaben übersetzt.
Unterstütz Bauteilefreigabe für meherere Projekte
User-Stati und Adminfunktionen eingebracht (1 normaler User, 7 Poweruser, 77 Admin)
Letzte Freigabeprojektnummer wird unter eigene Dokumente gespeichert und vorgeschlagen.
0-Bug entfert.
Leere Datenbank führt nicht mehr zum Absturz
Datenbanksicherung eingebaut.
Fensterpositionen werden in der Userconf gespeichert.
Status 25% und 75% eingebracht
Traymenü eingebaut.
NCDM unterstützt jetzt DragnDrop
Breite auf 1010 geändert
Ablauf beschleunigt (zB. wird "Projekt" nicht mehr extra in die Freigabe geschrieben)
Geschwindigkeit beim Aktualisieren wird mitgelogt (userconf).
Bei der Freigabe wird nun im Hauptfenster der Projektfilter auf das Freigabeproj. gesetzt.
Positionsfehler beim Schließen in der Taskleiste behoben
Bei Freigabe wird nun eine Liste der letzten 10 Projekte zur Auswahl angeboten.
Zusätzliche Bauteile können angegeben werden.
CAD-Datei kann verknüpft werden.
Beim Aufruf der Benutzerkonfig wird jetzt das Hauptprogramm beendet.
#ce ----------------------------------------------------------------------------
#include <GUIListBox.au3>
#include <GuiConstantsEx.au3>
#include <array.au3>
#Include <File.au3>
#Include <Date.au3>
#include <EditConstants.au3>
#Include <GuiListView.au3>
#include <WindowsConstants.au3>
#include <StaticConstants.au3>
#include <WinAPI.au3>
Global $version="NC-Daten-Manager 2018 (c) XXXX"
global $conf=@ScriptDir&"\ncdm.conf"
if not FileExists($conf) Then
IniWrite($conf,"main","workdir",@ScriptDir&"\Workdir")
IniWrite($conf,"main","status","1")
IniWrite($conf,"main","wartung","Der NC-Daten-Manager ist wegen Wartungsarbeiten kurzzeitig nicht verfügbar.")
IniWrite($conf,"main","DB-Sicherung",@ScriptDir&"\Workdir\")
IniWrite($conf,"extra","pfad","0")
IniWrite($conf,"extra","status","0")
IniWrite($conf,"Tebiskonvert","\\ffnas01\tebis","T:")
IniWrite($conf,@username,"status","7")
EndIf
global $userstatus=IniRead($conf,@UserName,"status","1")
global $workdir=IniRead($conf,"main","workdir",@scriptdir)
global $db=$workdir&"\ncdm.db"
global $log=$workdir&"\ncdm.log"
global $tempdir=$workdir&"\nc_temp"
global $userconf=@MyDocumentsDir&"\ncdmuser.txt"
Global $dbsicherung=IniRead($conf,"main","db-sicherung",@ScriptDir&"\Workdir\")&"ncdm_"&@YEAR&"-"&@MON&"-"&@MDAY&".db"
Global $pro="*"
if not FileExists($tempdir) then DirCreate($tempdir)
FileCopy($db,$dbsicherung,8)
if not FileExists($db) then
If Not _FileCreate($db) Then
MsgBox($MB_SYSTEMMODAL, "Error",$db&" konnte nicht erstellt werden.")
_exit("Datenbankfehler")
EndIf
EndIf
_wartung()
if $cmdline[0]>0 then _freigabe ($cmdline)
If WinExists($version) Then
WinActivate($version)
Exit
EndIf
global $remoconf=$workdir&"\tncremo.txt"
if not FileExists($remoconf) Then
IniWrite($remoconf,@ComputerName,"Pfad","C:\Program Files (x86)\HEIDENHAIN\TNCremo\TNCremo.exe")
EndIf
_FileWriteLog($log,"ncdm gestartet "&@ComputerName&"/"&@username,1)
_wartung ()
_extra ()
;~ erstellen des Traymenüs -------------------------------------------
$remobtn=TrayCreateItem("TNC-Remo-Pfad-ändern")
$userconfbtn=TrayCreateItem("Benutzerkonfiguration")
TrayCreateItem("")
$confbtn=TrayCreateItem("Hauptkonfiguration")
$dbbtn=TrayCreateItem("Datenbank")
$logbtn=TrayCreateItem("Verlauf")
TrayCreateItem("")
$exit = TrayCreateItem("Exit")
if $userstatus<77 then
TrayItemSetState($confbtn, 128)
TrayItemSetState($dbbtn, 128)
TrayItemSetState($logbtn, 128)
endif
Opt("TrayMenuMode",1)
;~ erstellen der Gui ----------------------------------------------------------------
$xpos=iniread($userconf,$version,"xpos",100)
$ypos=iniread($userconf,$version,"ypos",100)
$main=GUICreate($version,1010,600,$xpos,$ypos, -1, $WS_EX_ACCEPTFILES )
GUISetStyle(BitOR($WS_MAXIMIZEBOX,$WS_MINIMIZEBOX,$WS_SIZEBOX,$WS_THICKFRAME,$WS_SYSMENU,$WS_CAPTION,$WS_OVERLAPPEDWINDOW,$WS_TILEDWINDOW,$WS_POPUP,$WS_POPUPWINDOW,$WS_GROUP,$WS_TABSTOP,$WS_BORDER,$WS_CLIPSIBLINGS))
GUICtrlCreateLabel("Projekt",250,10,100,20)
GUICtrlCreateLabel("Zeichnungsnummer/Maschine",10,10,200,20)
GUICtrlCreateLabel("Objekte:",850,10,100,20)
GUICtrlCreateLabel("(Stunden:)",850,35,100,20)
global $zeichnung_input=GUICtrlCreateInput("*",10,35,200,20)
global $Projekt_input=GUICtrlCreateInput($pro,250,35,200,20)
global $laufzeit_input=GUICtrlCreateInput("0",940,35,50,20,$ES_READONLY)
global $objekt_input=GUICtrlCreateInput("0",940,10,50,20,$ES_READONLY)
$akt=GUICtrlCreateButton("aktualisieren",580,35,150,20)
$ausbl=GUICtrlCreateCheckbox(" fertige ausblenden",580,10,120,20)
GUICtrlSetState($ausbl,$GUI_CHECKED )
GUICtrlSetState(-1, 1)
$listview = GUICtrlCreateListView("", 10, 70, 980, 515)
_GUICtrlListView_AddColumn($ListView, "Dokumentationen", 350)
_GUICtrlListView_AddColumn($ListView, "Status", 60)
_GUICtrlListView_AddColumn($ListView, "Fertigsteller", 100)
_GUICtrlListView_AddColumn($ListView, "Projekt", 100)
_GUICtrlListView_AddColumn($ListView, "Anzahl", 50)
_GUICtrlListView_AddColumn($ListView, "Minuten", 60)
_GUICtrlListView_AddColumn($ListView, "Freigegeben", 120)
_GUICtrlListView_AddColumn($ListView, "Bereitsteller", 90)
_GUICtrlListView_RegisterSortCallBack($ListView)
_bereinigung()
$Context = GUICtrlCreateContextMenu($listview)
$docopen = GUICtrlCreateMenuItem("Dokumentation öffnen", $Context)
$progsend = GUICtrlCreateMenuItem("Programme übertragen", $Context)
GUICtrlCreateMenuItem("", $Context)
$status = GUICtrlCreateMenu("Fertigungsstatus", $Context)
$0p = GUICtrlCreateMenuItem("0%", $status)
$10p = GUICtrlCreateMenuItem("10%", $status)
$20p = GUICtrlCreateMenuItem("20%", $status)
$25p = GUICtrlCreateMenuItem("25%", $status)
$30p = GUICtrlCreateMenuItem("30%", $status)
$40p = GUICtrlCreateMenuItem("40%", $status)
$50p = GUICtrlCreateMenuItem("50%", $status)
$60p = GUICtrlCreateMenuItem("60%", $status)
$70p = GUICtrlCreateMenuItem("70%", $status)
$75p = GUICtrlCreateMenuItem("75%", $status)
$80p = GUICtrlCreateMenuItem("80%", $status)
$90p = GUICtrlCreateMenuItem("90%", $status)
$100p = GUICtrlCreateMenuItem("100% (fertig)", $status)
GUICtrlCreateMenuItem("", $Context)
$fdir = GUICtrlCreateMenuItem("Verzeichnis öffnen", $Context)
$fcad = GUICtrlCreateMenuItem("CAD öffnen", $Context)
GUICtrlCreateMenuItem("", $Context)
$fchange = GUICtrlCreateMenuItem("Freigabe ändern", $Context)
$fdelete = GUICtrlCreateMenuItem("Freigabe löschen", $Context)
if $userstatus<2 then
GUICtrlSetState($fdir,128)
EndIf
if $userstatus<7 then
GUICtrlSetState($fchange,128)
GUICtrlSetState($fdelete,128)
EndIf
GUICtrlSetData($projekt_input,$pro)
GUICtrlSetState($listview, $GUI_DROPACCEPTED)
GUISetState(@SW_SHOW)
_list()
;~ --------------------------------------------------------------------------------------
HotKeySet("^!d","_delete")
HotKeySet("^!a","_aenderung")
$stat_chkbox=GUICtrlRead($ausbl)
Global $starttime = TimerInit()
Local $projekt, $zeichnung
while 1 ;~ Hauptschleife
if $Projekt <> GUICtrlRead($Projekt_input) then _list()
if $zeichnung <> GUICtrlRead($zeichnung_input) then _list()
$msg = GUIGetMsg()
Select
Case $msg = $GUI_EVENT_CLOSE
_possave($main,$version)
_exit ("Standard-Exit")
Case $msg = $GUI_EVENT_DROPPED
if @GUI_DropId = $listview Then _freigabe(@GUI_DragFile)
_list()
Case $msg = $docopen
_open()
Case $msg = $progsend
_programme()
Case $msg = $akt
$tt=TimerInit()
_list ()
IniWrite($userconf,@username,"Prozessdauer",TimerDiff($tt))
Case $msg=$listview
_list ()
_GUICtrlListView_SortItems($ListView, GUICtrlGetState($ListView))
Case $msg = $fdir
_open_ex ()
Case $msg = $fcad
_opencad ()
Case $msg = $fchange
_aenderung ()
Case $msg = $fdelete
_delete()
Case $msg = $0p
_erledigt (0)
Case $msg = $10p
_erledigt (10)
Case $msg = $20p
_erledigt (20)
Case $msg = $25p
_erledigt (25)
Case $msg = $30p
_erledigt (30)
Case $msg = $40p
_erledigt (40)
Case $msg = $50p
_erledigt (50)
Case $msg = $60p
_erledigt (60)
Case $msg = $70p
_erledigt (70)
Case $msg = $75p
_erledigt (75)
Case $msg = $80p
_erledigt (80)
Case $msg = $90p
_erledigt (90)
Case $msg = $100p
_erledigt (100)
EndSelect
$msg = TrayGetMsg ()
Select
Case $msg = $remobtn
_remo ()
Case $msg = $confbtn
ShellExecute($conf)
Case $msg = $logbtn
ShellExecute($log)
Case $msg = $dbbtn
ShellExecute($db)
Case $msg = $userconfbtn
ShellExecute($userconf)
_exit ("Benutzerkonfig geöffnet")
Case $msg = $exit
_exit ("Tray-Exit")
EndSelect
if TimerDiff($starttime) >10000 Then
_wartung ()
_extra ()
Global $starttime = TimerInit()
EndIf
if GUICtrlRead($ausbl)<>$stat_chkbox Then
_list ()
$stat_chkbox=GUICtrlRead($ausbl)
EndIf
sleep(2)
WEnd
_GUICtrlListView_UnRegisterSortCallBack($ListView)
_exit ("Standard-Exit")
;~ Funktionen --------------------------------------------------------------------------------------------------
func _list() ; Funktion listet die relevanten Daten
_GUICtrlListView_DeleteAllItems($listview)
$sektionen=IniReadSectionNames($db)
if @error>0 then return
Global $Projekt=GUICtrlRead($Projekt_input)
global $zeichnung=GUICtrlRead($zeichnung_input)
Local $bauteile[1]
$gesamtzeit=0
$gesamtzahl=0
$fact=1
for $x=1 to $sektionen[0]
$fname=StringSplit($sektionen[$x],"___projekt_",1)
$dbz=$fname[1]
$dbp=$fname[2]
$fertig=IniRead($db,$sektionen[$x],"status","0")
$dbx=IniRead($db,$sektionen[$x],"extra","")
if StringInStr($dbp&"*",$projekt) and StringInStr($dbz&$dbx&"*",$zeichnung) Then
if $fertig<100 or GUICtrlRead($ausbl)=4 then
$rx=1-$fertig/100
$stueckzahl=IniRead($db,$sektionen[$x],"stueckzahl","1")
$gesamtzeit+=IniRead($db,$sektionen[$x],"laufzeit","")*$stueckzahl*$rx
$gesamtzahl+=1
$fertigmelder=IniRead($db,$sektionen[$x],"fertigsteller","")
$dateiname=$fname[1]
GUICtrlCreateListViewItem($dateiname&"|"&$fertig&"%|"&$fertigmelder&"|"&$dbp&"|"&$stueckzahl&"|"&round(IniRead($db,$sektionen[$x],"laufzeit",""))&"|"&IniRead($db,$sektionen[$x],"freigabedatum","")&"|"&IniRead($db,$sektionen[$x],"freigegeben_von",""),$listview )
endif
EndIf
next
GUICtrlSetData($objekt_input,$gesamtzahl)
GUICtrlSetData($laufzeit_input,round($gesamtzeit/60))
EndFunc
func _open() ; öffnet das markierte Dokument
$fname=GUICtrlRead(GUICtrlRead($listview))
if not $fname then Return
$fname=StringSplit($fname,"|",1)
$freigabe=$fname[1]&"___projekt_"&$fname[4]
$quellpfad=IniRead($db,$freigabe,"Quellpfad","gaudi")
$datei=$quellpfad&$fname[1]
global $kopie=$tempdir&"\"&$fname[1]
$blocker=IniRead($db,$freigabe,"blockiert","anderem Nutzer")
$f=0
if FileExists($datei) then
if not FileExists($kopie) then FileCopy($datei,$kopie)
if FileGetTime($datei,0,1)>FileGetTime($kopie,0,1) Then $f=1
if FileGetTime($datei,1,1)>FileGetTime($kopie,0,1) Then $f=1
if FileGetTime($datei,1,1)>FileGetTime($kopie,1,1) Then $f=1
if $f=1 Then
if FileCopy($datei,$kopie,1)<1 Then
MsgBox(16,$version&" Fehler!","Datei wird von "&$blocker&" blockiert")
else
MsgBox(64,$version&" Wichtig!","Dokumentation wurde aktualisiert. Programme müssen neu eingespielt werden!!!")
IniWrite($db,$freigabe,"blockiert",@username)
ShellExecute($kopie)
_programme ()
endif
else
IniWrite($db,$freigabe,"blockiert",@username)
ShellExecute($kopie)
endif
else
MsgBox(48,$version,"Verknüpfung zu "&$datei&" ist nicht vorhanden.",5)
EndIf
EndFunc
func _opencad() ; öffnet die entsprechende CAD-Datei
$fname=GUICtrlRead(GUICtrlRead($listview))
if not $fname then Return
$fname=StringSplit($fname,"|",1)
$freigabe=$fname[1]&"___projekt_"&$fname[4]
$datei=IniRead($db,$freigabe,"cad","")
if FileExists($datei) then
dim $alias
$alias=IniReadSection($conf,"tebiskonvert")
for $x=1 to $alias[0][0]
$datei=StringReplace($datei,$alias[$x][0],$alias[$x][1])
next
ShellExecute($datei)
else
MsgBox(16,$version&" Fehler!","keine Datei verknüpft")
EndIf
EndFunc
Func _programme () ; ermögllicht das Kopieren der NC-Programme
$fname=GUICtrlRead(GUICtrlRead($listview))
if not $fname then Return
$fname=StringSplit($fname,"|",1)
$freigabe=$fname[1]&"___projekt_"&$fname[4]
$quellpfad=IniRead($db,$freigabe,"Quellpfad","")
if $quellpfad="" then
MsgBox(16,$version&" Fehler!","Verknüpfung zu "&$fname[1]&" ist nicht vorhanden.",30)
else
$tncremo=iniread($remoconf,@computername,"pfad","")
if FileExists($tncremo) then
$befehl=$tncremo&" "&Chr(34)&"-W"&$quellpfad&Chr(34)
run($befehl)
Else
MsgBox(16,$version&" Fehler!","TncRemo wurde nicht gefunden")
FileOpenDialog("Programme",$quellpfad,"Programme (*.h;*.nc)",5)
endif
endif
EndFunc
Func _erledigt ($s) ; meldet Bearbeitungen fertig
$fname=GUICtrlRead(GUICtrlRead($listview))
if not $fname then Return
$fname=StringSplit($fname,"|",1)
$freigabe=$fname[1]&"___projekt_"&$fname[4]
IniWrite($db,$freigabe,"status",$s)
if $s=100 then
IniWrite($db,$freigabe,"fertig",@YEAR&"/"&@MON&"/"&@MDAY&" "&@HOUR&":"&@MIN&":"&@SEC)
IniWrite($db,$freigabe,"fertigsteller",@username)
Else
IniWrite($db,$freigabe,"fertig","")
IniWrite($db,$freigabe,"fertigsteller",@username)
EndIf
_FileWriteLog($log,$freigabe&" Status auf "&$s&"% gesetzt durch "&@ComputerName&"/"&@username,1)
if FileExists(@ScriptDir&"\exceltab.exe") then run(@ScriptDir&"\exceltab.exe")
_list ()
EndFunc
func _bereinigung () ; bereinigt alte erledigte Freigaben
$sektionen=IniReadSectionNames($db)
if @error>0 then return
for $x=1 to $sektionen[0]
$diff=_DateDiff( 'w',IniRead($db,$sektionen[$x],"fertig","0"),_NowCalc())
$status=IniRead($db,$sektionen[$x],"status","0")
if $diff>1 and $status=100 and IniRead($db,$sektionen[$x],"schreibschutz","0")=0 Then
IniDelete($db,$sektionen[$x])
FileDelete($tempdir&"\"&$sektionen[$x]) ; ----------------------------- Optional
_FileWriteLog($log,$sektionen[$x]&" gelöscht durch System",1)
EndIf
next
EndFunc
func _open_ex() ; öffnet das Arbeitsverzeichnis
$fname=GUICtrlRead(GUICtrlRead($listview))
if not $fname then Return
$fname=StringSplit($fname,"|",1)
$freigabe=$fname[1]&"___projekt_"&$fname[4]
$quellpfad=IniRead($db,$freigabe,"Quellpfad","")
$datei=$quellpfad&$fname[1]
if FileExists($quellpfad) then
$alias=IniReadSection($conf,"tebiskonvert")
for $x=1 to $alias[0][0]
$quellpfad=StringReplace($quellpfad,$alias[$x][0],$alias[$x][1])
next
Run("explorer "&$quellpfad)
else
MsgBox(16,$version&" Fehler!","Verknüpfung zu "&$datei&" ist nicht vorhanden.",5)
EndIf
EndFunc
Func _delete () ; löscht Einträge
$fname=GUICtrlRead(GUICtrlRead($listview))
if not $fname then Return
if $userstatus<7 then Return
$fname=StringSplit($fname,"|",1)
$freigabe=$fname[1]&"___projekt_"&$fname[4]
if MsgBox(36,@ScriptName,"Wollen sie den Eintrag "&$fname[1]&" wirklich entfernen?")=6 then
inidelete($db,$freigabe)
if IniRead($db,$freigabe,"projekt","err")<>"err" then
MsgBox(16,"Fehler",$fname[1]&" konnte nicht gelöscht werden!",5)
Return
EndIf
FileDelete($tempdir&"\"&$fname[1])
_FileWriteLog($log,$freigabe&" gelöscht durch "&@ComputerName&"/"&@username,1)
if FileExists(@ScriptDir&"\exceltab.exe") then run(@ScriptDir&"\exceltab.exe")
_list ()
EndIf
EndFunc
func _wartung ()
if IniRead($conf,"main","status","1")=0 Then
$wartungstext=IniRead($conf,"main","wartung","0")
if $wartungstext <>"" then MsgBox(16,$version,$wartungstext,3)
Exit(0)
EndIf
EndFunc
func _extra ()
if IniRead($conf,"extra","status","0")=1 Then
$extra=IniRead($conf,"extra","pfad","0")
if FileExists($extra) Then
Local $sDrive = "", $sDir = "", $sFilename = "", $sExtension = ""
Local $aPathSplit = _PathSplit($extra, $sDrive, $sDir, $sFilename, $sExtension)
Global $extrapn=$sFilename&$sExtension
if not ProcessExists($extrapn) then
run($extra)
endif
EndIf
EndIf
EndFunc
;~ Func _open_userconf ()
;~ ShellExecute($userconf)
;~ EndFunc
Func _freigabe ($input)
if $userstatus<7 then Return
if not IsArray($input) then
local $eingang[2]=["1",$input]
Else
$Eingang=$input
endif
;~ _arraydisplay($eingang)
for $x=1 to $eingang[0]
Dim $upfad, $szDrive, $szDir, $szFName, $szExt, $string, $cadfiles
$upfad=_PathSplit($eingang[$x], $szDrive, $szDir, $szFName, $szExt)
$dateiname=$upfad[3]&$upfad[4]
$stueck = 2
$laufzeit = 0
$projekt = ""
$extra=""
$cad="--- bitte auswählen ---"
if DriveMapGet($upfad[1])="" then
$quellpfad=$upfad[1]&$upfad[2]
else
$quellpfad=DriveMapGet($upfad[1])&$upfad[2]
EndIf
$status="Freigabe"
;~ MsgBox(0,"","dateiname= "&$dateiname&@crlf&"Projekt= "&$projekt&@crlf&"Stückzahl= "&$stueck&@crlf&"Laufzeit= "&$laufzeit&@crlf&"Pfad= "&$quellpfad)
$cadfiles=_FileListToArray($quellpfad,"*.cad")
if $cadfiles[0]=1 then $cad=$quellpfad&$cadfiles[1]
_dbaenderung ($status,$dateiname,$quellpfad,$projekt,$stueck,$laufzeit,$extra,$cad)
Next
ControlSetText($version, "", "Edit2", $pro)
;~ if WinExists($version) then _list()
EndFunc
Func _aenderung ()
if $userstatus<7 then Return
$fname=GUICtrlRead(GUICtrlRead($listview))
if not $fname then Return
$fname=StringSplit($fname,"|",1)
$freigabe=$fname[1]&"___projekt_"&$fname[4]
$dateiname=$fname[1]
$stueck = IniRead($db,$freigabe,"stueckzahl","0")
$laufzeit = IniRead($db,$freigabe,"laufzeit","0")
$projekt = $fname[4]
$quellpfad=IniRead($db,$freigabe,"quellpfad","")
$extra=IniRead($db,$freigabe,"extra","")
$cad=IniRead($db,$freigabe,"cad","")
;~ MsgBox(0,"","dateiname= "&$dateiname&@crlf&"Projekt= "&$projekt&@crlf&"Stückzahl= "&$stueck&@crlf&"Laufzeit= "&$laufzeit&@crlf&"Pfad= "&$quellpfad)
_dbaenderung("Aenderung",$dateiname,$quellpfad,$Projekt,$stueck,$laufzeit,$extra,$cad)
_list ()
EndFunc
Func _dbaenderung ($status,$dateiname,$quellpfad,$projekt,$stueck,$laufzeit,$extra,$cad)
;~ ConsoleWrite($status)
$pid=ShellExecute($quellpfad&$dateiname)
$xpos=iniread($userconf,$status,"xpos",@DesktopWidth/2-150)
$ypos=iniread($userconf,$status,"ypos",@DesktopHeight/2-150)
;~ MsgBox(0,"","Status= "&$status&@crlf&"dateiname= "&$dateiname&@crlf&"Projekt= "&$projekt&@crlf&"Stückzahl= "&$stueck&@crlf&"Laufzeit= "&$laufzeit&@crlf&"Pfad= "&$quellpfad)
$dialog = GUICreate($Status, 315, 230, $xpos,$ypos, -1, BitOR($WS_EX_TOPMOST,$WS_EX_WINDOWEDGE))
$lbl1 = GUICtrlCreateLabel($dateiname, 15, 15, 285, 20)
$lbl2 = GUICtrlCreateLabel("Projektnummer", 15, 40, 100, 20)
$lbl4 = GUICtrlCreateLabel("Stückzahl", 15, 90, 100, 20)
$lbl5 = GUICtrlCreateLabel("Laufzeit in Minuten", 15, 65, 100, 20)
$lbl6 = GUICtrlCreateLabel("Zus. Bauteile", 15, 115, 100, 20)
global $i_laufzeit = GUICtrlCreateInput($laufzeit, 150,65, 150, 20, BitOR($ES_AUTOHSCROLL,$ES_NUMBER))
global $i_stueckzahl = GUICtrlCreateInput($stueck, 150, 90, 150, 20, BitOR($ES_AUTOHSCROLL,$ES_NUMBER))
global $i_cad = GUICtrlCreateInput($cad, 100, 140, 200, 20)
global $i_pfad = GUICtrlCreateInput($quellpfad, 15, 175, 285, 20)
global $i_extra = GUICtrlCreateInput($extra, 150, 115, 150, 20)
global $i_projekt = GUICtrlCreateCombo("", 150, 40, 150, 20)
$lprojekt=IniRead($userconf,@username,"projekt","")
if StringInStr($lprojekt,$projekt) Then
GUICtrlSetData($i_projekt, $lprojekt, $projekt)
Else
GUICtrlSetData($i_projekt, $projekt&"|"&$lprojekt, $projekt)
EndIf
$fileb = GUICtrlCreateButton("CAD-Auswahl", 15, 140, 80, 20, $WS_GROUP)
$OK = GUICtrlCreateButton("bestätigen", 15, 205, 120, 20, $WS_GROUP)
$Abbrechen = GUICtrlCreateButton("abbrechen", 180, 205, 120, 20, $WS_GROUP)
GUISetState(@SW_SHOW)
While 1
$Freigabe=$dateiname&"___projekt_"&GUICtrlRead($i_projekt)
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
ExitLoop
Case $fileb
ConsoleWrite("XXX"&@crlf)
$cadfile=FileOpenDialog("CAD-File auswählen",$quellpfad,"CAD-files(*.cad)")
GUICtrlSetData($i_cad,$cadfile,"")
Case $OK
if GUICtrlRead($i_projekt)="" Then
MsgBox(16,@scriptname,"Projektnummer fehlt!",3)
else
$Freigabe=$dateiname&"___projekt_"&GUICtrlRead($i_projekt)
$pro=GUICtrlRead($i_projekt)
if IniRead($db,$Freigabe,"quellpfad","") <>"" then
if MsgBox(36,@scriptname,$dateiname&" wurde bereits freigegeben!"&@CRLF& "Wollen sie die Freigabe aktualisieren?") <> 6 Then ExitLoop
endif
if $projekt<>GUICtrlRead($i_projekt) Then IniRenameSection($db,$dateiname&"___projekt_"&$projekt,$Freigabe)
$aktionen=5
$err=IniWrite($db,$Freigabe,"laufzeit",GUICtrlRead($i_laufzeit))
$err+=IniWrite($db,$Freigabe,"stueckzahl",GUICtrlRead($i_stueckzahl))
$err+=IniWrite($db,$Freigabe,"Quellpfad",GUICtrlRead($i_pfad))
$err+=IniWrite($db,$Freigabe,"extra",GUICtrlRead($i_extra))
$err+=IniWrite($db,$Freigabe,"cad",GUICtrlRead($i_cad))
if $status="Freigabe" then
$err+=IniWrite($db,$Freigabe,"freigabedatum",@YEAR&"-"&@MON&"-"&@MDAY&" "&@HOUR&":"&@MIN&":"&@SEC)
$err+=IniWrite($db,$Freigabe,"freigegeben_von",@UserName)
$err+=IniWrite($db,$Freigabe,"status","0")
$aktionen=7
Global $pro=GUICtrlRead($i_projekt)
EndIf
;~ MsgBox(16,@scriptname&" test","Ziel erreicht")
if $err<$aktionen then
MsgBox(16,@scriptname&" Fehler","kein Zugriff auf Datenbank!")
ExitLoop
EndIf
if StringInStr($lprojekt,GUICtrlRead($i_projekt)) Then
$lprojekt=StringReplace($lprojekt,"|"&GUICtrlRead($i_projekt),"")
endif
$lprojekt=StringLeft ($lprojekt, 130)
IniWrite($userconf,@username,"projekt",GUICtrlRead($i_projekt)&"|"&$lprojekt)
if $status="Freigabe" then
_FileWriteLog($log,$freigabe&" Freigegeben durch "&@ComputerName&"/"&@username,1)
Else
_FileWriteLog($log,$freigabe&" Freigabe geändert durch "&@ComputerName&"/"&@username,1)
EndIf
ExitLoop
Endif
Case $Abbrechen
ExitLoop
EndSwitch
WEnd
ProcessClose($pid)
_possave($dialog,$status)
GUIDelete($dialog)
EndFunc
Func _remo ()
$pfad_alt=IniRead($remoconf,@computername,"pfad","")
Local $pfad_neu = FileOpenDialog("NC-REMO-Exe auswählen", @ProgramFilesDir & "\", "Anwendung (*.exe)", $FD_FILEMUSTEXIST,"TNCremo")
if @error=0 then
IniWrite($remoconf,@computername,"pfad",$pfad_neu)
_FileWriteLog($log,"TNC-Remo-Pfad auf "&$pfad_neu&" geändert durch "&@ComputerName&"/"&@username,1)
EndIf
EndFunc
Func _exit ($fehler)
_FileWriteLog($log,"ncdm beendet "&@ComputerName&"/"&@username&" "&$fehler,1)
Exit(0)
EndFunc
Func _possave ($winh,$win)
$tRET = _WinAPI_GetWindowPlacement($winh)
IniWrite($userconf,$win,"xpos",DllStructGetData($tRET, "rcNormalPosition", 1))
IniWrite($userconf,$win,"ypos",DllStructGetData($tRET, "rcNormalPosition", 2))
EndFunc
Alles anzeigen
Das würde mein Script aber ganz schön verkomplizieren
Vielen Dank Jungs,
Ich glaube, das erklärt meinen Bug.
Meine Ini ist 151kb groß, funktioniert aber noch.
Doch mit ein paar Daten mehr ists vorbei. Dann werden die Letzten nicht mehr gelesen.
Jetzt darf ich mir was zur Datenreduzierung ausdenken müssen, oder ein anderes Konzept verwenden.
Gibt es bei der o.g. Funktion eine Begrenzung der Anzahl gefundener Sektionen
Ermitteln mit _WinAPI_GetWindowPlacement bzw. setzen mit _WinAPI_SetWindowPlacement
Vielen Dank, das ist noch eleganter.
Gelöst
Super Lösung danke!
Hallo Superdau
Das liegt daran, dass du die Fensterposition erst ausliest, wenn das Fenster bereits minimiert ist. Ich weiß nicht, wie man da die letzte Postion zuvor auslesen kann. Daher würde ich die Position immer speichern, wenn sich die Position verändert. In die Ini brauchst du das ja nur speichern, wenn das Fenster geschlossen wird. Am besten nutzt du WM_MOVE.
C Alles anzeigen#include <GUIConstantsEx.au3> #include <WindowsConstants.au3> Global $hGUI = GUICreate("Test") GUISetState() GUIRegisterMsg($WM_MOVE, "_WM_MOVE") While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE Exit EndSwitch WEnd Func _WM_MOVE($hWnd, $iMsg, $wParam, $lParam) $aPos = WinGetPos($hGUI) If IsArray($aPos) Then If $aPos[0] <> -32000 Then ConsoleWrite($aPos[0] & " " & $aPos[1] & @CRLF) EndIf EndIf Return $GUI_RUNDEFMSG EndFunc ;==>_WM_MOVE
Habe folgendes Problem: beim schließen meines Fensters funktioniert das Positionsspeichern, doch beim Minimieren nicht!
Ich komm nicht drauf warum
Hat jemand eine Idee?
Select
Case $msg = $GUI_EVENT_CLOSE
_possave($version)
_exit ("Standard-Exit")
Case $msg = $GUI_EVENT_MINIMIZE
_possave ($version)
.
.
.
Func _possave ($win)
$pos=WinGetPos($win)
if $pos[0]>0 then
IniWrite($userconf,$win,"xpos",$pos[0])
IniWrite($userconf,$win,"ypos",$pos[1])
EndIf
EndFunc
Alles anzeigen
hab mir grad die neueste stabile Autoitversion installiert, und siehe da, es funzt
Servus zusammen,
mich quält der folgende code:
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
GUICreate("test", 800, 400)
$hListView = GUICtrlCreateListView("", 10, 30, 780, 300,-1 )
_GUICtrlListView_InsertColumn($hListView, 0, "Zahlen", 100)
_GUICtrlListView_AddItem($hListView, "1", 0)
_GUICtrlListView_AddItem($hListView, "2", 1)
_GUICtrlListView_AddItem($hListView, "3", 2)
GUISetState()
_GUICtrlListView_RegisterSortCallBack($hListView)
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
ExitLoop
Case $hListView
_GUICtrlListView_SortItems($hListView, GUICtrlGetState($hListView))
EndSwitch
WEnd
_GUICtrlListView_UnRegisterSortCallBack($hListView)
GUIDelete()
Exit 0
Alles anzeigen
ich krieg die Sortierung einfach nicht zum laufen.
hat jemand vielleicht einen kleinen Tip für mich, wo ich den bösen Hund begraben haben könnte?
wär euch sehr dankbar.