Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как отследить нажатие на 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;


Наверх

Титульная страница Поиск, карта сайта Написать письмо