Без опису
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. Option Strict Off
  2. Imports System.IO
  3. Public Class 考勤打卡
  4. Dim RI As Integer = -1
  5. Dim SK As String = "要查找的 KEY"
  6. Dim Str As String = System.Windows.Forms.Application.StartupPath
  7. DIM 對話框(33) As String
  8. Dim 時段(6) As String
  9. Private Sub Set_語言()
  10. 語言_dgv.DataSource = Nothing
  11. 語言_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing
  12. 語言_dgv.ColumnHeadersHeight = 25 : 語言_dgv.AllowUserToAddRows = False
  13. For i As Integer = 0 To 語言_dgv.Rows.Count - 1 : 語言_dgv.Rows.RemoveAt(0) : Next
  14. If File.Exists(Str + "\LANGUAGE_FILE.csv") Then
  15. Dim filereader = My.Computer.FileSystem.OpenTextFileReader(Str + "\LANGUAGE_FILE.csv", System.Text.Encoding.Default)
  16. Dim line As String = filereader.ReadLine()
  17. While Not (line Is Nothing)
  18. line = filereader.ReadLine()
  19. If line <> Nothing Then
  20. line = line.Replace("""", "")
  21. If Strings.Left(line, 4) = "G000" Or Strings.Left(line, 4) = 介面 Then
  22. If 系統語言 = "繁體中文" Then
  23. If Strings.Mid(line, 10, 2) = "CH" Then : 語言_dgv.Rows.Insert(0)
  24. 語言_dgv.Rows(0).Cells(0).Value = Strings.Left(line, 11)
  25. If Strings.Mid(line, 13, 300).EndsWith(",") Then
  26. 語言_dgv.Rows(0).Cells(1).Value = Strings.Mid(line, 13, 300).Substring(0, Strings.Mid(line, 13, 300).Length - 1)
  27. Else : 語言_dgv.Rows(0).Cells(1).Value = Strings.Mid(line, 13, 300) : End If
  28. End If
  29. ElseIf 系統語言 = "English" Then
  30. If Strings.Mid(line, 10, 2) = "EN" Then : 語言_dgv.Rows.Insert(0)
  31. 語言_dgv.Rows(0).Cells(0).Value = Strings.Left(line, 11)
  32. If Strings.Mid(line, 13, 300).EndsWith(",") Then
  33. 語言_dgv.Rows(0).Cells(1).Value = Strings.Mid(line, 13, 300).Substring(0, Strings.Mid(line, 13, 300).Length - 1)
  34. Else : 語言_dgv.Rows(0).Cells(1).Value = Strings.Mid(line, 13, 300) : End If
  35. End If
  36. ElseIf 系統語言 = "Indonesian" Then
  37. If Strings.Mid(line, 10, 2) = "IN" Then : 語言_dgv.Rows.Insert(0)
  38. 語言_dgv.Rows(0).Cells(0).Value = Strings.Left(line, 11)
  39. If Strings.Mid(line, 13, 300).EndsWith(",") Then
  40. 語言_dgv.Rows(0).Cells(1).Value = Strings.Mid(line, 13, 300).Substring(0, Strings.Mid(line, 13, 300).Length - 1)
  41. Else : 語言_dgv.Rows(0).Cells(1).Value = Strings.Mid(line, 13, 300) : End If
  42. End If
  43. End If
  44. End If
  45. End If
  46. End While
  47. filereader.Close()
  48. End If
  49. End Sub
  50. Private Sub Set_語言查詢()
  51. RI = -1 : For Each row As DataGridViewRow In 語言_dgv.Rows
  52. If Strings.Left(row.Cells(0).Value.ToString(), 8) = SK Then
  53. RI = row.Index : Exit For
  54. End If
  55. Next
  56. End Sub
  57. Private Sub 語言轉換讀取()
  58. Set_語言()
  59. SK = "H608-100" : Set_語言查詢() : Me.Text = 語言_dgv(1, RI).Value.ToString : SK = "H608-101" : Set_語言查詢() : Label8.Text = 語言_dgv(1, RI).Value.ToString
  60. SK = "H608-102" : Set_語言查詢() : 對話框(0) = 語言_dgv(1, RI).Value.ToString : SK = "H608-103" : Set_語言查詢() : Label15.Text = 語言_dgv(1, RI).Value.ToString
  61. SK = "H608-104" : Set_語言查詢() : Label9.Text = 語言_dgv(1, RI).Value.ToString : SK = "H608-105" : Set_語言查詢() : Label13.Text = 語言_dgv(1, RI).Value.ToString
  62. SK = "H608-106" : Set_語言查詢() : Label17.Text = 語言_dgv(1, RI).Value.ToString : SK = "H608-107" : Set_語言查詢() : Label11.Text = 語言_dgv(1, RI).Value.ToString
  63. SK = "H608-108" : Set_語言查詢() : Label1.Text = 語言_dgv(1, RI).Value.ToString : SK = "H608-109" : Set_語言查詢() : 對話框(1) = 語言_dgv(1, RI).Value.ToString
  64. SK = "H608-110" : Set_語言查詢() : 對話框(2) = 語言_dgv(1, RI).Value.ToString : SK = "H608-111" : Set_語言查詢() : 對話框(3) = 語言_dgv(1, RI).Value.ToString
  65. SK = "H608-112" : Set_語言查詢() : 對話框(4) = 語言_dgv(1, RI).Value.ToString : SK = "H608-113" : Set_語言查詢() : 對話框(5) = 語言_dgv(1, RI).Value.ToString
  66. SK = "H608-114" : Set_語言查詢() : 對話框(6) = 語言_dgv(1, RI).Value.ToString
  67. End Sub
  68. Private Sub Panel1_Paint(sender As Object, e As PaintEventArgs) Handles Panel1.Paint
  69. End Sub
  70. Private Sub 考勤打卡_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  71. 風格() : 計算分流.Enabled = True : Panel2.SendToBack() : Panel3.BringToFront() : 打卡啟動_tb.SendToBack() ': Me.WindowState = 2
  72. 介面 = "H608" : 語言轉換讀取() : 顯示說明(999, False)
  73. End Sub
  74. Private Sub 計算分流_Tick(sender As Object, e As EventArgs) Handles 計算分流.Tick
  75. 計算分流.Enabled = False
  76. 年_lb.Text = Year(Today) : 月_lb.Text = Month(Today) : 日_lb.Text = Strings.Right(Format(Today(), "yyyy/MM/dd"), 2) : 時_lb.Text = Format(TimeOfDay(), "HH:mm:ss")
  77. '--------------辦公室人員適用-------------------------------------------------------------------------
  78. 時段標示_lb.Text = "" : Label16.Text = "" : Label18.Text = "" : 上班時間_lb.Text = "" : 下班時間_lb.Text = "" : 說明_lb.Text = 對話框(0)
  79. 系統時鐘.Enabled = True : 打卡啟動_tb.Focus() : Panel3.SendToBack()
  80. End Sub
  81. Private Sub 五秒重製_Tick(sender As Object, e As EventArgs) Handles 五秒重製.Tick
  82. Label16.Text = "" : Label18.Text = "" : 上班時間_lb.Text = "" : 下班時間_lb.Text = "" : 時段標示_lb.Text = "" : 說明_lb.Text = 對話框(0) : 大頭照_pb.Image = Nothing
  83. 五秒重製.Enabled = False
  84. End Sub
  85. Private Sub 系統時鐘_Tick(sender As Object, e As EventArgs) Handles 系統時鐘.Tick
  86. 年_lb.Text = Year(Today) : 月_lb.Text = Month(Today) : 日_lb.Text = Strings.Right(Format(Today(), "yyyy/MM/dd"), 2) : 時_lb.Text = Format(TimeOfDay(), "HH:mm:ss")
  87. End Sub
  88. Private Sub Cancel_bt_Click(sender As Object, e As EventArgs) Handles Cancel_bt.Click
  89. Me.Close()
  90. End Sub
  91. Private Sub 打卡啟動_tb_TextChanged(sender As Object, e As EventArgs) Handles 打卡啟動_tb.TextChanged
  92. If 打卡啟動_tb.Text <> "" Then
  93. 上班時間_lb.Text = "" : 下班時間_lb.Text = ""
  94. End If
  95. 年_lb.Text = Year(Today) : 月_lb.Text = Month(Today) : 日_lb.Text = Strings.Right(Format(Today(), "yyyy/MM/dd"), 2) : 時_lb.Text = Format(TimeOfDay(), "HH:mm:ss")
  96. If 打卡啟動_tb.Text.Length = 10 Then
  97. Label16.Text = "" : Label18.Text = "" : 上班時間_lb.Text = "" : 下班時間_lb.Text = "" : 時段標示_lb.Text = "" : 說明_lb.Text = 對話框(0) : 大頭照_pb.Image = Nothing
  98. 五秒重製.Enabled = False
  99. SQL_打卡人員資料讀取()
  100. If dr.Read() Then
  101. Label16.Text = dr("姓名").ToString : PA5 = dr("帳號").ToString
  102. Dim 驗證 As String = "" : Dim 取變數 As String
  103. 取變數 = dr("職稱").ToString : NN1 = 0
  104. For ii As Integer = 1 To 20
  105. If ii = 1 Then : 驗證 = Strings.Left(取變數, ii) : NN1 += 1 : Else
  106. If Strings.Mid(取變數, ii, 1) = "/" Then : Exit For : Else : 驗證 &= Strings.Mid(取變數, ii, 1) : NN1 += 1 : End If
  107. End If
  108. Next
  109. If 系統語言 = "繁體中文" Then : Label18.Text = 驗證 : Else
  110. If Strings.Left(dr("職稱").ToString, 6) = "00000." Then : Label18.Text = "00000.NA" : Else
  111. Label18.Text = Strings.Left(dr("職稱").ToString, 6) & Strings.Mid(dr("職稱").ToString, NN1 + 2, 100)
  112. End If
  113. End If
  114. 五秒重製.Enabled = False
  115. Me.打卡_bt.PerformClick()
  116. Else
  117. 說明_lb.Text = 對話框(6) : 五秒重製.Enabled = True
  118. 打卡啟動_tb.Text = "" : 打卡啟動_tb.Focus() : conn.Close()
  119. End If
  120. End If
  121. End Sub
  122. Private Sub Set_日期格式轉換()
  123. DTP = Format(Today(), "yyyy/MM/dd")
  124. End Sub
  125. Private Sub 打卡_bt_Click(sender As Object, e As EventArgs) Handles 打卡_bt.Click
  126. 時_lb.Text = Format(TimeOfDay(), "HH:mm:ss")
  127. 說明_lb.Text = 對話框(0)
  128. 大頭照_pb.Image = Nothing : SQL_人員資料讀取5()
  129. If dr.Read() = True Then : 圖片庫 = dr("照片位置").ToString : SQL_連線字串_圖片資料庫() : SQL_人員資料讀取0()
  130. While dr.Read() = True
  131. If dr("圖片").ToString = Nothing Then : Else
  132. Dim unused As Byte() = New Byte(-1) {}
  133. Dim bytes As Byte() = DirectCast(dr.Item("圖片"), Byte())
  134. Dim oStream As New MemoryStream(bytes)
  135. 大頭照_pb.Image = Bitmap.FromStream(oStream)
  136. End If
  137. End While : 大頭照_pb.SizeMode = 4
  138. End If : conn.Close()
  139. For I As Integer = 1 To 6 : 時段(I) = "" : Next
  140. Dim 下班卡 As Boolean : Set_日期格式轉換() : SQL_打卡人員明細讀取()
  141. If dr.Read() Then
  142. 時段(1) = dr("第一").ToString : 時段(2) = dr("第二").ToString : 時段(3) = dr("第三").ToString
  143. 時段(4) = dr("第四").ToString : 時段(5) = dr("第五").ToString : 時段(6) = dr("第六").ToString
  144. '--------------上下班卡顯示------------------------------------------------------
  145. If dr("第一").ToString <> "" Then : 上班時間_lb.Text = dr("第一").ToString : 下班卡 = True
  146. Else : 上班時間_lb.Text = Format(TimeOfDay(), "HH:mm:ss") : 下班卡 = False : End If
  147. If 下班卡 = False Then : 下班時間_lb.Text = "" : Else : 下班時間_lb.Text = Format(TimeOfDay(), "HH:mm:ss") : End If
  148. '--------------今天第二次以上打卡------------------------------------------------
  149. If 時段(1) = "" And 時段(2) = "" And 時段(3) = "" And 時段(4) = "" And 時段(5) = "" And 時段(6) = "" Then
  150. SQL2 = "第一" : PA45 = Strings.Format(TimeOfDay(), "HH:mm:ss").Replace(".", ":") : SQL_打卡紀錄寫入()
  151. 說明_lb.Text = 對話框(1) : 時段標示_lb.Text = 對話框(4) & " 1 " & 對話框(5)
  152. ElseIf 時段(1) <> "" And 時段(2) = "" And 時段(3) = "" And 時段(4) = "" And 時段(5) = "" And 時段(6) = "" Then
  153. '----比對是否一個小時內重複打卡----------------------------------------------
  154. PA1 = 時段(1) : 時間比對() : If PA2 = "重複" Then : 說明_lb.Text = 對話框(2)
  155. Else : SQL2 = "第二" : PA45 = Strings.Format(TimeOfDay(), "HH:mm:ss").Replace(".", ":") : SQL_打卡紀錄寫入()
  156. 說明_lb.Text = 對話框(1) : 時段標示_lb.Text = 對話框(4) & " 2 " & 對話框(5) : End If
  157. ElseIf 時段(1) <> "" And 時段(2) <> "" And 時段(3) = "" And 時段(4) = "" And 時段(5) = "" And 時段(6) = "" Then
  158. '----比對是否一個小時內重複打卡----------------------------------------------
  159. PA1 = 時段(2) : 時間比對() : If PA2 = "重複" Then : 說明_lb.Text = 對話框(2)
  160. Else : SQL2 = "第三" : PA45 = Strings.Format(TimeOfDay(), "HH:mm:ss").Replace(".", ":") : SQL_打卡紀錄寫入()
  161. 說明_lb.Text = 對話框(1) : 時段標示_lb.Text = 對話框(4) & " 3 " & 對話框(5) : End If
  162. ElseIf 時段(1) <> "" And 時段(2) <> "" And 時段(3) <> "" And 時段(4) = "" And 時段(5) = "" And 時段(6) = "" Then
  163. '----比對是否一個小時內重複打卡----------------------------------------------
  164. PA1 = 時段(3) : 時間比對() : If PA2 = "重複" Then : 說明_lb.Text = 對話框(2)
  165. Else : SQL2 = "第四" : PA45 = Strings.Format(TimeOfDay(), "HH:mm:ss").Replace(".", ":") : SQL_打卡紀錄寫入()
  166. 說明_lb.Text = 對話框(1) : 時段標示_lb.Text = 對話框(4) & " 4 " & 對話框(5) : End If
  167. ElseIf 時段(1) <> "" And 時段(2) <> "" And 時段(3) <> "" And 時段(4) <> "" And 時段(5) = "" And 時段(6) = "" Then
  168. '----比對是否一個小時內重複打卡----------------------------------------------
  169. PA1 = 時段(4) : 時間比對() : If PA2 = "重複" Then : 說明_lb.Text = 對話框(2)
  170. Else : SQL2 = "第五" : PA45 = Strings.Format(TimeOfDay(), "HH:mm:ss").Replace(".", ":") : SQL_打卡紀錄寫入()
  171. 說明_lb.Text = 對話框(1) : 時段標示_lb.Text = 對話框(4) & " 5 " & 對話框(5) : End If
  172. ElseIf 時段(1) <> "" And 時段(2) <> "" And 時段(3) <> "" And 時段(4) <> "" And 時段(5) <> "" And 時段(6) = "" Then
  173. '----比對是否一個小時內重複打卡----------------------------------------------
  174. PA1 = 時段(5) : 時間比對() : If PA2 = "重複" Then : 說明_lb.Text = 對話框(2)
  175. Else : SQL2 = "第六" : PA45 = Strings.Format(TimeOfDay(), "HH:mm:ss").Replace(".", ":") : SQL_打卡紀錄寫入()
  176. 說明_lb.Text = 對話框(1) : 時段標示_lb.Text = 對話框(4) & " 6 " & 對話框(5) : End If
  177. ElseIf 時段(1) <> "" And 時段(2) <> "" And 時段(3) <> "" And 時段(4) <> "" And 時段(5) <> "" And 時段(6) <> "" Then
  178. 說明_lb.Text = 對話框(3)
  179. End If
  180. Else
  181. '--------------上下班卡顯示------------------------------------------------------
  182. 上班時間_lb.Text = Format(TimeOfDay(), "HH:mm:ss") : 下班時間_lb.Text = ""
  183. '--------------今天第一次打卡----------------------------------------------------
  184. PA45 = Strings.Format(TimeOfDay(), "HH:mm:ss").Replace(".", ":")
  185. SQL_打卡第一格() : 說明_lb.Text = 對話框(1) : 時段標示_lb.Text = 對話框(4) & " 1 " & 對話框(5)
  186. End If : conn.Close()
  187. 打卡啟動_tb.Text = "" : 打卡啟動_tb.Focus() : 五秒重製.Enabled = True
  188. End Sub
  189. Private Sub 時間比對()
  190. Dim dateA As Date = Date.ParseExact("[" & PA1 & "]", "[HH:mm:ss]", Nothing)
  191. Dim dateB As Date = Date.ParseExact("[" & Format(TimeOfDay(), "HH:mm:ss") & "]", "[HH:mm:ss]", Nothing)
  192. Dim hoursDiff As Integer = DateDiff(DateInterval.Minute, dateA, dateB)
  193. If Math.Abs(hoursDiff) <= 40 Then : PA2 = "重複" : Else : PA2 = "可行" : End If
  194. End Sub
  195. Private Sub 風格()
  196. If 深色風格 = False Then
  197. Panel1.BackgroundImage = My.Resources._62951168976601486 : Panel3.BackgroundImage = My.Resources._62951168976601486
  198. '--------------黑色-------------------------------------------
  199. Label1.ForeColor = Color.Black
  200. '--------------紅色-------------------------------------------
  201. Label8.ForeColor = Color.Red : 年_lb.ForeColor = Color.Red : Label2.ForeColor = Color.Red : 月_lb.ForeColor = Color.Red
  202. Label4.ForeColor = Color.Red : 日_lb.ForeColor = Color.Red : Label6.ForeColor = Color.Red : 時_lb.ForeColor = Color.Red
  203. '--------------藍色-------------------------------------------
  204. Label15.ForeColor = Color.Blue : Label17.ForeColor = Color.Blue : Label9.ForeColor = Color.Blue : Label13.ForeColor = Color.Blue
  205. Label16.ForeColor = Color.Blue : Label18.ForeColor = Color.Blue : 上班時間_lb.ForeColor = Color.Blue : 時段標示_lb.ForeColor = Color.Blue
  206. Label11.ForeColor = Color.Blue : 下班時間_lb.ForeColor = Color.Blue : 說明_lb.ForeColor = Color.Blue
  207. Else
  208. Panel1.BackgroundImage = My.Resources._20157059_MotionElements_diagonal_lines : Panel3.BackgroundImage = My.Resources._20157059_MotionElements_diagonal_lines
  209. '--------------黑色-------------------------------------------
  210. Label1.ForeColor = Color.White
  211. '--------------紅色-------------------------------------------
  212. Label8.ForeColor = Color.LightPink : 年_lb.ForeColor = Color.LightPink : Label2.ForeColor = Color.LightPink : 月_lb.ForeColor = Color.LightPink
  213. Label4.ForeColor = Color.LightPink : 日_lb.ForeColor = Color.LightPink : Label6.ForeColor = Color.LightPink : 時_lb.ForeColor = Color.LightPink
  214. '--------------藍色-------------------------------------------
  215. Label15.ForeColor = Color.LightBlue : Label17.ForeColor = Color.LightBlue : Label9.ForeColor = Color.LightBlue : Label13.ForeColor = Color.LightBlue
  216. Label16.ForeColor = Color.LightBlue : Label18.ForeColor = Color.LightBlue : 上班時間_lb.ForeColor = Color.LightBlue : 時段標示_lb.ForeColor = Color.LightBlue
  217. Label11.ForeColor = Color.LightBlue : 下班時間_lb.ForeColor = Color.LightBlue : 說明_lb.ForeColor = Color.LightBlue
  218. End If
  219. End Sub
  220. End Class