![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как отследить нажатие на TMenuItem [D3, D4, D5, D6, D7, Win95/98, WinME, NT4, Win2k, WinXP]
Константин © (2004-07-09 09:11:00)Здравствуйте уважаемые мастера. Возможно мой вопрос покажется немножко (или множко) ламерским, но я раньше всегда программировал с использованием визуальных компонентов. Я написал такой вот код:
var
year: array [2004..2100] of TMenuItem;
month: array [1..12] of TMenuItem;
day: array [1..31] of TMenuItem;
i, j, o: integer;
begin
if prov1 = false then
begin
for i := 2004 to 2100 do
begin
year[i] := TMenuItem.Create(Self);
year[i].Caption := IntToStr(i);
year[i].Name := 'y' + IntToStr(i);
MainMenu1.Items[1].Add(year[i]);
if findcomponent('y' + inttostr(i)) then showmessage('fg');
for j := 1 to 12 do
begin
month[j] := TMenuItem.Create(Self);
month[j].Name := 'm' + inttostr(j)+ 'y' + inttostr(i);
case j of
1: month[j].Caption := 'Январь';
2: month[j].Caption := 'Февраль';
3: month[j].Caption := 'Март';
4: month[j].Caption := 'Апрель';
5: month[j].Caption := 'Май';
6: month[j].Caption := 'Июнь';
7: month[j].Caption := 'Июль';
8: month[j].Caption := 'Август';
9: month[j].Caption := 'Сентябрь';
10: month[j].Caption := 'Октебрь';
11: month[j].Caption := 'Ноябрь';
12: month[j].Caption := 'Декабрь';
end;
MainMenu1.Items[1].Items[i-2004].add(month[j]);
end;
//отсеиваем года
Query1.Active := false;
Query1.SQL.Text := 'SELECT *FROM chanel.db WHERE ODate BETWEEN ' + '''' + '01/01/' + inttostr(i) + '''' + ' AND ' + '''' + '12/31/' + inttostr(i) + '''';
Query1.Active := true;
if Query1.RecordCount = 0 then year[i].Visible := false else year[i].visible := true;
end;
И еще вопрос: Как видно из кода я делаю год, которого нет в БД невидимым. Можно более быстрым способом определить есть ли год в БД.
Константин (2004-07-09 10:44:00) [1]Спасибо. Давно мне так все по полочкам не раскладывали.
bar (2004-07-09 10:33:00) [2]Тип метода обработчика нажатия OnClick
TNotifyEvent = procedure(Sender: TObject) of object;
делаеш метод такого типа а затем присваиваеш его
MenuItem.OnClick:=имя_метода;
Примерно так
TForm1 = class(TForm)
PopupMenu1: TPopupMenu;
MainMenu1: TMainMenu;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
procedure xsdxx(Sender: TObject);// обработчик нажатия
public
{ Public declarations }
a:TMenuItem;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.xsdxx(Sender: TObject);
begin
..... код
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
a.OnClick:=xsdxx; // устанавливаем обработчик.
end;
а вопрос и правдо ламерский, но не очень множко. До орешника ему далеко :-))
Константин (2004-07-09 10:16:00) [3]Вот вот. Я про то же. Перечитал половину спарвки, но не нашел ничего дельного. Другой вопрос: Как именно установить этот обработчик события?
VMcL (2004-07-09 10:04:00) [4]>>Константин © (09.07.04 09:11)
>Как отследить нажатие на TMenuItem
Установить обработчик события OnClick.
P.S.
>if Query1.RecordCount = 0 then year[i].Visible := false else year[i].visible := true;
year[i].Visible := Query1.RecordCount <> 0;