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

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

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.03.2014, 16:47   #11
HTTqp
Форумчанин
 
Регистрация: 20.12.2013
Сообщений: 164
По умолчанию

frxTBPanel1 - это компонент на подобии TPanel.
У меня 2 frxTBPanel, на каждую я вывожу кнопки созданные динамическим путем, и получается на frxTBPanel1 выводится только диск C, а на frxTBPanel2 выводится все диски как и положенно, перепробовал все что в моих силах, но все четно(
HTTqp вне форума Ответить с цитированием
Старый 04.03.2014, 20:30   #12
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,239
По умолчанию

Тогда наверное вы использовали один массив для заполнения.
Код:
unit Unit1;

interface

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

//const // если не подключать модуль DBT
//    DBT_DEVICEARRIVAL = $8000;
//    DBT_DEVICEQUERYREMOVE = $8001;
//    DBT_DEVICEQUERYREMOVEFAILED = $8002;
//    DBT_DEVICEREMOVEPENDING = $8003;
//    DBT_DEVICEREMOVECOMPLETE = $8004;
//    DBT_DEVICETYPESPECIFIC = $8005;
//    DBT_CONFIGCHANGED = $0018;
//    DBT_DEVNODES_CHANGED = $0007;

type
  TButtonsArr = array[1..15]of TButton;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Panel2: TPanel;
    procedure FormCreate(Sender: TObject);
  private
    procedure WMDeviceChange(var message: TMessage); message WM_DEVICECHANGE;
    { Private declarations }
  public
    Buttons1 :TButtonsArr;
    Buttons2 :TButtonsArr;
    procedure FreeButtons(ButArr :TButtonsArr);
    procedure UpdB(ButArr :TButtonsArr; PrnPan :TPanel);
    procedure UpdAll;
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
 UpdAll;
end;

procedure TForm1.FreeButtons(ButArr :TButtonsArr);
var
  I :Byte;
begin
  for I := Low(ButArr) to High(ButArr) do
  if Assigned(ButArr[I]) then
   FreeAndNil(ButArr[I]);
end;

procedure TForm1.UpdAll;
begin
 UpdB(Buttons1, Panel1);
 UpdB(Buttons2, Panel2);
end;

procedure TForm1.UpdB(ButArr :TButtonsArr; PrnPan :TPanel);
const
   RemL :array[Boolean] of string = ('', '(re)');
var
  I :Byte;
  DType :Integer;
  Drive :Char;
begin
  FreeButtons(ButArr); // del buttons
   I := 0;
  for Drive := 'A' to 'Z' do
  begin
     DType := GetDriveType(PChar(Drive + ':\'));
    case DType of
      0: {The drive type cannot be determined.};
      1: {The root directory does not exist.};
      DRIVE_FIXED, DRIVE_REMOVABLE:
                   begin
                     ButArr[i] := TButton.Create(Self);
                     with ButArr[i] do
                     begin
                       Parent := PrnPan;
                       Caption := Drive + RemL[DType=DRIVE_REMOVABLE];
                       Width := 40;
                       Left := I*Width;
                       Top := 10;
                       Tag := i;
                       Visible := True;
                     end;
                     Inc(I);
                   end;
    end;
  end;
end;

procedure TForm1.WMDeviceChange(var message: TMessage);
begin
  case message.wParam of
    DBT_DEVICEARRIVAL: UpdAll
      {'Устройство было вставлено и теперь доступно'};
    DBT_DEVICEQUERYREMOVE:
        begin
          {'Разрешение удалять устройство запрошено. Любая прикладная программа может'
           'отвергать этот запрос и отменять удаление'
          };
          {True - дает разрешение}
          message.Result := integer(true);
          Exit;
        end;
    DBT_DEVICEQUERYREMOVEFAILED:
      {'Запрос, чтобы удалить устройство был отменен'};
    DBT_DEVICEREMOVEPENDING:
      {'Устройство собирается быть удаленным. Не может быть отклонено'};
    DBT_DEVICEREMOVECOMPLETE: UpdAll
      {'Устройство было удалено'};
    DBT_DEVICETYPESPECIFIC:
      {'Зависящее от устройств событие'};
    DBT_CONFIGCHANGED: UpdAll
      {'Текущая конфигурация изменилась'};
    DBT_DEVNODES_CHANGED:
      {'Узел устройства изменился'};
  end;
  inherited;
end;

end.
Alter вне форума Ответить с цитированием
Старый 05.03.2014, 15:05   #13
HTTqp
Форумчанин
 
Регистрация: 20.12.2013
Сообщений: 164
По умолчанию

Создаются в обе панели нормально, но при отключении не исчезают, FreeButtons(ButArr); почему то не срабатывает(

Последний раз редактировалось HTTqp; 05.03.2014 в 15:14.
HTTqp вне форума Ответить с цитированием
Старый 05.03.2014, 22:56   #14
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,239
По умолчанию

Небольшой эксперимент не хотели провести? Изменений(var) минимум.
Код:
unit Unit1;

interface

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

//const // если не подключать модуль DBT
//    DBT_DEVICEARRIVAL = $8000;
//    DBT_DEVICEQUERYREMOVE = $8001;
//    DBT_DEVICEQUERYREMOVEFAILED = $8002;
//    DBT_DEVICEREMOVEPENDING = $8003;
//    DBT_DEVICEREMOVECOMPLETE = $8004;
//    DBT_DEVICETYPESPECIFIC = $8005;
//    DBT_CONFIGCHANGED = $0018;
//    DBT_DEVNODES_CHANGED = $0007;

type
  TButtonsArr = array[1..15]of TButton;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Panel2: TPanel;
    procedure FormCreate(Sender: TObject);
  private
    procedure WMDeviceChange(var message: TMessage); message WM_DEVICECHANGE;
    { Private declarations }
  public
    Buttons1 :TButtonsArr;
    Buttons2 :TButtonsArr;
    procedure FreeButtons(var ButArr :TButtonsArr);
    procedure UpdB(var ButArr :TButtonsArr; PrnPan :TPanel);
    procedure UpdAll;
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
 UpdAll;
end;

procedure TForm1.FreeButtons(var ButArr :TButtonsArr);
var
  I :Byte;
begin
  for I := Low(ButArr) to High(ButArr) do
  if Assigned(ButArr[I]) then
   FreeAndNil(ButArr[I]);
end;

procedure TForm1.UpdAll;
begin
 UpdB(Buttons1, Panel1);
 UpdB(Buttons2, Panel2);
end;

procedure TForm1.UpdB(var ButArr :TButtonsArr; PrnPan :TPanel);
const
   RemL :array[Boolean] of string = ('', '(re)');
var
  I :Byte;
  DType :Integer;
  Drive :Char;
begin
  FreeButtons(ButArr); // del buttons
   I := Low(ButArr);
  for Drive := 'A' to 'Z' do
  begin
     DType := GetDriveType(PChar(Drive + ':\'));
    case DType of
      0: {The drive type cannot be determined.};
      1: {The root directory does not exist.};
      DRIVE_FIXED, DRIVE_REMOVABLE:
                   begin
                     ButArr[i] := TButton.Create(Self);
                     with ButArr[i] do
                     begin
                       Parent := PrnPan;
                       Caption := Drive + RemL[DType=DRIVE_REMOVABLE];
                       Width := 40;
                       Left := (I-1)*Width;
                       Top := 10;
                       Tag := i;
                       Visible := True;
                     end;
                     Inc(I);
                   end;
    end;
  end;
end;

procedure TForm1.WMDeviceChange(var message: TMessage);
begin
  case message.wParam of
    DBT_DEVICEARRIVAL: UpdAll
      {'Устройство было вставлено и теперь доступно'};
    DBT_DEVICEQUERYREMOVE:
        begin
          {'Разрешение удалять устройство запрошено. Любая прикладная программа может'
           'отвергать этот запрос и отменять удаление'
          };
          {True - дает разрешение}
          message.Result := integer(true);
          Exit;
        end;
    DBT_DEVICEQUERYREMOVEFAILED:
      {'Запрос, чтобы удалить устройство был отменен'};
    DBT_DEVICEREMOVEPENDING:
      {'Устройство собирается быть удаленным. Не может быть отклонено'};
    DBT_DEVICEREMOVECOMPLETE: UpdAll
      {'Устройство было удалено'};
    DBT_DEVICETYPESPECIFIC:
      {'Зависящее от устройств событие'};
    DBT_CONFIGCHANGED: UpdAll
      {'Текущая конфигурация изменилась'};
    DBT_DEVNODES_CHANGED:
      {'Узел устройства изменился'};
  end;
  inherited;
end;

end.
Alter вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамеческое создание кнопок casio23 Общие вопросы Delphi 2 31.12.2011 03:06
Создание множества кнопок aank10 C++ Builder 1 15.09.2011 20:31
Создание кнопок Alenkakiss Помощь студентам 4 07.06.2009 18:20
создание кнопок на сайте plaksa HTML и CSS 2 17.12.2008 15:42
Создание кнопок на лету gabin Компоненты Delphi 2 11.05.2008 15:30