Форум программистов, компьютерный форум, киберфорум
Assembler: Windows/protected mode
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 09.12.2021
Сообщений: 81
MASM32

Получить текущее время, используя только GetSystemTime?

31.08.2022, 22:53. Показов 1466. Ответов 5

Студворк — интернет-сервис помощи студентам
Привет всем
Сегодня я решаю эту проблему на ассемблере: "Выведите время и дату с помощью функции GetSystemTime. Формат вывода:

Дата: 22 вересня 2007 року
Час(время): 17:05:35
День тижня(недели): Четверг

Обратите внимание на часовой пояс и отступы в тексте"

Проблема в том, что при выводе данных на экран время отстает от текущего на 3 часа.

Ответьте кто знает как вывести текущее время без использования функции "GetLocalTime" ?

.inc File
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
include WINDOWS.inc
 
include user32.inc
include kernel32.inc
 
includelib user32.lib
includelib kernel32.lib
 
.data
    Time_title  db ' Lab_2',0
    FORMAT_STRING  \
    db '    Системний час:',0dh,0ah,0dh,0ah
    db '                 Дата:       %ld %s %ld ðîêó',0dh,0ah
    db '                 Час(время):       %ld : %ld : %ld',0dh,0ah
    db '                 День тижня(недели):    %s',0dh,0ah
    db 0
 
    Month_ \
    db  'грудня',4 dup(0),\ 
        'січеня',5 dup(0),\
        'лютого',4 dup(0),\
        'березня', 3 dup(0),\
        'квітня',4 dup(0),\
        'травня',4 dup(0),\
        'червяня',4 dup(0),\
        'липня',5 dup(0),\
        'серпня',4 dup(0),\
        'вересеня',3 dup(0),\
        'жовтня',4 dup(0),\
        'листопада',0
    
    Day_of_week \
    db  'Неділя',4 dup(0),\
        'Понеділок',0,\
        'Вівторок',2 dup(0),\
        'Середа',4 dup(0),\
        'Четвер',3 dup(0),\
        "П'ятниця",2 dup(0),\
        'Субота',0
 
 
.data?
    Save_esp dd ?

.asm File
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
.386
.model flat,STDCALL
option casemap :none  ;case sensitive
include Second.inc
include RADbg.inc
 
.code
Begin:
    call main
    invoke ExitProcess,NULL
 
main proc
LOCAL Time:SYSTEMTIME
LOCAL Buf[100]:BYTE
    mov Save_esp,esp
    invoke GetSystemTime,addr Time;
    xor eax,eax ; eax=0
    mov ax,Time.wDayOfWeek
    mov bx,10
    mul bx  ;ax*bx
    add eax,offset Day_of_week ;eax=address Day_of_week[Time.wDayOfWeek*10]
    push eax
    xor eax,eax 
    mov ax,Time.wSecond 
    push eax
    mov ax,Time.wMinute 
    push eax
    mov ax,Time.wHour   
    push eax
    mov ax,Time.wYear
    push eax
    mov ax,Time.wMonth
    mul bx
    add eax,offset Month_ ;eax=address Day_of_week[Time.wDayOfWeek*10]
    push eax
    xor eax,eax 
    mov ax,Time.wDay    
    push eax
    push offset FORMAT_STRING
    lea eax,Buf
    push eax
    call wsprintf
    mov esp, Save_esp
    invoke MessageBox,NULL,addr Buf,addr Time_title,MB_OKCANCEL
    ret
main endp   
end Begin
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
31.08.2022, 22:53
Ответы с готовыми решениями:

Как получить текущее Текущее Unix epoch время в милисекундах?
Хочу получить через эксель выписку егрюл egrul.nalog.ru Общий порядок такой: 1) Отправляю ПОСТ запрос на адрес https://egrul.nalog.ru/ ...

Получить текущее время
Столкнулся с такой проблемой. Нужно преобразовать результат, который возвращает time(0), в часы, минуты и секунды текущего дня. Для часов...

