FreeBasic
Главная
Вход
Регистрация
Вторник, 15.10.2024, 09:06Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 5 из 5
  • «
  • 1
  • 2
  • 3
  • 4
  • 5
Пожелания или дополнения к библиотеке
haavДата: Суббота, 03.09.2022, 05:55 | Сообщение # 61
Генералиссимус
Группа: Администраторы
Сообщений: 1366
Репутация: 49
Статус: Offline
Цитата Vitamin ()
Есть ли в Window9 гаджет для ввода времени (2 или 3 поля с разделителями) ?
нет
Цитата Vitamin ()
Если такого нет, сложно ли добавить такой гаджет в библиотеку?
непросто


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
VitaminДата: Суббота, 03.09.2022, 09:52 | Сообщение # 62
Лейтенант
Группа: Пользователи
Сообщений: 59
Репутация: 4
Статус: Offline
Ясно, значит придётся использовать SpinGadget 3 штуки )
 
zamabuvaraeuДата: Понедельник, 05.09.2022, 22:33 | Сообщение # 63
Подполковник
Группа: Друзья
Сообщений: 149
Репутация: 5
Статус: Offline
В библиотеке общих элементов управления есть окно с классом "SysDateTimePick32", оно будет работать начиная с Windows XP.

https://docs.microsoft.com/en-us....ontrols
Прикрепления: 9894029.png (9.5 Kb)
 
zamabuvaraeuДата: Понедельник, 05.09.2022, 22:35 | Сообщение # 64
Подполковник
Группа: Друзья
Сообщений: 149
Репутация: 5
Статус: Offline
Здесь исходник:
Прикрепления: DateTimePicker.zip (34.6 Kb)
 
VitaminДата: Вторник, 06.09.2022, 11:42 | Сообщение # 65
Лейтенант
Группа: Пользователи
Сообщений: 59
Репутация: 4
Статус: Offline
zamabuvaraeu, спасибо буду изучать, а то не знал даже как это называется.
А в рамках Window9 мне пришло на ум 2 варианта с дополнительным окном ввода:

№1
Код
#Include "window9.bi"
Dim As integer i, event
Dim Shared As HWND hwnd
Dim As String setting = GetCurrentSettingsDisplay ' получаем параметры экрана

hwnd = OpenWindow("окно",GetWidthDesktop(setting)/2-250,GetHeightDesktop(setting)/2-180,280,200)
StringGadget(1,10,10,64,16,"00:00:00",ES_READONLY Or ES_CENTER,WS_EX_STATICEDGE)
SetGadgetFont(1,LoadFont("Arial",9))
ButtonGadget(2,180,10,60,30,"button")

Sub PozVvoda(nTxt As Integer, x As Integer, y As Integer)   
   Dim As Integer i, event : Var s = GetGadgetText(nTxt) ' читаем строку "00:00:00"; x, y - смещение в главном окне немного правее строки ввода времени(+10,+10)   
   #Define parOkna WS_VISIBLE Or WS_BORDER Or WS_CAPTION Or WS_POPUPWINDOW,WS_EX_TOPMOST ' координаты главного окна
  Var hwnd2 = OpenWindow("Время",WindowX(hwnd)+x,WindowY(hwnd)+y,138,100,parOkna) ' коорднГлОкна+сдвгПравКраюТекстГаджета
   #Define SpinGdgtFlg UDS_SETBUDDYINT Or UDS_ALIGNRIGHT Or UDS_WRAP Or UDS_ARROWKEYS ' флаги для SpinGadget
   SpinGadget(100,4,12,42,20,23,0,ValInt(Left(s,2)),SpinGdgtFlg,ES_CENTER Or ES_NUMBER) ' id,x,y,w,h,maxVal,minVal,curVal,flg1,flg2
   SetGadgetColor(100,16777215,0,1) : SetGadgetFont(100,LoadFont("Arial",9))
   SpinGadget(101,42+4,12,42,20,59,0,ValInt(Mid(s,4,2)),SpinGdgtFlg,ES_CENTER Or ES_NUMBER)
   SetGadgetColor(101,16777215,0,1) : SetGadgetFont(101,LoadFont("Arial",9))
   SpinGadget(102,84+4,12,42,20,59,0,ValInt(Right(s,2)),SpinGdgtFlg,ES_CENTER Or ES_NUMBER)
   SetGadgetColor(102,16777215,0,1) : SetGadgetFont(102,LoadFont("Arial",9))      
   ButtonGadget(103,4,38,60,26,"Отмена") : SetGadgetFont(103,LoadFont("Arial",9))
   ButtonGadget(104,68,38,60,26,"Ввод") : SetGadgetFont(104,LoadFont("Arial",9))   
   AddKeyboardShortcut(hwnd2,FVIRTKEY,VK_ESCAPE,1001) ' нажата клавиша ESC
   AddKeyboardShortcut(hwnd2,FVIRTKEY,VK_RETURN,1002) ' нажата клавиша Enter
   Do
      event = WaitEvent()
      If event = EventClose AndAlso EventHwnd() = hwnd2 Then Exit Do ' если зарыли миниОкно - выход без сохранения
      If event = EventMenu Then
         Select Case EventNumber               
            Case 1001 : Exit Do ' нажата клавиша ESC = Выход
            Case 1002 : i = 1 : Exit Do ' нажата клавиша Enter = команда закончить ввод и сохранить значение
         End Select
      EndIf         
      If event = EventGadget Then
         Select Case EventNumber() ' в зависимости от нажатой Кнопки
            Case 103 : Exit Do ' нажата кнопка Отменить
            Case 104 : i = 1 : Exit Do ' команда закончить ввод и сохранить значение
         End Select           
      EndIf
   Loop
   #Define ModZn(nGdg) IIf(Len(Str(GetGadgetState(nGdg)))=2,Str(GetGadgetState(nGdg)),"0" & GetGadgetState(nGdg))
   If i Then SetGadgetText(nTxt,ModZn(100) & ":" & ModZn(101) & ":" & ModZn(102))
   For i = 100 To 104 : FreeGadget(i) : Next ' освобождаем ресурсы
   Close_Window(hwnd2) : SetFocus(hwnd) ' закрываем миниОкно ввода и переводим фокус на главное (блокПовтЗапуск)
