Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
cezer
1 / 1 / 4
Регистрация: 01.06.2012
Сообщений: 150
1

Окно настроек клавиша Insert

10.07.2012, 18:35. Просмотров 2597. Ответов 4
Метки нет (Все метки)

Здравствуйте Делаю отдельную форму настроек для программы. Включение отключение клавиши Insert Сворачивания в трей. запускаю форму убираю галочку с чек бокса первый раз Insert не срабатывает нажимаю второй раз и он срабатывает хотя не должен пока в чек боксе не будет стоять галочка. Вот код в чем ошибка не могу найти((( :

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
unit Unit1;
 
interface
 
uses
  Windows, Messages, IniFiles, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, jpeg, CoolTrayIcon;
 
type
  TForm1 = class(TForm)
    CheckBox1: TCheckBox;
    Timer1: TTimer;
    CheckBox3: TCheckBox;
    CheckBox4: TCheckBox;
    CTI1: TCoolTrayIcon;
    procedure FormActivate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Timer1Timer(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure CheckBox3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
     procedure WMHotKey(var Msg: TWMHotKey); message WM_HOTKEY; // insert
  end;
 
var
  Form1: TForm1;
   Ini: TIniFile;
    CheckWindow: Boolean = True; //клавиша insert
   const
  MyHotKey = VK_INSERT;
 
implementation
 
{$R *.dfm}
{ TForm1 }
procedure IniInit(const FName: String);
begin
  Ini := TIniFile.Create(ExtractFilePath(ParamStr(0))+FName+'.ini');
end;
 
procedure TForm1.FormActivate(Sender: TObject);
begin
IniInit('config');
     CheckBox3.Checked := Ini.ReadBool('Insert', 'value', True);
end;
 
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
IniInit('config');
      Ini.WriteBool('Insert', 'value', CheckBox3.Checked);
  Ini.Free;
 
end;
 
procedure TForm1.Timer1Timer(Sender: TObject);
begin
    CheckWindow:=CheckBox3.Checked;         //Insert
  timer1.Enabled:=false;                     // таймер
  beep;
end;
 
 
procedure TForm1.FormDestroy(Sender: TObject);
begin
  UnRegisterHotKey(Handle, MyHotKey);
end;
 
 
procedure TForm1.WMHotKey(var Msg: TWMHotKey);
begin
  if Msg.HotKey = VK_INSERT then
    begin
      if CheckWindow then CTI1.HideMainForm
        else CTI1.ShowMainForm;
        CheckWindow := not CheckWindow;
    end;
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
 RegisterHotKey(Handle, MyHotKey, 0, MyHotKey);
end;
 
procedure TForm1.CheckBox3Click(Sender: TObject);
begin
timer1.Enabled:=true;
CheckWindow:=true;
end;
 
end.
Добавлено через 2 часа 47 минут
Подскажите кто знает если не трудно.
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.07.2012, 18:35
Ответы с готовыми решениями:

Как сделать окно настроек (слева-категории, справа-настройки)?
как сделать окно настроек, похожее на то, как в total commander, где слева в древовидной структуре...

Не работает клавиша Insert
Вопрос конечно туповатый, но все таки... Как проверить кнопку Insert на клаве на работоспособность?...

Общее окно настроек
Здравствуйте! Такая ситуация: есть форма с табконтролом, на котором n-e количество вкладок; в...

Окно настроек исходники
Скачал один небольшой исходник там есть настройки персонажа см на скрин отметил красным. А где его...

Окно настроек. ListPreference
В окне настроек вывожу чекбоксы с одиночным выбором (кружки): <ListPreference...

4
Одиночка
3937 / 1862 / 337
Регистрация: 16.03.2012
Сообщений: 3,869
10.07.2012, 20:54 2
Закрутил, конечно, будь здоров. Зачем тебе таймер? Только чтобы установить значение:
Delphi
1
CheckWindow:=CheckBox3.Checked;
если у тебя CheckWindow всё равно меняется при нажатии на клавишу Insert.
И при нажатии Insert скрывается и показывается окно, независимо от твоего CheckBox-а.
Можно сделать так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
procedure TForm1.WMHotKey(var Msg: TWMHotKey);
begin
  if Msg.HotKey = VK_INSERT then
    begin
      if CheckWindow then CTI1.HideMainForm else //Скрывать в любом случае
      if CheckBox3.Checked Then CTI1.ShowMainForm; //Показывать только если CheckBox3.Checked
        CheckWindow := not CheckWindow;
    end;
end;
 
procedure TForm1.CheckBox3Click(Sender: TObject);
begin
  CheckWindow:=CheckBox3.Checked; //Следующее нажатие Insert скроет или покажет окно
                                     //в зависимости от состояния CheckBox3.Checked
end;
Кстати. В событии формы FormActivate у тебя стоит инициализация ini-файла. Это событие наступает каждый раз при активации формы. Т.е. перешел в другое окно, потом назад - наступило событие FormActivate и т.п. Если повторно выполнять Ini:=TIniFile.Create, я не уверен, что не будет утечки памяти.
Советую перенести тот код в FormCreate.
1
cezer
1 / 1 / 4
Регистрация: 01.06.2012
Сообщений: 150
11.07.2012, 12:02  [ТС] 3
Цитата Сообщение от Одиночка Посмотреть сообщение
Закрутил, конечно, будь здоров. Зачем тебе таймер? Только чтобы установить значение:
Delphi
1
CheckWindow:=CheckBox3.Checked;
если у тебя CheckWindow всё равно меняется при нажатии на клавишу Insert.
И при нажатии Insert скрывается и показывается окно, независимо от твоего CheckBox-а.
Можно сделать так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
procedure TForm1.WMHotKey(var Msg: TWMHotKey);
begin
  if Msg.HotKey = VK_INSERT then
    begin
      if CheckWindow then CTI1.HideMainForm else //Скрывать в любом случае
      if CheckBox3.Checked Then CTI1.ShowMainForm; //Показывать только если CheckBox3.Checked
        CheckWindow := not CheckWindow;
    end;
end;
 
procedure TForm1.CheckBox3Click(Sender: TObject);
begin
  CheckWindow:=CheckBox3.Checked; //Следующее нажатие Insert скроет или покажет окно
                                     //в зависимости от состояния CheckBox3.Checked
end;
Кстати. В событии формы FormActivate у тебя стоит инициализация ini-файла. Это событие наступает каждый раз при активации формы. Т.е. перешел в другое окно, потом назад - наступило событие FormActivate и т.п. Если повторно выполнять Ini:=TIniFile.Create, я не уверен, что не будет утечки памяти.
Советую перенести тот код в FormCreate.
Спасибо за ответ Одиночка! на счет таймера просто прозрачность формы иконка и прилипание к краям стояли на таймере чекбокс я подумал и инсерт туда впиндюрить) не проканало( Ещё раз спасибо за код!

Добавлено через 4 часа 9 минут
Цитата Сообщение от cezer Посмотреть сообщение
Спасибо за ответ Одиночка! на счет таймера просто прозрачность формы иконка и прилипание к краям стояли на таймере чекбокс я подумал и инсерт туда впиндюрить) не проканало( Ещё раз спасибо за код!
Слушай а что можно поменять чтоб когда чек бокс нажат то Insert вообще не проканывает а то сейчас ставлю первый раз сворачивает и дальше отключает Insert а как сделать чтоб вообще не сворачивал если нажали чек бокс?
0
Одиночка
3937 / 1862 / 337
Регистрация: 16.03.2012
Сообщений: 3,869
11.07.2012, 18:17 4
Слушай а что можно поменять чтоб когда чек бокс нажат то Insert вообще не проканывает а то сейчас ставлю первый раз сворачивает и дальше отключает Insert а как сделать чтоб вообще не сворачивал если нажали чек бокс?
Выражение "нажали чек бокс" какое-то неопределённое. Как я понял, окно должно сворачиваться/показываться только при отмеченном чекбокс-е. Если да, тогда так:
Delphi
1
2
3
4
5
6
7
8
9
10
procedure TForm1.WMHotKey(var Msg: TWMHotKey);
begin
  if CheckBox3.Checked Then //Клавиша будет контролироваться, только если CheckBox3.Checked=True
  if Msg.HotKey = VK_INSERT then
    begin
      if CheckWindow then CTI1.HideMainForm else 
      CTI1.ShowMainForm;
        CheckWindow := not CheckWindow;
    end;
end;
1
cezer
1 / 1 / 4
Регистрация: 01.06.2012
Сообщений: 150
11.07.2012, 19:22  [ТС] 5
Цитата Сообщение от Одиночка Посмотреть сообщение
Выражение "нажали чек бокс" какое-то неопределённое. Как я понял, окно должно сворачиваться/показываться только при отмеченном чекбокс-е. Если да, тогда так:
Delphi
1
2
3
4
5
6
7
8
9
10
procedure TForm1.WMHotKey(var Msg: TWMHotKey);
begin
  if CheckBox3.Checked Then //Клавиша будет контролироваться, только если CheckBox3.Checked=True
  if Msg.HotKey = VK_INSERT then
    begin
      if CheckWindow then CTI1.HideMainForm else 
      CTI1.ShowMainForm;
        CheckWindow := not CheckWindow;
    end;
end;
Класс ты ещё и экстрасенс))) Обожаю этот форум, спасибо, сейчас проверю код.

Добавлено через 18 минут
Цитата Сообщение от cezer Посмотреть сообщение
Класс ты ещё и экстрасенс))) Обожаю этот форум, спасибо, сейчас проверю код.
Одиночка спасибо. Полет отличный. Ты Мега-Мозг!
0
11.07.2012, 19:22
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.07.2012, 19:22

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Окно настроек для игры
Здравствуйте! Хочу создать окно настроек. Запуская игру, открывается основное меню (начать игру,...

Окно или панель настроек
Как создать такое окно настроек? Допустим я кликаю через меню, Файл->настройки А после у меня...

Вызвать окно настроек сетевого подключения
Нужно программно вызвать стандартное виндосовское окно настроек сетевого подключения, по ID, GUID,...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.