Получить текущее время.
Здрасти всем! У меня вопрос как в С++ Bilder получить текущее время текущее , какой функцией надо пользоваться на Delphi была ...

5
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8644 / 4479 / 1669
Регистрация: 01.02.2015
Сообщений: 13,883
Записей в блоге: 11
01.09.2022, 00:04
А почему нельзя использовать GetLocalTime?

С помощью GetLocalTime всё просто.
Вывести системное время
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8644 / 4479 / 1669
Регистрация: 01.02.2015
Сообщений: 13,883
Записей в блоге: 11
01.09.2022, 17:42
Раз именно по условию задачи запрещёно использовать функцию GetLocalTime, то преподаватель должен предложить решение (не код, а идею).

Результат работы функции GetSystemTime зависит от установки часового пояса в Windows.

Думаю, что самым простым решением будет добавление разницы между UTC и локальным временем. Т.е. если локальное время для Вас составляет (GMT+3), то и добавить 3 часа к полученному результату.

Для времени это довольно просто - при превышении значения 24 часа - вычесть 24, увеличить на 1 дату.
А вот с датой несколько сложнее, т.к. количество дней в месяце предсказать сложнее.
Когда передо мной встала такая же задача в реальной практике программирования - применил математику Юлианских дат. Т.е. по формулам перевёл дату из формата день/месяц/год в одно число - это число и есть Юлианская дата. К числу прибавил 1 и результат по формулам перевёл в формат день/месяц/год. Всё очень просто и компактно.
Ссылка на Wikipedia о Юлианской дате
https://ru.wikipedia.org/wiki/... 1%82%D0%B0
https://en.wikipedia.org/wiki/Julian_day

На Pascal лучше видны формулы для вычислений. Здесь для некоей даты вычисляется Юлианский день, потом вычисляется день, который будет через m=16 суток, по полученному Юлианскому дню вычисляется дата в формате Грегорианского календаря.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
program Calendar;
 
type
  TDate = record
    Day, Month, Year: longint;
  end;
 
  function JDN(Date: TDate): longint;
  var
    a, y, m: longint;
  begin
    with Date do
    begin
      a := (14 - Month) div 12;
      y := Year + 4800 - a;
      m := Month + 12 * a - 3;
      JDN := Day + ((153 * m + 2) div 5) + 365 * y + (y div 4) -
        (y div 100) + (y div 400) - 32045;
    end;
  end;
 
  procedure JdnToGregorian(Jdn: longint; var Date: TDate);
  var
    a, b, c, d, e, m: longint;
  begin
    a := Jdn + 32044;
    b := (4 * a + 3) div (146097);
    c := a - ((146097 * b) div 4);
    d := (4 * c + 3) div 1461;
    e := c - ((1461 * d) div 4);
    m := (5 * e + 2) div 153;
    with Date do
    begin
      Day  := e - ((153 * m + 2) div 5) + 1;
      Month := m + 3 - 12 * (m div 10);
      Year := 100 * b + d - 4800 + (m div 10);
    end;
  end;
 
var
  Date1, Date2: TDate;
  m: longint;
  JDN1, JDN2: longint;
begin
  {Ввод первой даты}
  with Date1 do
  begin
    Day  := 16;
    Month := 8;
    Year := 2015;
  end;
  {Ввод разницы между датами}
  m := 16;
  {Вычисление JDN первой даты}
  JDN1  := JDN(Date1);
  {Вычисление JDN второй даты}
  JDN2  := JDN1 + m;
  {Вычисление второй даты по JDN}
  JdnToGregorian(JDN2, Date2);
  {Вывод результата}
  Write('Через ', m, ' дней после ');
  with Date1 do
    Write(Day, '.', Month, '.', Year);
  Write(' будет ');
  with Date2 do
    writeln(Day, '.', Month, '.', Year);