End Sub

Do
   event = WaitEvent()   
   If event = EventClose AndAlso EventHwnd() = hwnd Then End   
   If event = EventGadget Then
     If EventNumber() = 1 Then PozVvoda(1,74,36) ' выбрано поле строки времени
   EndIf
Loop


№2
Код
#Include "window9.bi"
Dim As integer i, event
Dim Shared As HWND hwnd
Dim As String setting = GetCurrentSettingsDisplay ' получаем параметры экрана

hwnd = OpenWindow("окно",GetWidthDesktop(setting)/2-250,GetHeightDesktop(setting)/2-180,280,200)
StringGadget(1,10,10,64,16,"00:00:00",ES_READONLY Or ES_CENTER,WS_EX_STATICEDGE)
SetGadgetFont(1,LoadFont("Arial",9))
ButtonGadget(2,180,10,60,30,"button")

Function VvodZnah(nomer As Integer) As Integer ' добавление 1-го числа
   Var s = GetGadgetText(110) ' читаем строку "_0:00:00"
   s = Left(s,2) & Mid(s,4,2) & Right(s,2) ' убираем разделители ":"
   Var poz = InStr(s,"_") ' находим позицию слеша в строке "_00000"
   Mid(s,poz) = IIf(nomer = -1,"000000",Str(nomer)) & "_" ' Замена подстроки
   If nomer = -1 Then poz = 6
   If poz = 6 Then ' строка заполнена - делаем проверку корректности всего значения
      If ValInt(Left(s,2)) > 23 Or ValInt(Mid(s,3,2))> 59 Or ValInt(Right(s,2)) > 59 Then
         s = "_00000" : poz = 1 ' если не корректно - сбрасываем в начальное состояние
      EndIf
   EndIf
   s = Left(s,2) & ":" & Mid(s,3,2) & ":" & Right(s,2) ' добавляем разделители
   SetGadgetText(110,s) : Return poz ' отображаем строку "0_:00:00"
End Function

Function VvodZnahRev() As Integer ' удаление 1-го элемента
   Var s = GetGadgetText(110) ' читаем строку "_0:00:00"
   s = Left(s,2) & Mid(s,4,2) & Right(s,2) ' убираем разделители ":"
   Var poz = InStr(s,"_") ' находим позицию слеша в строке "_00000"
   If poz = 1 Then Return 1 ' если находимся вначале   
   Mid(s,poz-1) = "_0" ' Замена подстроки
   s = Left(s,2) & ":" & Mid(s,3,2) & ":" & Right(s,2) ' добавляем разделители
   SetGadgetText(110,s) : Return 1 ' отображаем строку "0_:00:00"
End Function

