Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Список дисков равен списку пунктов меню. 
:(
    Опции темы
Bomberman
  Дата 30.10.2002, 23:50 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Привет. Если кто-нибудь знает как в меню добавить список дисков, помогите. Нужно, чтобы в одном пункте меню был первый диск, в другом - следующий и т.д. Я знаю, что есть функции 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;

  Вверх
AntonSaburov
Дата 31.10.2002, 02:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: нет
Всего: 118



Надо посмотреть TMenu и TMenuItem. У TMenu есть Items, который является TMenuItem. А дальше TMenuItem.Add - вообщем дальше разобраться не сложно.
PM MAIL WWW ICQ   Вверх
Bomberman
  Дата 31.10.2002, 02:49 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Я использую клас hMenu.
  Вверх
Baa
Дата 31.10.2002, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

Репутация: нет
Всего: 12



А если заполнять так, то число дисков известно...
правда это маразм
Код

procedure TForm1.Button1Click(Sender: TObject);
var
 lpBuffer: PChar;
 lpSrc   : PChar;
 lpDst   : PChar;
 iDrives : Integer;
 I       : Cardinal;
 szTemp  : String;
begin
 GetMem  (lpBuffer, $FF);
 GetMem  (lpSrc, $FF);
 GetMem  (lpDst, $FF);
 GetLogicalDriveStrings($FF, lpBuffer);
 iDrives := GetLogicalDrives;
 StrCopy(lpSrc, PChar(IntToHex(iDrives, 0)));
 HexToBin(lpSrc, lpDst, $FF);
 for i := 0 to StrLen (lpDst)+1 do
   begin
     szTemp := lpBuffer[i*4]+lpBuffer[i*4+1]+lpBuffer[i*4+2];
     if GetDriveType(PChar(szTemp)) = DRIVE_FIXED then
       Memo1.Lines.Add(szTemp);
   end;
 FreeMem (lpBuffer);
 FreeMem (lpSrc);
 FreeMem (lpDst);
end;



--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
Alex Holiday
Дата 1.11.2002, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 26.10.2002
Где: Красноярск

Репутация: нет
Всего: нет



Цитата(Guest @ 30.10.2002, 15:50)
Привет. Если кто-нибудь знает как в меню добавить список дисков, помогите. Нужно, чтобы в одном пункте меню был первый диск, в другом - следующий и т.д. Я знаю, что есть функции 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;

Я бы тоже организовал цикл не по for.
Если всё делать налету, то придется или ставить кнопочку на обновление меню, или просто повешать событие на клик по пункту менюшки.
Самый простой способ сбора подключенных дисков - DriveComboBox.
В цикле вытаскивать с него метки и пихать в меню. А его самого спрятать.
Знаю, что ламерство, зато просто и без промахов.   :)
PM MAIL ICQ   Вверх
Михаил
Дата 22.11.2002, 15:23 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Все очень просто, я так делаю
var
 DrLet: Char;
begin
 for DrLet:= 'A' to 'Z' do
 if GetDriveType(PChar(DrLet + ':/')) = DRIVE_FIXED then
 Combobox1.Items.Add(DrLet);
end;
  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0897 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.