Эффект нажатой клавиши

  • Автор темы Guest_ACLeo_*
  • Дата начала
Статус
Закрыто для дальнейших ответов.
G

Guest_ACLeo_*

Гость
#1
Есть кнопка SpeedButton свойство Flat утсановлено True. Мне необходимо при нажатии этой кнопки , чтобы она оставалась нажатой до определенного момента!
Так удобнее пользователю видеть, что он нажал (есть и такие!). Заранее спасибо!
 
B

Barmutik

Гость
#2
Устанвливаете свойство GroupIndex в число отличное от нуля и свойство AllowAllUp в True и всё будет работать...
 
B

Baton77

Гость
#3
А как правильно записать и считать из ini состояние кнопки ?
Пробую так :
Код:
destructor TForm1.Destroy;
...
WriteBool('Editor', 'WordWpap', SpeedButton1.Down);
PrgINI.Free;
inherited Destroy;
end;

procedure TForm1.CreateParams(var Params: TCreateParams);
...
SpeedButton1.Down := ReadBool('Editor', 'WordWpap', True);
...
end;
Запись в файл работает, а при старте программа вылетает(не может прочитать?) :angry:
 
B

Barmutik

Гость
#4
А Вы уже создали Ini файл перед чтением ?
 
B

Baton77

Гость
#5
Вроде да, остальное ведь работает...


Код:
constructor TForm1.Create(AOwner: TComponent);
begin
PrgINI := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'BBcode.ini');
inherited Create(AOwner);
end;

procedure TForm1.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
with Params do
begin
Y := PrgINI.ReadInteger('Position', 'Top', Top);
X := PrgINI.ReadInteger('Position', 'Left', Left);
Width := PrgINI.ReadInteger('Position', 'Width', Width);
Height := PrgINI.ReadInteger('Position', 'Height', Height);
Memo.Font.Charset := PrgINI.ReadInteger('Editor', 'CharSet', RUSSIAN_CHARSET);
Memo.Font.Color := PrgINI.ReadInteger('Editor', 'FontColor', clWindowText);
Memo.Font.Size := PrgINI.ReadInteger('Editor', 'FontSize', 10);
Memo.Color := PrgINI.ReadInteger('Editor', 'EditorColor', clWindow);
SpeedButton1.Down := ReadBool('Editor', 'WordWpap', True);
end;
end;

procedure TForm1.DoShow;
var
aWindowState: integer;
begin
aWindowState := PrgINI.ReadInteger('position', 'WindowState', 0);
case aWindowState of
0: WindowState := wsNormal;
1: WindowState := wsMinimized;
2: WindowState := wsMaximized;
end;
end;

destructor TForm1.Destroy;
begin
if WindowState = wsNormal then
begin
PrgINI.WriteInteger('Position', 'Top', Top);
PrgINI.WriteInteger('Position', 'Left', Left);
end;
PrgINI.WriteInteger('Position', 'Width', 802);
PrgINI.WriteInteger('Position', 'Height', 606);
case WindowState of
wsNormal: PrgINI.WriteInteger('Position', 'WindowState', 0);
wsMinimized: PrgINI.WriteInteger('Position', 'WindowState', 1);
wsMaximized: PrgINI.WriteInteger('Position', 'WindowState', 2);
end;
PrgINI.WriteInteger('Editor', 'CharSet', Memo.Font.CHARSET);
PrgINI.WriteInteger('Editor', 'FontColor', Memo.Font.Color);
PrgINI.WriteInteger('Editor', 'FontSize', Memo.Font.Size);
PrgINI.WriteInteger('Editor', 'EditorColor', Memo.Color);
PrgINI.WriteBool('Editor', 'WordWpap', SpeedButton1.Down);
PrgINI.Free;
inherited Destroy;
end;
В ини записывается строка : WordWpap с параметром 0 или 1. :angry:
 
B

Barmutik

Гость
#6
Ну всё правильно .. значение истина или ложь...

Странно .. а чего ж Вы не читаете как все остальные параметры:

Код:
	SpeedButton1.Down := PrgINI.ReadBoolean('Editor', 'WordWpap', True);
А используете ReadBool?
 
B

Baton77

Гость
#7
Наверное, что-то не то делаю...
В uses добавлен inifiles, но там нет функции ReadBoolean, а только ReadBool.
:angry:



P.S.


Заработало...
Пришлось переместить функцию ReadBool из CreateParams в FormCreate и добавить обработку SpeedButton1.

Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
...
SpeedButton1.Down := PrgINI.ReadBool('Editor', 'WordWpap', True);
if SpeedButton1.Down = True then
begin
Memo.WordWrap := True;
Memo.ScrollBars := ssVertical;
end;
if SpeedButton1.Down = False then
begin
Memo.WordWrap := False;
Memo.ScrollBars := ssBoth;
end;
end;

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
if SpeedButton1.Down = True then
begin
Memo.WordWrap := True;
Memo.ScrollBars := ssVertical;
end;
if SpeedButton1.Down = False then
begin
Memo.WordWrap := False;
Memo.ScrollBars := ssBoth;
end;
end;
Меньше кода сделать не получилось...

Barmutik, спасибо за участие! :)
 
Статус
Закрыто для дальнейших ответов.