Sub OknoVvoda(nTxt As Integer, x As Integer, y As Integer)
   Dim As Integer i, poz, event ' x, y - смещение в главном окне немного правее строки ввода времени(+10,+10)   
   #Define parOkna WS_VISIBLE Or WS_BORDER Or WS_CAPTION Or WS_POPUPWINDOW,WS_EX_TOPMOST
  Var hwnd2 = OpenWindow("Время",WindowX(hwnd)+x,WindowY(hwnd)+y,124,190,parOkna) ' коорднГлОкна+сдвгПравКраюТекстГаджета
   TextGadget(110,26,6,90,18,"_0:00:00") : SetGadgetFont(110,LoadFont("Arial",10)) ' поле для вводимого текста   
   ButtonGadget(100,8,128,30,26,"0") : ButtonGadget(101,8,96,30,26,"1") ' цифровые кнопки 0--9
   ButtonGadget(102,44,96,30,26,"2") : ButtonGadget(103,80,96,30,26,"3")
   ButtonGadget(104,8,64,30,26,"4") : ButtonGadget(105,44,64,30,26,"5")
   ButtonGadget(106,80,64,30,26,"6") : ButtonGadget(107,8,32,30,26,"7")
   ButtonGadget(108,44,32,30,26,"8") : ButtonGadget(109,80,32,30,26,"9")    
   For i = 100 To 109 : SetGadgetFont(i,LoadFont("Arial",14)) : Next ' установка шрифта всем цифровым кнопкам   
   ButtonGadget(111,42,128,30,26,"<<") : SetGadgetFont(111,LoadFont("Arial",12))
   ButtonGadget(112,76,128,34,26,"Ввод") : SetGadgetFont(112,LoadFont("Arial",8))   
   #Define DobGorKlv(knst,id) AddKeyboardShortcut(hwnd2,FVIRTKEY,knst,id) ' нажатаКлавиша(конст.,идентиф.)
   DobGorKlv(VK_ESCAPE,1001) : DobGorKlv(VK_RETURN,1002) : DobGorKlv(VK_BACK,1003)' клавиши ESC,Enter,BACK
   DobGorKlv(VK_0,1010) : DobGorKlv(VK_1,1011) : DobGorKlv(VK_2,1012) ' активация обычных цифр клавиатуры
   DobGorKlv(VK_3,1013) : DobGorKlv(VK_4,1014) : DobGorKlv(VK_5,1015)
   DobGorKlv(VK_6,1016) : DobGorKlv(VK_7,1017) : DobGorKlv(VK_8,1018)
   DobGorKlv(VK_9,1019) : DobGorKlv(VK_NUMPAD0,1020) : DobGorKlv(VK_NUMPAD1,1021) ' активация Num цифр клавиатуры
   DobGorKlv(VK_NUMPAD2,1022) : DobGorKlv(VK_NUMPAD3,1023) : DobGorKlv(VK_NUMPAD4,1024)
   DobGorKlv(VK_NUMPAD5,1025) : DobGorKlv(VK_NUMPAD6,1026) : DobGorKlv(VK_NUMPAD7,1027)
   DobGorKlv(VK_NUMPAD8,1028) : DobGorKlv(VK_NUMPAD9,1029)
   Do
      event = WaitEvent()
      If event = EventClose AndAlso EventHwnd() = hwnd2 Then Exit Do ' если зарыли это миниОкно
      If event = EventMenu Then
         Select Case EventNumber()      
            Case 1001 : Exit Do ' нажата клавиша ESC = Выход
            Case 1002 : poz = VvodZnah(-1) ' нажата клавиша Enter = команда закончить ввод
            Case 1003 : poz = VvodZnahRev() ' нажата клавиша BACK = команда убрать 1 элемент справа
            Case 1010 To 1029 : poz = VvodZnah(ValInt(Right(Str(EventNumber()),1))) ' введено число 0--9
         End Select         
      EndIf         
      If event = EventGadget Then
         Select Case EventNumber() ' в зависимости от нажатой Кнопки
            Case 100 To 109 : poz = VvodZnah(EventNumber()-100) ' введено число 0--9
            Case 111 : poz = VvodZnahRev() ' команда убрать 1 элемент справа
            Case 112 : poz = VvodZnah(-1) ' команда закончить ввод
         End Select           
      EndIf
      If poz = 6 Then Exit Do ' если дошли до конца - выходим из цикла
   Loop   
   If poz = 6 Then SetGadgetText(nTxt,GetGadgetText(110)) ' если дошли до конца, то копируем в основное поле
   For i = 100 To 112 : FreeGadget(i) : Next ' освобождаем ресурсы
   Close_Window(hwnd2) : SetFocus(hwnd) ' закрываем миниОкно ввода и переводим фокус на главное (блокПовтЗапуск)
End Sub

Do
   event = WaitEvent()   
   If event = EventClose AndAlso EventHwnd() = hwnd Then End   
   If event = EventGadget Then
     If EventNumber() = 1 Then OknoVvoda(1,74,36) ' выбрано поле строки времени
   EndIf
Loop


Сообщение отредактировал Vitamin - Вторник, 06.09.2022, 12:19
 
zamabuvaraeuДата: Среда, 07.09.2022, 20:34 | Сообщение # 66
Подполковник
Группа: Друзья
Сообщений: 149
Репутация: 5
Статус: Offline
В предыдущем сообщении небольшая ошибка, из‐за которой не выбирает дату.
Должно быть так:
Код
Dim hDate As HWND = GetDlgItem(hwndDlg, IDC_DTP_DATE)
 
  • Страница 5 из 5
  • «
  • 1
  • 2
  • 3
  • 4
  • 5
Поиск: