Головна сторінка
Top.Mail.Ru Яндекс.Метрика
Форум: "Основна";
Поточний архів: 2002.01.08;
Завантажити: [xml.tar.bz2];

Вниз

Визначити номер пункту меню Знайти схожі гілки


T2   (2001-12-16 07:29) [0]

Програмно створюю меню. Впихати в popup меню назви наявних дисків (заздалегідь невідомо скільки їх). Як дізнатися який пункт меню був обраний, бажано в одній процедурі обробки?



KilkennyCat   (2001-12-16 08:02) [1]

я роблю так:

створюю процедуру обробки, на яку переправляю кліки з усіх пунктів. типу:

procedure TForm1.popClick (Sender: TObject);
починати
if sender = b then showmessage ( "b"); // натиснуто пункт з ім'ям b
if sender = a then showmessage ( "a"); // натиснуто пункт з ім'ям а
end;

звичайно, при великій кількості пунктів потрібно індексуватися.



T2   (2001-12-16 08:59) [2]

Так, але імена "a" і "b" невідомі до створення. Цих пунктів меню немає при
компіляції і при спроби порівняти sender = a видається помилка "Undeclared identifier:" a ". Мож на коді буде наочніше?

procedure TMain.pu2Popup (Sender: TObject);
var s: tstringlist; i: byte; NewItem: TMenuItem; f: int64; d: string [1];
починати
pu2.Items.Clear; s: = tstringlist.create;
si.GetDriveList (s); for i: = 0 to s.Count-1 do begin
NewItem: = TMenuItem.Create (Self);
d: = copy (uppercase (s.strings [i]), 1,1);
f: = diskfree (ord (d [1]) - 64); If f = -1 then f: = 0;
NewItem.Caption: = "&" + d + ": (" + Inttostr (f) + "байт)";
newitem.OnClick: = ddd;
imagelist1.getbitmap (0, newitem.Bitmap);
pu2.items.Add (NewItem);
end; s.free;
end;

procedure tmain.ddd (sender: tobject);
починати
if sender = c1 then showmessage ( "Disk <C> select"); // Так?
end;

Все вірно?



KilkennyCat   (2001-12-16 09:07) [3]

гм ... по-моєму, треба створити і NewItem.Name (наприклад, а)



Anatoly Podgoretsky   (2001-12-16 10:11) [4]

У тебе NewItem.Caption друга буква ім'я диска, цього достатньо для ідентифікації



Dmitriy(new)   (2001-12-16 12:09) [5]

procedure tmain.ddd (sender: tobject); var d: string [1];
починати
d: = copy (TMenuItem (sender) .Caption, 2,1);
showmessage ( "Disk <" + D + "> select");
// if sender = c1 then showmessage ( "Disk <C> select"); // Так?
end;



Петрович   (2001-12-17 04:47) [6]

А можна спробувати використовувати властивість Tag!



GennadyS   (2001-12-17 08:45) [7]

Я завжди в подібних випадках застосовував властивість TAG. І в залежності від кількості пунктів точно знав на якому клікаешся. (Для всіх пунктів єдина процедура обробки) У цій процедурі:

case (sender as TComponent) .tag of
1: // обробка диска Б
2: // - / - З
...



сторінки: 1 вся гілка

Форум: "Основна";
Поточний архів: 2002.01.08;
Завантажити: [xml.tar.bz2];

наверх









Пам'ять: 0.57 MB
Час: 0.024 c
1-22029
neo_
2001-12-18 12:33
2002.01.08
вбити TThread


3-21910
Володимир
2001-12-04 08:01
2002.01.08
Кількість записів в таблиці?


7-22432
Voldemar
2001-09-25 04:12
2002.01.08
Призначення пріоритету прізапуске ...


6-22273
Денис Титов
2001-10-06 11:50
2002.01.08
Побудова локальних мереж


7-22440
Rumrunner
2001-05-13 00:32
2002.01.08
У Win98 є можливість надати спільний доступ до Інтернету для локальної мережі





африкаанс албанський арабська вірменин азербайджанець баскський білоруський болгарська каталонський Китайська (спрощене письмо) Китайський традиційний) хорватський чеська данську мову нідерландський Ukranian естонець Філіппінська фінську мову французький
галісійська грузинський німецький грецький гаїтянський креольський давньоєврейську хінді угорський ісландський індонезієць ірландський італійський японський корейський латиська литовець македонець малайський мальтійський норвежець
перс полірування португальська румунський російська сербський словацький словенський іспанська суахілі шведську мову тайський турецька український урду в'єтнамський валлійський ідиш бенгальський боснійський
кебуано есперанто гуджараті хауса хмонг ігбо яванський каннада кхмерская Лао латинь маорі маратхі монгольський непальська панджабі сомалійський тамільська телугу йоруба
зулуський
Англійська Французький Німецький Італійський Португальська Русский Іспанська