Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Delphi: WinAPI и системное программирование > wnaspi32.dll |
Автор: WIN32API 12.5.2006, 16:05 |
Здравствуйте, уважаемые... Использую wnaspi32.dll. Естественно есть заголовочные файлы к этой библиотеке. Вопрос в том, как добавить CD-устройства в ComboBox на чистом WIN32API. У меня есть пример, использующий TObject, а надо без него. Немогу разобрать откуда берется идентификатор, который заносится в TObject при заполнении |
Автор: Rouse_ 12.5.2006, 16:29 |
На АПИ? Через отпраку управляющей команды CB_ADDSTRING на хэндл ComboBox-а. |
Автор: WIN32API 12.5.2006, 19:14 | ||
Єто вопрос для тех, кто работал с wnaspi32.dll без VCL. Мне сложновато сформулировать его правильно... |
Автор: Rouse_ 12.5.2006, 21:10 |
ComboBox.Handle даст тебе описатель оконного элемента которому необходимо послать сообщение. |
Автор: WIN32API 12.5.2006, 21:40 |
В чужом примере на VCL в КомбоБокс идет запись: ComboBox1.Items.AddObject(String, tObject) В tObject вносится идентификатор СD-устройства типа - 345677. Откуда он берется и как его мне зацепить? |
Автор: Rouse_ 12.5.2006, 21:58 |
Тэкс, чуствуется что ты чего-то очень сильно не понимаешь. Здается мне что 345677 это указатель на область памяти с экземпляром объекта типа ТObject. Давай код чужого примера... |
Автор: WIN32API 13.5.2006, 11:58 |
Там одна функция тянет за собой другую. Разобратся сложно. Попробую что-то вырезать... |
Автор: WIN32API 14.5.2006, 11:48 | ||
|
Автор: Voyager 14.5.2006, 23:20 | ||
|
Автор: WIN32API 15.5.2006, 14:53 | ||
Да это все понятно. Внимательно на код посмотрите. Там добавляется TObject(Device)???????????????
|
Автор: Rouse_ 16.5.2006, 09:43 | ||||
Это указатель на экземпляр класса... В твоем случе
А берется он отседова: SCSIinquiryDeviceInfo Получить обратно экземпляр:
|
Автор: WIN32API 16.5.2006, 12:11 | ||
На основе кода от Rouse_ и Voyager я сделал следующее, но где-то допустил ошибку и чувствую, что не одну....
|
Автор: Rouse_ 16.5.2006, 12:52 | ||||
ItemIndex это индекс элемента с которым ты хочешь асоцииорвать информацию. В твоем коде, ты добавляешь один единственный элемент, его индекс ноль Соответственно вот этот код не имеет смысла, т.к. элементов с такими индексами не существует:
Вот этот ко также не верен, т.к. ты читаешь адрес указателя, а тебе нужно читать данные по этому указателю:
|
Автор: WIN32API 16.5.2006, 13:01 |
Так как же сделать то???????????????? Помогите! ![]() |
Автор: WIN32API 17.5.2006, 10:44 | ||
С добавление вроде разобрался???? А вот с чтение траблы. Помогите.!!!!
|
Автор: Rouse_ 17.5.2006, 15:01 | ||
чему равен ItemIndex на момент вызова данной функции:
|
Автор: WIN32API 17.5.2006, 15:53 |
На момент вызова _Object := PObject(SendMessage(Combobox1, CB_GETITEMDATA, ItemIndex, 0))^; прога вылетает. (Рантайм эррор) Добавлено @ 15:57 Стоп. я понял вопрос. ItemIndex должен зацепить текущий выбранный пункт, а потом уже: _Object := PObject(SendMessage(Combobox1, CB_GETITEMDATA, ItemIndex, 0))^; Или я ошибаюсь? |
Автор: Rouse_ 17.5.2006, 16:51 |
угу ![]() вообщето ItemIndex должен быть номером существующего итема... Не важно, выбран он или нет |
Автор: WIN32API 17.5.2006, 17:34 |
Так? ItemIndex = SendMessage(Combobox1, CB_GETCURSEL, 0, 0); Если нет, то как его определить? |
Автор: Rouse_ 17.5.2006, 17:59 |
да, это тебе вернет текущий выбранный элемент... |
Автор: WIN32API 18.5.2006, 10:03 | ||
CD_ROM_DEVICE в любом случае возвращает один и тот же идентификатор. какое бы устройство в комбобоксе я не выбрал, получается одно и то же. При этом я правильно обрабатываю сообщение, которое отвечает за изменения в комбобоксе. может, ошибка при добавлении - CB_SETITEMDATA?
|
Автор: WIN32API 18.5.2006, 10:31 |
Хочу заметить, что получаемый идентификатор неверный, т.к. немогу управлять устройством. |
Автор: Rouse_ 18.5.2006, 11:38 | ||
Естественно он вернет тебе один и тот же обьект, потомучто ты после добавление нового элемента назначешь обьект связанный с ним всем существующим элементам, затирая их предыдущее значение:
|
Автор: WIN32API 18.5.2006, 19:44 | ||
Все равно получаю один и тот же идентификатор, который так и неработает.
|
Автор: Rouse_ 19.5.2006, 11:09 | ||
Блин, чудак человек, закоментируй вот эту строку:
|
Автор: WIN32API 19.5.2006, 11:50 |
Да тоже самое. Я уже запахался честно говоря... |
Автор: Rouse_ 19.5.2006, 13:22 |
Что тоже самое? Для всех элементов один и тот же обьект возвращается или теперь они разные? |
Автор: WIN32API 19.5.2006, 17:34 |
Для всех элементов один и тот же обьект возвращается!!! Бред какой-то... |
Автор: Rouse_ 22.5.2006, 08:09 |
Давай сюда проект... |
Автор: WIN32API 23.5.2006, 08:44 |
Мой проект можно закачать по адресу: http://depositfiles.com/files/70083/Wnaspi32.rar.html |
Автор: Rouse_ 23.5.2006, 13:38 | ||
Делай так:
|
Автор: WIN32API 23.5.2006, 22:46 |
Огромнейшее спасибо! И чтобы подитожить все, я хотел бы узнать, то, что возврашает _Object в данном случае может менятся? Мне интерестно будет ли он другим, если пользователь подключит или отключит еще один сидюк? Знать это полезно, если надо будет запоминать выбранное устройство, например, в реестре. |
Автор: Rouse_ 24.5.2006, 09:35 |
Конечно будет меняться - это значение действительно только от момента создания обьекта до его разрушения, если создать такойже обьект после разрушения то число будет другим... |
Автор: WIN32API 24.5.2006, 18:56 |
Сенкс!!!! На этом можно считать тему закрытой. |
Автор: ShEriF 30.5.2006, 21:28 |
Привет всем, а можно мне примерчик добавления названий CD-ROMs , как в демке от WIN32API. тока написанный на Delphi v7 |