обнаружить USB-накопитель / устройство с помощью Delphi - PullRequest
3 голосов
/ 31 октября 2011

Я не могу понять правила форматирования здесь ... слишком много строк кода в моем примере, чтобы добавить 4 пробела к каждой строке, так что вот ссылка на код, который мне нужна помощь с

http://nitemsg.blogspot.com/2011/01/heres-unit-written-in-delphi-7-that-you.html

Проблема в том, что я не знаю достаточно о Delphi, чтобы использовать этот код с формой. Я программист только перетаскивания.

Пример с showmessage ('friendly name =' + ...) при обнаружении USB-устройства - вот что мне нужно.

ура,

1 Ответ

11 голосов
/ 02 ноября 2011

Если вы знакомы только с программированием перетаскивания и мало знаете об объектах или других единицах, вам необходимо ознакомиться с использованием объектов, отличных от автоматически созданных форм и компонентов, которые вы перетаскиваете вих.

Код по этой ссылке представляет собой единое целое.Вам необходимо создать новый модуль в вашем проекте (Файл> Создать> Модуль).Это будет выглядеть примерно так:

unit Unit1;

interface

implementation

end.

Теперь при сохранении устройства имя устройства автоматически изменится на имя файла (без расширения), например:

unit MahUSB;

interface

implementation

end.

В этом примере вы должны использовать то же имя устройства, что и источник, который вы пытаетесь использовать.Сохраните модуль как «MahUSB.pas», и он должен находиться в той же папке, что и остальная часть вашего проекта (или в другом месте, просто предложение).Скопируйте / вставьте весь код с этого веб-сайта и замените все в этом модуле.

Теперь, чтобы реально использовать это, вам нужно создать экземпляр этого объекта.ТОЛЬКО ОДНА ИНСТАНЦИЯ (я говорю это только потому, что, судя по всему, не нужно больше одного).

Очень важно : Поскольку вы не знакомы с объектами, позвольте мне быстро кое-что объяснить.Объекты должны быть созданы для того, чтобы работать.В то же время все, что создано, также должно быть бесплатным, когда вы закончите с ним.В этом случае мы создадим этот объект при запуске приложения и освободим его при закрытии приложения.

Теперь в вашей ГЛАВНОЙ ФОРМЕ (а не в любых других формах) вам необходимо поместить обработчик событий для обоих OnCreate.и ОнДестрой.Вам также нужно объявить переменную для представления этого объекта.В объявлении вашей основной формы добавьте переменную «USB» с типом этого объекта.Удостоверьтесь, что это идет под секцией 'private' или 'public', любой из них в порядкеТакже убедитесь, что вы объявляете модуль «MahUSB» в верхней части основного блока в предложении использования.

Объявление объекта в основной форме:

type
  TForm1 = class(TForm)
  private
    USB: TUsbClass;
  public

  end;

Создание / освобождение объекта приВаше приложение запускается / закрывается:

  procedure TForm1.FormCreate(Sender: TObject);
  begin
    USB:= TUsbClass.Create;
  end;

  procedure TForm1.FormDestroy(Sender: TObject);
  begin
    if assigned(USB) then USB.Free;
  end;

Теперь мы еще не закончили.Теперь нам нужно добавить обработчики событий.Обратите внимание, что в верхней части этого устройства есть два типа: TOnDevVolumeEvent и TOnUsbChangeEvent .Это типы событий.Параметры в обработчиках событий должны быть идентичны параметрам, объявленным в этих типах.Итак, теперь в вашей основной форме объявите эти процедуры обработчика событий ...

  type
    TForm1 = class(TForm)
      procedure FormCreate(Sender: TObject);
      procedure FormDestroy(Sender: TObject);
    private
      USB: TUsbClass;
      procedure VolumeEvent(const bInserted : boolean; const sDrive : string);
      procedure ChangeEvent(const bInserted : boolean;
        const ADevType,ADriverName, AFriendlyName : string);
    public

    end;

Теперь еще одна вещь, которую мы должны сделать, прежде чем это сработает.Объект USB должен знать, какие обработчики событий использовать, поэтому нам нужно назначить эти процедуры событиям.После создания вашей формы нам нужно назначить эти события ...

    procedure TForm1.FormCreate(Sender: TObject);
    begin
      USB:= TUsbClass.Create;
      USB.OnUsbChange:= Self.ChangeEvent;
      USB.OnDevVolume:= Self.VolumeEvent;
    end;

Когда все сказано и сделано, ваш основной блок формы должен выглядеть примерно так:

unit uUSBTest;

interface

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

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    USB: TUsbClass;
    procedure VolumeEvent(const bInserted : boolean; const sDrive : string);
    procedure ChangeEvent(const bInserted : boolean;
      const ADevType,ADriverName, AFriendlyName : string);
  public

  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ChangeEvent(const bInserted: boolean; const ADevType,
  ADriverName, AFriendlyName: string);
begin
  ShowMessage('Change event for "'+AFriendlyName+'"');
end;

procedure TForm1.VolumeEvent(const bInserted: boolean;
  const sDrive: string);
begin
  ShowMessage('Volume event for "'+sDrive+'\"');
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  USB:= TUsbClass.Create;
  USB.OnUsbChange:= Self.ChangeEvent;
  USB.OnDevVolume:= Self.VolumeEvent;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  if assigned(USB) then USB.Free;
end;

end.

Ивот ты где!У вас будут эти две процедуры-обработчики событий, где вы сможете дополнительно обработать любое из этих двух событий.

...