Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.64/33: Рейтинг темы: голосов - 33, средняя оценка - 4.64
 Аватар для Gudzik11
1 / 1 / 1
Регистрация: 14.09.2011
Сообщений: 264

Глобальные сочетания клавиш

22.09.2011, 09:31. Показов 7568. Ответов 40
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите как своернуть,развернуть форму при нажатии CTRL+ALT+F10
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.09.2011, 09:31
Ответы с готовыми решениями:

Создание сочетания клавиш
Доброго всем вечера. Извините за частые вопросы. Подскажите, пожалуйста, где можно найти литературу или сайт, где описано создания в Delphi...

Активность сочетания клавиш MainMenu
Доброго времени суток! Такая картина - при открытии главной формы, она становится прозрачной и открывается форма 2 - для авторизации...

Отлов нажатия сочетания клавиш
Скажите код как сделать чтобы по нажатию например клавиш Shift+F6 выполнялся какой либо код(открылась форма, или showmessage) ??

40
 Аватар для Gudzik11
1 / 1 / 1
Регистрация: 14.09.2011
Сообщений: 264
25.09.2011, 17:00  [ТС]
Студворк — интернет-сервис помощи студентам
да она работать будет всё время.
0
 Аватар для deathNC
1905 / 1016 / 123
Регистрация: 08.12.2009
Сообщений: 2,792
Записей в блоге: 2
25.09.2011, 17:08
Фух блин...
Матерился полчаса, а всё из-за того, что я вместо этого:
Delphi
1
ShowMessage(Handle, SW_Hide);
использовал: Self.Hide; и ничего толком не работало

Ну, ладно. Реализовал вывод иконки через API, т.к. компонента для трея в D7 ещё не было

p.s. Там я добавил в uses модуль ShellAPI...
Вложения
Тип файла: rar Global HotKey.rar (21.1 Кб, 18 просмотров)
1
 Аватар для Gudzik11
1 / 1 / 1
Регистрация: 14.09.2011
Сообщений: 264
25.09.2011, 17:14  [ТС]
Спасибо тебе
0
 Аватар для deathNC
1905 / 1016 / 123
Регистрация: 08.12.2009
Сообщений: 2,792
Записей в блоге: 2
25.09.2011, 17:16
Заработало?
0
 Аватар для Gudzik11
1 / 1 / 1
Регистрация: 14.09.2011
Сообщений: 264
25.09.2011, 17:33  [ТС]
А ты можешь мою программку подправить ? а то я чёт застрял на этих клавишах.
Вложения
Тип файла: rar С клавишами.rar (387.4 Кб, 12 просмотров)
0
 Аватар для Gudzik11
1 / 1 / 1
Регистрация: 14.09.2011
Сообщений: 264
25.09.2011, 17:38  [ТС]
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
procedure TForm1.WMHotKey(var Msg: TWMHotKey);
begin
if Msg.HotKey = id1 then {CTRL+ALT+F10}                             в этом месте
WindowState:= wsMinimized ;
 
   if Msg.HotKey = id2 then
     ShowMessage('Ctrl + Alt + R pressed !');
   if Msg.HotKey = id3 then
     ShowMessage('Win + F4 pressed !');
   if Msg.HotKey = id4 then
     ShowMessage('Print Screen pressed !');
end;
0
 Аватар для deathNC
1905 / 1016 / 123
Регистрация: 08.12.2009
Сообщений: 2,792
Записей в блоге: 2
25.09.2011, 18:53
Delphi
1
2
if Msg.HotKey = id1 then {CTRL+ALT+F10}                            // в этом месте
WindowState:= wsMinimized ;
Лучше избегай использование VCL
Сделай так через API
Delphi
1
2
if Msg.HotKey = id1 then {CTRL+ALT+F10}                            // в этом месте
  SendMessage(Handle, WM_SYSCOMMAND, SC_MINIMIZE, 1);
А то я тоже взял, и сделал Form1.Hide, и не работало, пока на API не перешёл...
1
 Аватар для Gudzik11
