Правильно делает. У тебя в момент создания меню (а OnChange вызывается именно в момент создания, или при переформировании меню, а не при щелчке на его элементе) Source = nil со всеми вытекающими последствиями. Лови TMenuItem.OnClick для каждого их пунктов меню и делай то, что тебе надо:
procedure TForm1.N101Click(Sender: TObject); var s: string; p: integer; begin s := (Sender as TMenuItem).Caption; p := pos('&', s); if p > 0 then Delete(s, p, 1);
Memo1.Font.Size := StrToInt(s); end;
, всем остальным пунктам назначь этот же обработчик...
СПАСИБО! А почему '&' символ в разных пунктах на разных позициях? И еще, допустим есть 2 кнопки. При нажатии на кнопку1 происходят определенные действия. А при нажатии на кнопку2 сначала происходят какие-то действия, а потом тоже самое, что и при нажатии кнопки1. Как вызвать нажатие кнопки1 при щелчке на кнопку2?(можно конечно написать свою процедуру, но это не то)
А почему '&' символ в разных пунктах на разных позициях?
А потому что если у тебя есть пункты "10" и "15", то в одном быстрый вызов будет назначен на 1, а во втором - на 5 (единица уже занята). Поэтому я и не стал привязываться к конкретной позиции символа "&", а сделал его поиск через Pos.
Цитата
(можно конечно написать свою процедуру, но это не то)
Зачем писать что-то, оно ж уже написано, надо только вызвать:
procedure TForm1.Button1Click(Sender: TObject); begin // что-то end;
procedure TForm1.Button2Click(Sender: TObject); begin // еще что-то Button1Click(Sender); end;
Угу... "Сам" - то это "сам", только кто "сам"? Вообще-то Self - аналог Form1.Self, то есть, относится к форме, если не указать обратное. Если надо что-то другое - надо явно указать...