end.
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8644 / 4479 / 1669
Регистрация: 01.02.2015
Сообщений: 13,883
Записей в блоге: 11
01.09.2022, 20:01
По быстрому без усилий по оптимизации Юлианские даты реализовал бы так
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
.686
.model flat, stdcall
option casemap :none
        .nolist
        include \masm32\include\windows.inc
 
        include \masm32\include\user32.inc
        include \masm32\include\kernel32.inc
        include \masm32\include\msvcrt.inc
        include \masm32\include\masm32.inc
        include \masm32\macros\macros.asm
 
        includelib \masm32\lib\user32.lib
        includelib \masm32\lib\kernel32.lib
        includelib \masm32\lib\msvcrt.lib
        includelib \masm32\lib\masm32.lib
 
        .list
.data
        aszFmtStr       db      "%02hu:%02hu:%02hu", 0Dh, 0Ah, 0
        aszFmtJulian    db      "JDN: %u", 0Dh, 0Ah, 0
        aszFmtGregorian db      "Gregorian: %02u/%02u/%u", 0Dh, 0Ah, 0
.data?
        aszText         db      1024 dup (?)
        stSysTime       SYSTEMTIME <?>
        stLocTime       SYSTEMTIME <?>
 
        Day             dd      ?
        Month           dd      ?
        Year            dd      ?
        _iJDN           dd      ?
 
.code
 
JDN     proc    iDay:DWORD, iMonth:DWORD, iYear:DWORD
        push    edx
        push    ecx
        push    ebx
        push    esi
 
        mov     eax,    14      ;a := (14 - Month) div 12;
        sub     eax,    [iMonth]
        mov     ebx,    12
        xor     edx,    edx
        div     ebx
 
        mov     ecx,    [iYear] ;y := Year + 4800 - a;
        add     ecx,    4800
        sub     ecx,    eax
 
        mul     ebx             ;m := Month + 12 * a - 3;
        add     eax,    [iMonth]
        sub     eax,    3
 
        mov     ebx,    153     ;JDN := Day + ((153 * m + 2) div 5) + 365 * y + (y div 4) -
        mul     ebx             ;(y div 100) + (y div 400) - 32045;
        add     eax,    2
        mov     ebx,    5
        ;xor    edx,    edx     ; строка не нужна, т.к. m=0...11, 153*m=0...1683 и edx при mul обнуляется
        div     ebx
        add     eax,    [iDay]
        mov     esi,    eax     ;esi=Day + ((153 * m + 2) div 5)
 
        mov     eax,    365     ;esi=... + 365 * y
        mul     ecx
        add     esi,    eax
 
        mov     eax,    ecx     ;esi=... + (y div 4)
        shr     eax,    2
        add     esi,    eax
 
        mov     eax,    ecx     ;esi=... - (y div 100)
        mov     ebx,    100
        xor     edx,    edx
        div     ebx
        sub     esi,    eax
 
        mov     eax,    ecx     ;esi=... + (y div 400) - 32045
        mov     ebx,    400
        xor     edx,    edx
        div     ebx
        add     esi,    eax
        sub     esi,    32045
 
        mov     eax,    esi
 
        pop     esi
        pop     ebx
        pop     ecx
        pop     edx
        ret
JDN     endp
 
