Code : Tout sélectionner
#include <WindowsConstants.au3>
#include <GuiConstantsEx.au3>
#include <GuiListView.au3>
#include <SQLite.au3>
;#include <SQLite.dll.au3>
#include <Array.au3>
Opt("GuiOnEventMode", 1)
; initialisation =============================
Global $details_gui, $details_LV, $modif_input, $modif_btn, $delete_btn
Global $modif_col, $numero, $main_item, $lastclicked = 0, $var = 0
Global $base = @ScriptDir & "\genea5.sqlite"
Local $array, $iRows, $iColumns, $iRval, $hQuery
_SQLite_Startup ()
_SQLite_Open($base)
;==================== création de la base =====================
If FileRead($base) = "" Then
SplashTextOn ("", "Création de la base...", 280, 55, -1, -1, 49)
_SQLite_Exec (-1, "CREATE TABLE IF NOT EXISTS liste " & _
"(id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, " & _
"date VARCHAR(16), inc1, inc2, inc3, " & _
"nom VARCHAR(30), prenom VARCHAR(20), sexe CHAR(1), inc4, " & _
"nompapa VARCHAR(30), prenompapa VARCHAR(20), infopapa, inc5, " & _
"nommaman VARCHAR(30), prenommaman VARCHAR(20), inc6, inc7, " & _
"inc8, inc9, inc10, inc11, preinc VARCHAR(20), info1, info2, inc12, inc13);")
$file = FileOpen(@ScriptDir & "\genea.txt", 0) ; fichier texte
_SQLite_Exec(-1, "Begin;")
While 1
$line = FileReadLine($file)
If @error = -1 Then ExitLoop
$a = _TriLigne($line)
$string = ""
For $i = 1 to $a[0]-1
$string &= _SQLite_FastEscape($a[$i]) & ", "
Next
$string &= _SQLite_FastEscape($a[$a[0]])
_SQLite_Exec(-1, "INSERT INTO liste (date, inc1, inc2, inc3, nom, prenom, sexe, inc4, " & _
"nompapa, prenompapa, infopapa, inc5, nommaman, prenommaman, inc6, inc7, " & _
"inc8, inc9, inc10, inc11, preinc, info1, info2, inc12, inc13) VALUES (" & $string & ");")
WEnd
_SQLite_Exec(-1, "Commit;")
FileClose($file)
SplashOff()
EndIf
;================ chargement ==============================
SplashTextOn ("", "Chargement ...", 280, 55, -1, -1, 49)
$gui = GuiCreate("genea", 600, 600)
GuiSetOnEvent(-3, "_Exit")
$listview = GuiCtrlCreateListview("n°|date|nom|papa|maman", 5, 5, 590, 550, -1, _
BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_GRIDLINES, $WS_EX_CLIENTEDGE))
GUICtrlSendMsg($listview, $LVM_SETCOLUMNWIDTH, 0, 40)
_SQLite_GetTable2d (-1, "SELECT id || '|' || date || '|' || nom || ' ' || prenom || '|' || nompapa || ' ' || prenompapa || '|' || " & _
"nommaman || ' ' || prenommaman FROM liste;", $array, $iRows, $iColumns)
For $i = 1 to UBound($array)-1
GUICtrlCreateListViewItem($array[$i][0], $listview)
Next
$menu = GUICtrlCreateContextMenu($listview)
$delete_menu = GUICtrlCreateMenuItem("Supprimer", $menu)
GuiCtrlSetOnEvent(-1, "_Modif")
$modif_menu = GUICtrlCreateMenuItem("Modifer", $menu)
GuiCtrlSetOnEvent(-1, "_Modif")
SplashOff()
GuiSetState()
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
While 1
Sleep(10)
Wend
;=====================================================
Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
Local $tNMHDR, $hWndFrom, $iCode
$tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
$hWndFrom = DllStructGetData($tNMHDR, "hWndFrom")
$iCode = DllStructGetData($tNMHDR, "Code")
$hListView = GuiCtrlGetHandle($listView)
$hdetails_LV = GuiCtrlGetHandle($details_LV)
Switch $hWndFrom
Case $hListView
Switch $iCode
Case $LVN_COLUMNCLICK
$tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam)
$colonne = DllStructGetData($tInfo, "SubItem")
If $colonne = $lastclicked Then
$var = not $var
Else
$var = 0
EndIf
$lastclicked = $colonne
_LVSort($colonne, $var)
Case $NM_DBLCLK
If $details_gui <> "" Then GuiDelete($details_gui)
Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
$main_item = DllStructGetData($tInfo, "Index")
Local $name = ControlListView($gui, "", $listview, "GetText", $main_item, 2)
$numero = ControlListView($gui, "", $listview, "GetText", $main_item, 0)
_ShowData($numero, $name)
EndSwitch
Case $hdetails_LV
Switch $iCode
Case $NM_CLICK
Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
Local $item = DllStructGetData($tInfo, "Index")
If $item = 0 Then
GUICtrlSetState($modif_input, $GUI_DISABLE)
GUICtrlSetState($modif_btn, $GUI_DISABLE)
Return
Else
GUICtrlSetState($modif_input, $GUI_ENABLE)
GUICtrlSetState($modif_btn, $GUI_ENABLE)
EndIf
Local $subitem_text = ControlListView($details_gui, "", $details_LV, "GetText", $item, 1)
$modif_col = ControlListView($details_gui, "", $details_LV, "GetText", $item, 0)
GuiCtrlSetData($modif_input, $subitem_text)
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NOTIFY
Func _LVSort($nColumn, $var)
Local $ar_tri, $iRows, $iColumns
Local $sort[2] = ["ASC", "DESC"]
Local $sens = $sort[int($var)]
Switch $nColumn
Case 0
$pattern = "id " & $sens
Case 1
$pattern = "date " & $sens
Case 2
$pattern = "nom " & $sens & ", prenom " & $sens
Case 3
$pattern = "nompapa " & $sens & ", prenompapa " & $sens
Case 4
$pattern = "nommaman " & $sens & ", prenommaman " & $sens
EndSwitch
SplashTextOn ("", "Chargement ...", 280, 55, -1, -1, 49)
Sleep(10)
_SQLite_GetTable2d (-1, "SELECT id || '|' || date || '|' || nom || ' ' || prenom || '|' || nompapa || ' ' || prenompapa || '|' || " & _
"nommaman || ' ' || prenommaman FROM liste " & _
"ORDER BY " & $pattern & ";", $ar_tri, $iRows, $iColumns)
_GUICtrlListView_DeleteAllItems($listview)
For $i = 1 to UBound($ar_tri)-1
GUICtrlCreateListViewItem($ar_tri[$i][0], $listview)
Next
SplashOff()
EndFunc
Func _ShowData($numero, $name)
Local $aResult, $hQuery, $iRows, $iColumns
_SQLite_GetTable(-1, "SELECT * FROM liste WHERE id='" & $numero &"';", $aResult, $iRows, $iColumns)
Local $n = (UBound($aResult)-1)/2
$details_gui = GuiCreate($name, 300, 360)
GuiSetOnEvent(-3, "_Close", $details_gui)
$details_LV = GuiCtrlCreateListview("col|details", 10, 10, 280, 280, -1, _
BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_GRIDLINES, $WS_EX_CLIENTEDGE))
GUICtrlSendMsg($details_LV, $LVM_SETCOLUMNWIDTH, 0, 90)
GUICtrlSendMsg($details_LV, $LVM_SETCOLUMNWIDTH, 1, 160)
For $i = 1 to $n
GUICtrlCreateListViewItem($aResult[$i] &"|"& $aResult[$i+$n], $details_LV)
Next
$modif_input = GuiCtrlCreateInput("", 10, 300, 200, 20)
$modif_btn = GuiCtrlCreateButton("Modifier", 220, 300, 70, 20)
GuiCtrlSetOnEvent(-1, "_Modif")
$delete_btn = GuiCtrlCreateButton("Supprimer la fiche n° " & $numero & " - " & $name, 5, 330, 290, 20)
GuiCtrlSetOnEvent(-1, "_Modif")
GuiSetState()
EndFunc
Func _Modif()
Switch @GUI_CtrlId
Case $modif_btn
Local $hQuery, $rows, $new_subitem_text = GuiCtrlRead($modif_input)
GUICtrlSetData(GuiCtrlRead($details_LV), "|" & $new_subitem_text)
_SQLite_Exec(-1, "UPDATE liste SET " & $modif_col & "=" & _SQLite_FastEscape($new_subitem_text) & _
" WHERE id=" & $numero & ";")
_SQlite_Query (-1, "SELECT id || '|' || date || '|' || nom || ' ' || prenom || '|' || nompapa || ' ' || prenompapa || '|' || " & _
"nommaman || ' ' || prenommaman FROM liste WHERE id=" & $numero & ";", $hQuery)
_SQLite_FetchData ($hQuery, $rows)
_SQLite_QueryFinalize($hQuery)
GUICtrlSetData(GuiCtrlRead($listview), $rows[0])
$new_nom = ControlListView($details_gui, "", $details_LV, "GetText", 5, 1)
$new_prenom = ControlListView($details_gui, "", $details_LV, "GetText", 6, 1)
WinSetTitle($details_gui, "", $new_nom & " " & $new_prenom)
Case $modif_menu
Local $selected = ControlListView($gui, "", $listview, "GetSelected")
Local $name = ControlListView($gui, "", $listview, "GetText", $selected, 2)
$numero = ControlListView($gui, "", $listview, "GetText", $selected, 0)
_ShowData($numero, $name)
Case $delete_btn
_SQLite_Exec(-1, "DELETE FROM liste WHERE id=" & $numero & ";")
_GUICtrlListView_DeleteItem($listview, $main_item)
_GUICtrlListView_SetItemFocused($listview, $main_item, false)
GuiDelete($details_gui)
Case $delete_menu
Local $selected = ControlListView($gui, "", $listview, "GetSelected")
$numero = Int(ControlListView($gui, "", $listview, "GetText", $selected, 0))
_SQLite_Exec(-1, "DELETE FROM liste WHERE id=" & $numero & ";")
_GUICtrlListView_DeleteItem($listview, $selected)
_GUICtrlListView_SetItemFocused($listview, $selected, false)
EndSwitch
EndFunc
Func _TriLigne($ligne)
$ligne = StringRegExpReplace($ligne, "/{2,}", "/")
Local $split = StringSplit($ligne, "|")
Local $date = StringSplit($split[1], "/")
$split[1] = $date[3] & " (" & $date[2] & " " & $date[1] & ")" ; date2
Return $split
EndFunc
Func _Exit()
_SQLite_Close ()
_SQLite_Shutdown ()
Exit
EndFunc
Func _Close()
GuiDelete(@GUI_WinHandle)
EndFunc