1 / 1 / 1
Регистрация: 14.09.2011
Сообщений: 264
25.09.2011, 21:02  [ТС]
Всё работает если делать так
Delphi
1
2
if Msg.HotKey = id1 then {CTRL+ALT+F10}                            
  SendMessage(Handle, WM_SYSCOMMAND, SC_MINIMIZE, 1);
но мне надо чтобы при нажатии CTRL+ALT+F10 оно могло и востанавливаться
к приеру
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
procedure TMainForm.WMHotKey(var Msg: TWMHotKey);
begin
  If Msg.HotKey = id1 then
    begin
      If SendMessage(Handle, WM_SYSCOMMAND, SC_MINIMIZE, 1);
        begin
          ShowWindow(Handle,SW_SHOW);
          
        end
      else if ShowWindow(Handle,SW_SHOW);
        SendMessage(Handle, WM_SYSCOMMAND, SC_MINIMIZE, 1);
end;
както так должно быть но так не работает пишет ошибка
Type of expression must be BOOLIAN
Помоги а то уже какой день бьюсь с этим
0
 Аватар для deathNC
1905 / 1016 / 123
Регистрация: 08.12.2009
Сообщений: 2,792
Записей в блоге: 2
25.09.2011, 22:08
Так ты из примера скопруй...


Цитата Сообщение от Gudzik11 Посмотреть сообщение
Type of expression must be BOOLIAN
Это возникает из-за:
Delphi
1
2
3
4
5
If SendMessage(Handle, WM_SYSCOMMAND, SC_MINIMIZE, 1);
        begin
          ShowWindow(Handle,SW_SHOW);
          
        end
Вот тут вообще не пойму, что должно происходить
???

Добавлено через 2 минуты
В примере я отдельную переменную заводил
Delphi
1
2
private
    _is_visible: Boolean;
в которой содержится состояние окна - скрыто/показано...
1
 Аватар для Gudzik11
1 / 1 / 1
Регистрация: 14.09.2011
Сообщений: 264
25.09.2011, 22:25  [ТС]
и как же быть?
0
 Аватар для deathNC
1905 / 1016 / 123
Регистрация: 08.12.2009
Сообщений: 2,792
Записей в блоге: 2
25.09.2011, 22:33
Ну, в смысле. При старте проги в FormCreate пишем:
Delphi
1
  _is_visible := true;
А потом для события - нажатие нашего сочетания клавиш:
Delphi
1
2
3
4
5
6
7
8
9
procedure TMainForm.WMHotKey(var Msg: TWMHotKey);
begin
  If Msg.HotKey = id1 then
    begin
      If _is_visible then
        PostMessage(Handle, WM_SYSCOMMAND, SC_MINIMIZE, 1)
      else
        PostMessage(Handle, WM_User + 2, 1, WM_LButtonUp);
    end;
И в соответствующих процедурах _is_visible будет меняться должным образом.

Короче, если код у тебя не чересчур гигантский, то выкладывай его сюда. Если гигантский, то выкладывай только те функции, в которых вся эта дурь реализуется (со сворачиванием в трей и с глобальным сочетанием клавиш)....

Добавлено через 12 секунд
Постараемся разобраться...
1
 Аватар для Gudzik11
1 / 1 / 1
Регистрация: 14.09.2011
Сообщений: 264
25.09.2011, 22:46  [ТС]
вроде не большая
Вложения
Тип файла: rar С клавишами.rar (388.9 Кб, 8 просмотров)
0
 Аватар для deathNC
1905 / 1016 / 123
Регистрация: 08.12.2009
Сообщений: 2,792
Записей в блоге: 2
25.09.2011, 22:53
А где:
Delphi
1
Unit1 in '..\..\Программы\Система\Програмирование\Delphi\Проэкты\Пример работы\Пример работы с треем\Пример работы с треем\Unit1.pas' {Form1};
???
0
 Аватар для Gudzik11
1 / 1 / 1
Регистрация: 14.09.2011
Сообщений: 264
25.09.2011, 22:54  [ТС]
и глянь в Timer2 как там сделать чтоб счётчик считал не 2:3:4 а 02:03:04 если не тяжело
0
 Аватар для deathNC
1905 / 1016 / 123
Регистрация: 08.12.2009
Сообщений: 2,792
Записей в блоге: 2
25.09.2011, 23:01
Где Unit1 взять? Нет его в архиве!
0
 Аватар для Gudzik11
