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

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

Список дисков равен списку пунктов меню.


Bomberman ©   (2002-10-30 16:52:00) 

Привет. Если кто-нибудь знает как в меню добавить список дисков, помогите. Нужно, чтобы в одном пункте меню был первый диск, в другом - следующий и т.д. Я знаю, что есть функции InsertMenu и AppendMenu. Но мне нужно, чтобы пункты меню добавлялись в соответствии с колличеством дисков. Помогите!!! Вот так я заполняю ComboBox:

procedure GetDrives;
var
I: integer;
LogDrives: set of 0..25;
DrvLetter: Char;
begin
Integer(LogDrives):=GetLogicalDrives;
for I := 0 to 25 do
if (I in LogDrives) then begin
DrvLetter:=Chr(I + 65);
if GetDriveType(PChar(DrvLetter+":\"))=DRIVE_FIXED then
Form1.ComboBox1.Items.Add(DrvLetter);

// InsertMenu(Menu, 0, mf_ByPosition, 10, Pchar(DrvLetter));

end;
end;


PKT   (2002-10-31 04:46:00) [1]

to: Bomberman

Может быть лучше воспользоваться GetLogicalDriveStrings ?

var
P: PChar;
I: Integer;
begin
GetMem(P, 100);
FillChar(P^, 100, #0);
GetLogicalDriveStrings(100, P);
for I := 0 to 99 do
if (P[I] = #0) and (P[I+1] <> #0) then P[I] := #13;
ComboBox1.Items.Text := P;
FreeMem(P, 100);
end;


Bomberman   (2002-10-30 22:39:00) [2]

Пожалуйста, направьте на путь истынный, а то башка уже расскалываеться.


TTCustomDelphiMaster   (2002-10-30 22:02:00) [3]

Вы неправильно работаете с данными полученными фанкцией GetLogicalDrives


TTCustomDelphiMaster   (2002-10-30 21:48:00) [4]

Bomberman
Извеняюсь не заметил :)
if GetDriveType(PChar(DrvLetter+":\"))=DRIVE_FIXED then
begin
Form1.ComboBox1.Items.Add(DrvLetter);
InsertMenu(Menu, 0, mf_ByPosition, 10, Pchar(DrvLetter));
end;


Bomberman   (2002-10-30 21:03:00) [5]


> F1 - GetDriveType


Остроумно. Зачем мне хелп по GetDriveType, если я уже получил список дисков (см начало моего топика).


TTCustomDelphiMaster   (2002-10-30 20:00:00) [6]

F1 - GetDriveType


Bomberman   (2002-10-30 18:29:00) [7]

Причем тут MF_STRING?

Мне нужно добавить все имеющиеся диски как пункты меню. Если я добавляю так

InsertMenu(Menu, 0, mf_ByPosition, 10, Pchar(DrvLetter));

то добавляется только последний диск из списка.


Arcus   (2002-10-30 18:07:00) [8]

Тогда попробуй добавить флаг MF_STRING.


Bomberman   (2002-10-30 17:48:00) [9]

Да!


Calm   (2002-10-30 17:37:00) [10]

Я так полагаю, суть не в том, кудадобавлять, а чтодобавлять. Так?


Bomberman   (2002-10-30 17:36:00) [11]

Menu - не VCL. Это дескриптор меню hMenu.


Calm   (2002-10-30 17:07:00) [12]

Что-то я не понял проблемы.
Под вечер туго с головой :(
Итак, получаем очередной диск, добавляем его в меню. Все Ok.
Или не ясно сколько дисков?
API-функции на этот случай я не знаю.
Видел на сайте компонент, который получал сведения о системе и о дисках в частности. Там можно глянуть.


Arcus   (2002-10-30 17:07:00) [13]

А Menu- что это?
Потому как InsertMenu/AppendMenu- API-шные функции и нужен хендл меню + уникальная комманда на каждый пункт.
Если Menu - VCL-ный контрол, то проще создавть новый TMenuItem и вставлять его в Menu.Items


Наверх

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