Delphi 7. Проблема с ToolBar. Перестают вызываться методы OnClick

netlink
Дата: 26.05.2011 09:41:46
Добрый день.

Есть проблема. Создаю пустой проект. Кладу на него тулбар. Делаю 4 кнопки.
На каждую вешаю код по onclick.

В дизайнтайме делаю ToolButton2.Visible = false через окно свойств.

Проблема в том, что если на OnCreate делать ToolButton4.Visible := false;
то на форме остаются видны две кнопки, что правильно... но по нажатию на вторую иногда ничего не происходит.. а если происходит - то выводится вот это ShowMessage('1');

Что делать? Может есть патч какой-нить?

+
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, ToolWin;

type
  TForm1 = class(TForm)
    ToolBar1: TToolBar;
    ToolButton1: TToolButton;
    ToolButton2: TToolButton;
    ToolButton3: TToolButton;
    ToolButton4: TToolButton;
    procedure ToolButton1Click(Sender: TObject);
    procedure ToolButton2Click(Sender: TObject);
    procedure ToolButton3Click(Sender: TObject);
    procedure ToolButton4Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ToolButton1Click(Sender: TObject);
begin
  ShowMessage('1');
end;

procedure TForm1.ToolButton2Click(Sender: TObject);
begin
  ShowMessage('2');
end;

procedure TForm1.ToolButton3Click(Sender: TObject);
begin
  ShowMessage('3');
end;

procedure TForm1.ToolButton4Click(Sender: TObject);
begin
  ShowMessage('4');
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  ToolButton4.Visible := false;
end;

end.
Johnmen
Дата: 26.05.2011 10:37:31
В объявлении класса твоей формы
...
procedure Loaded; override;
...
Реализация Loaded
inherited Loaded;
ToolButton4.Visible := false;
netlink
Дата: 26.05.2011 10:40:48
Спасибо. Но мне надо не конкретный случай победить.. а целиком на уровне компонента... потому что есть много мест в проекте где на это заточено - а найти их будет нереально.

Спасибо за Loaded - не знал )
Johnmen
Дата: 26.05.2011 10:45:10
netlink,

Какого компонента?
netlink
Дата: 26.05.2011 10:48:52
Тулбара.....
DimaBr
Дата: 26.05.2011 12:27:29
netlink
Но мне надо не конкретный случай победить.. а целиком на уровне компонента..

Целиком - наследник
maratvg
Дата: 26.05.2011 13:30:55
можно вот так сделать:
procedure TForm1.FormCreate(Sender: TObject);
begin
  ToolButton4.Visible := false;
  ToolBar.Realign;
end;

или, если память не изменяет, перенести ToolButton4.Visible := false; в FormShow. Тогда Realign не нужен будет.
netlink
Дата: 27.05.2011 10:38:24
Спасибо. Да работает. А почему он сам это не делает при изменении Visible?
DimaBr
Дата: 27.05.2011 10:53:07
ToolBar - вообще самый глючный компонент.
FlyD
Дата: 27.05.2011 12:53:04
netlink
...
на форме остаются видны две кнопки, что правильно... но по нажатию на вторую иногда ничего не происходит..
еще один "фокус" с тулбаром: сообщение "3" появится, если кликнуть правее двух кнопок (при первоначальном варианте кода)