1 / 1 / 1
Регистрация: 14.09.2011
Сообщений: 264
25.09.2011, 23:08  [ТС]
блин если добавляю в архив после извлечения пишет ошибка.
попробуй эту помоем она работает
https://www.cyberforum.ru/atta... 1316957577
на 3 странице

Добавлено через 5 минут
Delphi
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
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus,ShellAPI, StdCtrls, ExtCtrls;
 
type
  TForm1 = class(TForm)
    pmTreyMenu: TPopupMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Timer1: TTimer;
    Label9: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    Timer2: TTimer;
        {Òðåé}
    Procedure ControlWindow(Var Msg:TMessage); message WM_SYSCOMMAND;
    Procedure IconMouse(var Msg:TMessage); message WM_USER+1;
    Procedure  Ic(n:Integer;Icon:TIcon);
    Procedure OnMinimizeProc(Sender:TObject);
    procedure N1Click(Sender: TObject);
    procedure N2Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Timer2Timer(Sender: TObject);
  private
    { Private declarations }
     id1, id2, id3, id4: Integer;
     procedure WMHotKey(var Msg: TWMHotKey); message WM_HOTKEY;
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  x: Word;
  s,m,n:Integer;
 
implementation
 
{$R *.dfm}
 {======================================}
{Ìåòîäû äëÿ äîáàâëåíèÿ ïðîãðàììû â òðåé}
{======================================}
procedure TForm1.IconMouse(var Msg:TMessage);
Var p:tpoint;
begin
 GetCursorPos(p); // Çàïîìèíàåì êîîðäèíàòû êóðñîðà ìûøè
 Case Msg.LParam OF  // Ïðîâåðÿåì êàêàÿ êíîïêà áûëà íàæàòà
  WM_LBUTTONUP,WM_LBUTTONDBLCLK: {Äåéñòâèÿ, âûïîëíÿåìûé ïî îäèíàðíîìó èëè äâîéíîìó ùåë÷êó ëåâîé êíîïêè ìûøè íà çíà÷êå.  íàøåì ñëó÷àå ýòî ïðîñòî àêòèâàöèÿ ïðèëîæåíèÿ}
                   Begin
                    Ic(2,Application.Icon);  // Óäàëÿåì çíà÷îê èç òðåÿ
                    ShowWindow(Application.Handle,SW_SHOW); // Âîññòàíàâëèâàåì êíîïêó ïðîãðàììû
                    ShowWindow(Handle,SW_SHOW); // Âîññòàíàâëèâàåì îêíî ïðîãðàììû
                    Update;
                   End;
  WM_RBUTTONUP: {Äåéñòâèÿ, âûïîëíÿåìûé ïî îäèíàðíîìó ùåë÷êó ïðàâîé êíîïêè ìûøè}
   Begin
    SetForegroundWindow(Handle);  // Âîññòàíàâëèâàåì ïðîãðàììó â êà÷åñòâå ïåðåäíåãî îêíà
    pmTreyMenu.Popup(p.X,p.Y);  // Çàñòàâëÿåì âñïëûòü íàøå PopMenu
    PostMessage(Handle,WM_NULL,0,0);
   end;
 End;
end;
 
Procedure TForm1.OnMinimizeProc(Sender:TObject);
Begin
 PostMessage(Handle,WM_SYSCOMMAND,SC_MINIMIZE,0);
End;
 
Procedure TForm1.ControlWindow(Var Msg:TMessage);
Begin
 IF Msg.WParam=SC_MINIMIZE then
  Begin
   Ic(1,Application.Icon);                    // Äîáàâëÿåì çíà÷îê â òðåé
   ShowWindow(Handle,SW_HIDE);                // Ñêðûâàåì ïðîãðàììó
   ShowWindow(Application.Handle,SW_HIDE);  // Ñêðûâàåì êíîïêó ñ TaskBar'à
 End
 else inherited;
End;
 
