Форум: "WinAPI";
Текущий архив: 2004.08.22;
Скачать: [xml.tar.bz2];
ВнизКак отследить нажатие на 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 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.08.22;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.038 c