Привет! Я хочу из всплывающего меню (на скрине) изменять размер шрифта в мемо.
procedure TForm1.PopupMenu1Change(Sender: TObject; Source: TMenuItem; Rebuild: Boolean); var a:integer; begin a:=strtoint(Source.Caption); memo1.Font.Size:=a; end;
Выдает ошибку сразу при запуске. Как тут быть?
volvo
20.05.2009 16:46
Цитата
Выдает ошибку сразу при запуске.
Правильно делает. У тебя в момент создания меню (а 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;
, всем остальным пунктам назначь этот же обработчик...
Client
20.05.2009 16:58
СПАСИБО! А почему '&' символ в разных пунктах на разных позициях? И еще, допустим есть 2 кнопки. При нажатии на кнопку1 происходят определенные действия. А при нажатии на кнопку2 сначала происходят какие-то действия, а потом тоже самое, что и при нажатии кнопки1. Как вызвать нажатие кнопки1 при щелчке на кнопку2?(можно конечно написать свою процедуру, но это не то)
volvo
20.05.2009 18:28
Цитата
А почему '&' символ в разных пунктах на разных позициях?
А потому что если у тебя есть пункты "10" и "15", то в одном быстрый вызов будет назначен на 1, а во втором - на 5 (единица уже занята). Поэтому я и не стал привязываться к конкретной позиции символа "&", а сделал его поиск через Pos.
Цитата
(можно конечно написать свою процедуру, но это не то)
Зачем писать что-то, оно ж уже написано, надо только вызвать:
procedure TForm1.Button1Click(Sender: TObject); begin // что-то end;
procedure TForm1.Button2Click(Sender: TObject); begin // еще что-то Button1Click(Sender); end;
Client
20.05.2009 18:31
Понятно. А как программно можно добавить/удалить кнопку на панель?
volvo
20.05.2009 19:25
Точно так же, как и любой другой компонент:
new_button := TButton.Create(Application); new_button.Parent := ... new_button.OnClick := ... // Ну, и что там тебе еще нужно...
Client
20.05.2009 19:30
new_button := TButton.Create(Application);
Добавил описание
new_button:tbutton;
При нажатии кнопки создаю, но ничего нету... Что не так?
procedure TForm1.Button1Click(Sender: TObject); var new_button:tbutton; begin new_button := TButton.Create(Application); end;
Добавлено через 13 мин.
procedure TForm1.Button1Click(Sender: TObject); var new_button:tbutton; begin new_button := TButton.Create(Application); new_button.Left:=100; new_button.Top:=100; new_button.Caption:='dfdsfds'; new_button.Parent:=Self; end;
Получилось) А как добавить кнопку на панель инструментов? Это же не обычная кнопка? И что значит new_button.Parent:=Self?
volvo
20.05.2009 19:47
Цитата
А как добавить кнопку на панель инструментов?
Что такое для тебя "панель инструментов"? Какой-то определенный компонент? Ну, так делай его родителем кнопки...
Цитата
И что значит new_button.Parent:=Self?
Вот то самое и значит, форму считать родителем новой кнопки.
Client
20.05.2009 23:59
Цитата
Что такое для тебя "панель инструментов"? Какой-то определенный компонент? Ну, так делай его родителем кнопки...
Сделал предком тулбар и все как надо А как описать обработчик OnClick?
Parent:=Self
и
Parent:=Form1
работает одинаково. Self это же "сам"?
volvo
21.05.2009 0:03
Цитата(Client @ 20.05.2009 19:59)
Parent:=Self
и
Parent:=Form1
работает одинаково. Self это же "сам"?
Угу... "Сам" - то это "сам", только кто "сам"? Вообще-то Self - аналог Form1.Self, то есть, относится к форме, если не указать обратное. Если надо что-то другое - надо явно указать...
Client
21.05.2009 0:12
О_О буду знать, я думал что это "текущий объект" СПАСИБО БОЛЬШОЕ VOLVO ЗА ПОМОЩЬ!