Procedure TForm1.Ic(n:Integer;Icon:TIcon);
Var Nim:TNotifyIconData;
begin
 With Nim do
  Begin
   cbSize:=SizeOf(Nim);
   Wnd:=Self.Handle;
   uID:=1;
   uFlags:=NIF_ICON or NIF_MESSAGE or NIF_TIP;
   hicon:=Icon.Handle;
   uCallbackMessage:=wm_user+1;
   szTip :='Èçó÷àåì ðàáîòó ñ òðååì';
  End;
 Case n OF
  1: Shell_NotifyIcon(Nim_Add,@Nim);
  2: Shell_NotifyIcon(Nim_Delete,@Nim);
  3: Shell_NotifyIcon(Nim_Modify,@Nim);
 End;
end;
procedure TForm1.N1Click(Sender: TObject);
begin
 ShowMessage('Àâòîð ïðèìåðà: Äþêîâ Êîíñòàíòèí' + #13#10 + 'ñ âîïðîñàìè îáðàùàòüñÿ ñþäà:' + #13#10 + 'ICQ:353788400');
end;
 
procedure TForm1.N2Click(Sender: TObject);
begin
  Ic(2,Application.Icon);
Close;
end;
 
procedure TForm1.Timer1Timer(Sender: TObject);
begin  //Âðåìÿ
Label1.Caption:=FormatDateTime('ss', Time);
Label8.Caption:=FormatDateTime('mm', Time);
Label9.Caption:=FormatDateTime('hh', Time)
end;
 
procedure TForm1.FormCreate(Sender: TObject);
const
   MOD_ALT = 1;
   MOD_CONTROL = 2;
   MOD_SHIFT = 4;
   MOD_WIN = 8;
   VK_A = #68;
   VK_R = $52;
   VK_F4 = $73;
Var x:Word;
begin
  s:=60 ;
  m:=20;
  n:=2 ;
   begin
   // Register Hotkey Ctrl + A 
  id1 := GlobalAddAtom('Hotkey1');
   RegisterHotKey(Handle, id1, MOD_CONTROL + MOD_Alt, VK_F10);
 
   // Register Hotkey Ctrl + Alt + R 
  id2 := GlobalAddAtom('Hotkey2');
   RegisterHotKey(Handle, id2, MOD_CONTROL + MOD_Alt, VK_R);
 
   // Register Hotkey Win + F4 
  id3 := GlobalAddAtom('Hotkey3');
   RegisterHotKey(Handle, id3, MOD_WIN, VK_F4);
 
   // Globally trap the Windows system key "PrintScreen" 
  id4 := GlobalAddAtom('Hotkey4');
   RegisterHotKey(Handle, id4, 0, VK_SNAPSHOT);
 end;
Label2.Caption:=DateTostr(Date);
x:= DayOfWeek(Date);
  Case x of
  1: Label7.Caption:='âîñêðåñåíüå';
  2: Label7.Caption:='ïîíåäåëüíèê';
  3: Label7.Caption:='âòîðíèê';
  4: Label7.Caption:='ñðåäà';
  5: Label7.Caption:='÷åòâåðã';
  6: Label7.Caption:='ïÿòíèöà';
  7: Label7.Caption:='ñóááîòà';
end;
end;
 
procedure TForm1.WMHotKey(var Msg: TWMHotKey);
begin
if Msg.HotKey = id1 then {CTRL+ALT+F10}
 
        SendMessage(Handle, WM_SYSCOMMAND, SC_MINIMIZE, 1);
 
   if Msg.HotKey = id2 then
     ShowMessage('Ctrl + Alt + R pressed !');
   if Msg.HotKey = id3 then
     ShowMessage('Win + F4 pressed !');
   if Msg.HotKey = id4 then
     ShowMessage('Print Screen pressed !');
end;
 
procedure TForm1.FormDestroy(Sender: TObject);
begin
 UnRegisterHotKey(Handle, id1);
   GlobalDeleteAtom(id1);
   UnRegisterHotKey(Handle, id2);
   GlobalDeleteAtom(id2);
   UnRegisterHotKey(Handle, id3);
   GlobalDeleteAtom(id3);
   UnRegisterHotKey(Handle, id4);
   GlobalDeleteAtom(id4);
end;
 
procedure TForm1.Timer2Timer(Sender: TObject);
begin
s:=s-1;
Label3.Caption:=IntToStr(n)+':'+IntToStr(m)+':'+IntToStr(s);
if s<10 then
Label3.Caption:=IntToStr(n)+':'+IntToStr(m)+':'+'0'+IntToStr(s);
end;
 
end.
Добавлено через 1 минуту
может как то по другому надо сжимать?
0
 Аватар для deathNC
1905 / 1016 / 123
Регистрация: 08.12.2009
Сообщений: 2,792
Записей в блоге: 2
25.09.2011, 23:11
Дело не в сжатии. Модуль в другой папке лежит. Даже посмотри на это:
"..\..\Программы\Система\Програмирование \Delphi\Проэкты\Пример работы\Пример работы с треем\Пример работы с треем\Unit1.pas"
Это значит, заходишь в папку с проектом, потом на 2 уровня вверх, и дальше к текущему пути прибавить этот:
"Программы\Система\Програмирование\Delph i\Проэкты\Пример работы\Пример работы с треем\Пример работы с треем\Unit1.pas"
Вот тут твой модуль лежит!

А теперь уж ладно, и так посмотрю...

Я вообще-то изначально и хотел, чтоб ты прям сюда код выложил, а не архив.
1
 Аватар для Gudzik11
1 / 1 / 1
Регистрация: 14.09.2011
Сообщений: 264
25.09.2011, 23:42  [ТС]
точно ты был прав .
если надо вот проект
Вложения
Тип файла: rar Пример работы с треем.rar (173.3 Кб, 20 просмотров)
0
 Аватар для Gudzik11
1 / 1 / 1
Регистрация: 14.09.2011
Сообщений: 264
26.09.2011, 22:41  [ТС]
ну как успехи не чё не выходит?
0
 Аватар для deathNC
1905 / 1016 / 123
Регистрация: 08.12.2009
Сообщений: 2,792
Записей в блоге: 2
27.09.2011, 00:53
Тьфу блин... забыл совсем
щас гляну

Добавлено через 1 час 7 минут
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
procedure TForm1.WMHotKey(var Msg: TWMHotKey);
begin
  If Msg.HotKey = id1 then
    begin
      If IsWindowVisible(Self.Handle) then
        PostMessage(Handle, WM_SYSCOMMAND, SC_MINIMIZE, 1)
      else
        PostMessage(Handle, WM_User + 1, 1, WM_LBUTTONUP);
    end
  else if Msg.HotKey = id2 then
    ShowMessage('Ctrl + Alt + R pressed !')
  else if Msg.HotKey = id3 then
    ShowMessage('Win + F4 pressed !')
  else if Msg.HotKey = id4 then
    ShowMessage('Print Screen pressed !');
end;
Добавлено через 7 минут
А со временем - я, честно говоря, не вникал в твои коды. Я только могу подсказать: если у тебя по отдельности есть часы, минуты и секунды, то можешь перевести их String таким образом:
Delphi
1
2
3
4
5
6
7
function _time_to_string(_hour, _minute, _second: Word): String;
var
  _time: TDateTime;
begin
  _time := EncodeTime(_hour, _minute, _second, 0);
  Result := TimeToStr(_time);
end;
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.09.2011, 00:53

Назначения сочетания клавиш на события в Delphi
Доброго времени суток) столкнулся с такой вот проблемой:у меня при нажатии кнопки форма должна исчезать. но её нужно в любой момент...

Отобразить элемент по нажатию сочетания клавиш
Доброго времени, тут такое дело. В общем, есть форма, на ней кнопка, у кнопки Visible := false Нужно сделать так, что бы по нажатию...

Как избавиться от звука во время нажатия сочетания клавиш?
Здравия ув. формчане! Зажал контрол + а находясь в мемо и происходит стандартный виндосовский звук 'тун'. Как можно от него избавиться?...

При нажатии заданной клавиши эмулировать нажатие сочетания клавиш
Ребят, посоветуйте гайд, о том как создать биндер клавиш на delphi, что бы при нажатии одной клавиши например f2, происходило виртуальное...

Программно послать нажатие клавиши (сочетания клавиш) стороннему приложению
Господа, подскажите пример как программно послать комбинацию клавиш стороннему приложению?


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru