Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.12.2008, 17:32   #1
kos1nus
Пользователь
 
Регистрация: 14.07.2008
Сообщений: 47
По умолчанию drivecombobox и работа с носителями

2 вопроса . . . delphi

1) программа опрашивает все диски из списка drivecombobox находит нужные ей и продолжает работать. так вот, при обращении в кардридеру(флешки в нем нет) выскакивает ошибка. как исправить?

2) drivecombobox загружает все диски работающие на момент запуска программы, если воткнуть флешку во воремя работы программы он ее неувидит. какой функцией можно обновить список дисков?

заранее спасибо
kos1nus вне форума Ответить с цитированием
Старый 14.12.2008, 17:47   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
2)
DriveComboBox1.Refresh пробуй
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.12.2008, 17:53   #3
kos1nus
Пользователь
 
Регистрация: 14.07.2008
Сообщений: 47
По умолчанию

пробовал . . нехочет
kos1nus вне форума Ответить с цитированием
Старый 14.12.2008, 18:18   #4
kos1nus
Пользователь
 
Регистрация: 14.07.2008
Сообщений: 47
По умолчанию

может в таком случай стоит перезапустить само приложение? ну или форму(незнаю будет ли этого достаточно)??? как лучше сделать?
kos1nus вне форума Ответить с цитированием
Старый 14.12.2008, 18:42   #5
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,183
По умолчанию

У компонента есть скрытое свойство, создающее список(однако он недоступен напрямую):
Код:
procedure TDriveComboBox.BuildList;
var
  DriveNum: Integer;
  DriveChar: Char;
  DriveType: TDriveType;
  DriveBits: set of 0..25;

  procedure AddDrive(const VolName: string; Obj: TObject);
  begin
    Items.AddObject(Format('%s: %s',[DriveChar, VolName]), Obj);
  end;

begin
  { fill list }
  Clear;
  Integer(DriveBits) := GetLogicalDrives;
  for DriveNum := 0 to 25 do
  begin
    if not (DriveNum in DriveBits) then Continue;
    DriveChar := Char(DriveNum + Ord('a'));
    DriveType := TDriveType(GetDriveType(PChar(DriveChar + ':\')));
    if TextCase = tcUpperCase then
      DriveChar := Upcase(DriveChar);

    case DriveType of
      dtFloppy:   Items.AddObject(DriveChar + ':', FloppyBMP);
      dtFixed:    AddDrive(VolumeID(DriveChar), FixedBMP);
      dtNetwork:  AddDrive(NetworkVolume(DriveChar), NetworkBMP);
      dtCDROM:    AddDrive(VolumeID(DriveChar), CDROMBMP);
      dtRAM:      AddDrive(VolumeID(DriveChar), RAMBMP);
    end;
  end;
end;
Можно ещё так(пересоздавать компонент со всеми событиями):
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, FileCtrl;

type
  TForm1 = class(TForm)
    DCB1: TDriveComboBox;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var Rect :TRect;
    Win :TWinControl;
begin
 Rect := DCB1.BoundsRect;
 Win := DCB1.Parent;
 DCB1.Free;
 DCB1 := TDriveComboBox.Create(self);
 DCB1.Parent := Win;
 DCB1.BoundsRect := Rect;
 DCB1.Visible := True;
 DCB1.CharCase := ecUpperCase;
 // тут приравниваем обработчики процедур событий компонента
end;

end.
Alter вне форума Ответить с цитированием
Старый 14.12.2008, 19:11   #6
kos1nus
Пользователь
 
Регистрация: 14.07.2008
Сообщений: 47
По умолчанию

воспользовался вторым способом! работает! спасибо за подсказку! а что нибудь по первому вопросу можете подсказать?
kos1nus вне форума Ответить с цитированием
Старый 14.12.2008, 19:56   #7
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
при обращении в кардридеру(флешки в нем нет) выскакивает ошибка. как исправить?
Делать обращение в обертке TRY..EXCEPT.
mihali4 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Список дисков в DriveComboBox Alar Компоненты Delphi 0 29.10.2006 19:35