Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/25: Рейтинг темы: голосов - 25, средняя оценка - 5.00
1 / 1 / 4
Регистрация: 01.06.2012
Сообщений: 150
1

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

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

Author24 — интернет-сервис помощи студентам
Здравствуйте Делаю отдельную форму настроек для программы. Включение отключение клавиши 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.07.2012, 18:35
Ответы с готовыми решениями:

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

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

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

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

4
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
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
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
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
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
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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.07.2012, 19:22
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru