Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.08.22;
Скачать: CL | DM;

Вниз

Как отследить нажатие на TMenuItem   Найти похожие ветки 

 
Константин ©   (2004-07-09 09:11) [0]

Здравствуйте уважаемые мастера. Возможно мой вопрос покажется немножко (или множко) ламерским, но я раньше всегда программировал с использованием визуальных компонентов. Я написал такой вот код:

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;


И еще вопрос: Как видно из кода я делаю год, которого нет в БД невидимым. Можно более быстрым способом определить есть ли год в БД.


 
VMcL ©   (2004-07-09 10:04) [1]

>>Константин ©   (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;


 
Константин ©   (2004-07-09 10:16) [2]

Вот вот. Я про то же. Перечитал половину спарвки, но не нашел ничего дельного. Другой вопрос: Как именно установить этот обработчик события?


 
bar   (2004-07-09 10:33) [3]

Тип метода обработчика нажатия 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:44) [4]

Спасибо. Давно мне так все по полочкам не раскладывали.



Страницы: 1 вся ветка

Текущий архив: 2004.08.22;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.021 c
3-1091188056
*boba*
2004-07-30 15:47
2004.08.22
Oкругление


14-1091694244
Goorus
2004-08-05 12:24
2004.08.22
А с вами такое бывает?


1-1092090365
mouse_web
2004-08-10 02:26
2004.08.22
Заставка перед загрузкой программы


14-1091201800
Igor_thief
2004-07-30 19:36
2004.08.22
Excel


1-1091639532
bloodman
2004-08-04 21:12
2004.08.22
Вызов функции главной программы из dll.