JdnToGregorian  proc    iJDN:DWORD, lpDay:DWORD, lpMonth:DWORD, lpYear:DWORD
        mov     ecx,    [iJDN]          ;a := Jdn + 32044;
        add     ecx,    32044
        lea     eax,    [4*ecx+3]       ;b := (4 * a + 3) div (146097);
        mov     ebx,    146097
        xor     edx,    edx
        div     ebx
        mov     esi,    eax
        ;mov    ebx,    146097          ;c := a - ((146097 * b) div 4);
        mul     ebx
        shr     eax,    2
        sub     ecx,    eax
        lea     eax,    [4*ecx+3]       ;d := (4 * c + 3) div 1461;
        mov     ebx,    1461
        xor     edx,    edx
        div     ebx
        mov     edi,    eax
        mul     ebx                     ;e := c - ((1461 * d) div 4);
        shr     eax,    2
        sub     ecx,    eax
        lea     eax,    [4*ecx+ecx+2]   ;m := (5 * e + 2) div 153;
        xor     edx,    edx
        mov     ebx,    153
        div     ebx
        push    eax
        mul     ebx                     ;Day  := e - ((153 * m + 2) div 5) + 1;
        add     eax,    2
        mov     ebx,    5
        div     ebx
        sub     ecx,    eax
        inc     ecx
        mov     eax,    [lpDay]
        mov     [eax],  ecx
        pop     eax                     ;Month := m + 3 - 12 * (m div 10);
        mov     ecx,    eax
        add     ebx,    ebx
        xor     edx,    edx
        div     ebx
        mov     ebx,    eax
        lea     eax,    [2*eax+eax]
        lea     eax,    [4*eax]
        sub     ecx,    eax
        add     ecx,    3
        mov     eax,    [lpMonth]
        mov     [eax],  ecx
        add     edi,    ebx             ;Year := 100 * b + d - 4800 + (m div 10);
        mov     eax,    100
        mul     esi
        lea     ecx,    [eax+edi-4800]
        mov     eax,    [lpYear]
        mov     [eax],  ecx
        ret
JdnToGregorian  endp
 
 
main    proc
 
        invoke  GetSystemTime,  ADDR stSysTime
        invoke  GetLocalTime,   ADDR stLocTime
 
        push    word ptr 0
        push    [stSysTime.wSecond]
        push    word ptr 0
        push    [stSysTime.wMinute]
        push    word ptr 0
        push    [stSysTime.wHour]
        push    offset aszFmtStr
        call    crt_printf
        add     esp,    4*4
 
        push    word ptr 0
        push    [stLocTime.wSecond]
        push    word ptr 0
        push    [stLocTime.wMinute]
        push    word ptr 0
        push    [stLocTime.wHour]
        push    offset aszFmtStr
        call    crt_printf
        add     esp,    4*4
 
 
        mov     [Day],  7
        mov     [Month],        11
        mov     [Year], 1957
 
        invoke  JDN,    [Day], [Month], [Year]
        mov     [_iJDN],        eax
 
        invoke  crt_printf,     ADDR aszFmtJulian, [_iJDN]
 
        mov     [Day],  0
        mov     [Month],        0
        mov     [Year], 0
        invoke  JdnToGregorian, [_iJDN], ADDR Day, ADDR Month, ADDR Year
        invoke  crt_printf,     ADDR aszFmtGregorian, [Day], [Month], [Year]
        ;завершение программы
        invoke  ExitProcess, 0
main    endp
 
end     main
0
Asm/C++/Delphi/Py/PHP/VBA
 Аватар для Jin X
6808 / 2048 / 238
Регистрация: 14.12.2014
Сообщений: 4,297
Записей в блоге: 12
02.09.2022, 18:58
Всё проще.
Если нужно обязательно GetSystemTime, то можно так:

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
format  PE Console 4.0
entry   start
 
include 'win32axp.inc'
 
;-- CODE SECTION -------------------------------------------------------------------------------------------------------
 
.code
 
start:
 
                invoke  GetTimeZoneInformation, timezone
                invoke  GetSystemTime, systemtime
                invoke  SystemTimeToTzSpecificLocalTime, timezone, systemtime, localtime
                invoke  GetTimeFormat, LOCALE_CUSTOM_DEFAULT, 0, localtime, 0, strbuffer, 1024
                cinvoke printf, <'%s',10>, strbuffer
                invoke  ExitProcess, 0
 
;-- DATA SECTION -------------------------------------------------------------------------------------------------------
 
LOCALE_CUSTOM_DEFAULT   =       0x0C00
 
struct TIME_ZONE_INFORMATION
  Bias          dd              ?
  StandardName  rw              32
  StandardDate  SYSTEMTIME      ?
  StandardBias  dd              ?
  DaylightName  rw              32
  DaylightDate  SYSTEMTIME      ?
  DaylightBias  dd              ?
ends
 
.data
timezone        TIME_ZONE_INFORMATION   ?
systemtime      SYSTEMTIME      ?
localtime       SYSTEMTIME      ?
strbuffer       rb              1024
 
;-- IMPORT SECTION -----------------------------------------------------------------------------------------------------
 
section '.idata' import data readable
 
library kernel32, 'kernel32.dll',\
        msvcrt, 'msvcrt.dll'
 
        import_kernel32
        all_api
 
import  msvcrt,\
        printf, 'printf'
Но можно и проще:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
format  PE Console 4.0
entry   start
 
include 'win32axp.inc'
 
;-- CODE SECTION -------------------------------------------------------------------------------------------------------
 
.code
 
start:
 
                invoke  GetTimeFormat, LOCALE_CUSTOM_DEFAULT, 0, 0, 0, strbuffer, 1024
                cinvoke printf, <'%s',10>, strbuffer
                invoke  ExitProcess, 0
 
;-- DATA SECTION -------------------------------------------------------------------------------------------------------
 
LOCALE_CUSTOM_DEFAULT   =       0x0C00
 
.data
strbuffer       rb              1024
 
;-- IMPORT SECTION -----------------------------------------------------------------------------------------------------
 
section '.idata' import data readable
 
library kernel32, 'kernel32.dll',\
        msvcrt, 'msvcrt.dll'
 
        import_kernel32
        all_api
 
import  msvcrt,\
        printf, 'printf'
Добавлено через 1 минуту
1024 – это, конечно, я лишканул, тут и 16 достаточно, ну или 32-64 для экзотики
1
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8644 / 4479 / 1669
Регистрация: 01.02.2015
Сообщений: 13,883
Записей в блоге: 11
02.09.2022, 19:51

Не по теме:

В эпоху слабого интернета у меня была практическая задача - для отображения и просмотра исторического тренда (графика изменения параметра за несколько суток в "окошке" по 10 минут) на панели оператора BrainChild нужно или постоянно вводить по 12 параметров (день, месяц, год, час, минуты, секунды начала и конца тренда) или указать адреса переменных, соответствующие им. Текущие дату и время можно было получить от часов реального времени, а начало графика получал вычитая 10 минут. Но получал неопределённость при переходе через начало суток.
Сначала растерялся, как решить задачу без множества ветвлений, а потом нашёл в сборнике алгоритмов Агеева идею с Юлианскими датами.
Панель скрипты не поддерживала, поэтому математику реализовал в ПЛК.


Не могу уяснить причины такой задачи - не использовать GetLocalTime - и тем более без пояснений, как решать, что читать, откуда взять недостающие данные...
Раз Windows позволяет решить проблему встроенными средствами, то и нужно так поступать. Как понимаю, GetLocalTime даёт данные из часов BIOS, а GetSystemTime на основе дополнительных настроек TimeZone формирует время UTC. Т.е. запрет исходного GetLocalTime не оправдан ничем, кроме ознакомления или с алгоритмами или с другими WinAPI.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.09.2022, 19:51
Помогаю со студенческими работами здесь

Получить текущее системное время
Здравствуйте! Пожалуйста, подскажите, какой командой в Pascal ABC.net можно получить системное или BIOS-овское время (задача - вывести...

Как получить текущее время?
Здравствуйте! Задание: Вывод списка электропоездов отправляющихся течение 2 часов (от текущего времени). Как получить текущее время?

Как получить текущее время в формате чч:мм:сс
Подскажите, есть необходимость получить текущее время в формате чч:мм:сс, как это реализовать?

Как получить текущее время в js - скрипте?
Всем привет! Вот например, чтобы получить текущую дату - код вот такой: //получаем текущую дату var d = new Date(); var...

Как получить текущее время в часах?
Здравствуйте! Сейчас по моему времени 15:06, если я напишу следующий код: import time a=time.time() print(a) ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru