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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отображение логических дисков 
:(
    Опции темы
akosh12345
Дата 14.6.2010, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Дорогие друзья. Пишу файловый менеджер. Возникла проблема с отображением дисков (ТОМ)
То есть, отображаю динамически кнопки дисков: 'C:','D:' ......'Z:'
создаю эти кнопки следующем образом.
 DriveRefreshLeft(ComboBoxLeft.Items.Count-1); // ComboBOxLeft - содержит имена дисков

Код

procedure DriveRefreshLeft(DriveCount : Integer);
var
 SpeedButDrive : TSpeedButton;
begin

 While DriveCount>=0 do
   begin
     SpeedButDrive := TSpeedButton.Create(Application);
     SpeedButDrive.Parent:= Main.ToolBar1;
     SpeedButDrive.Caption := LeftStr(Main.ComboBoxLeft.Items[DriveCount],2);
     SpeedButDrive.Name := 'SpeedButDriveLeft'+IntToStr(DriveCount);
     SpeedButDrive.GroupIndex := 1;
     SpeedButDrive.OnClick := Main.SpeedButLeft.OnClick;
     Dec(DriveCount);
     SpeedButDrive.Visible := true;
   end;

end;

Создаю на ToolBar1 кнопки

Обрабатываю на подключения новых устройств 

const
  DBT_DeviceArrival = $8000;
  DBT_DeviceRemoveComplete = $8004;
type
 TMain = class(TForm)
........
 private
   procedure WMDeviceChange(var Msg: TMessage); message WM_DEVICECHANGE;  // отслежка подключенных устройств.

procedure TMain.WMDeviceChange(var Msg: TMessage);
var
 Drive: string;
 Rect :TRect;
 Win :TWinControl;

 ld : DWORD; // переменные для подключенных дисков
 i : integer;

 free_size, total_size: Int64; // определения размера текущего диска
 p : string[1];
 o : char;

 SpeedButDrive: TSpeedButton; // вывод кнопок дисков
 TekDrive : string;
 Tek : integer;

 TekDriveLeft, TekDriveRight : string; // текущая позиция
begin
 Application.ProcessMessages;
 if Msg.wParam = DBT_DeviceArrival then
   begin //если засунули

    // левая панель
    Rect := DriveLeft.BoundsRect;
    Win := DriveLeft.Parent;
    DriveLeft.Free;
    DriveLeft := TDriveComboBox.Create(self);
    DriveLeft.Parent := Win;
    DriveLeft.BoundsRect := Rect;
    DriveLeft.Visible := True;
    DriveLeft.CharCase := ecUpperCase;
    DriveLeft.Visible := false;

    // правая панель
    Rect := DriveRight.BoundsRect;
    Win := DriveRight.Parent;
    DriveRight.Free;
    DriveRight := TDriveComboBox.Create(self);
    DriveRight.Parent := Win;
    DriveRight.BoundsRect := Rect;
    DriveRight.Visible := True;
    DriveRight.CharCase := ecUpperCase;
    DriveRight.Visible := false;

    TekDriveLeft := ComboBoxLeft.Items.Strings[ComboBoxLeft.ItemIndex];    // сохранил текущую позицию
    TekDriveRight := ComboBoxRight.Items.Strings[ComboBoxRight.ItemIndex];

    ComboBoxLeft.Items.Clear;   // очищаю
    ComboBoxRight.Items.Clear;

   // забиваю дисков в Combobox
     ld := GetLogicalDrives;
     for i := 0 to 25 do
       begin
           if (ld and (1 shl i)) <> 0 then
             begin
               ComboBoxLeft.Items.Add(Char(Ord('A') + i) + ':\');
               ComboBoxRight.Items.Add(Char(Ord('A') + i) + ':\');
             end;
        end;

  Tek := 0;

  while TekDrive <> TekDriveLeft do      // возвращаю на искомое место, которое было до обновления
   begin
     Tek := Tek+1;
     if ComboBoxLeft.Items.Strings[Tek] = TekDriveLeft then TekDrive := TekDriveLeft;
   end;

   ComboBoxLeft.ItemIndex := Tek;

   Tek := 0;

  while TekDrive <> TekDriveRight do
   begin
     Tek := Tek+1;
     if ComboBoxRight.Items.Strings[Tek] = TekDriveRight then TekDrive := TekDriveRight;
   end;

  ComboBoxRight.ItemIndex := Tek;

{  DriveRefreshLeft(ComboBoxLeft.Items.Count);

 Label1.Width:=ToolBar1.Width - ((DriveLeft.Items.Count)*SpeedButLeft.Width)-ListViewRight.Width+26;

 DriveRefreshRight(ComboBoxRight.Items.Count-1);
}
 end
 else if  Msg.wParam = DBT_DeviceRemoveComplete then
 begin //если выдернули
            // левая панель
            Rect := DriveLeft.BoundsRect;
            Win := DriveLeft.Parent;
            DriveLeft.Free;
            DriveLeft := TDriveComboBox.Create(self);
            DriveLeft.Parent := Win;
            DriveLeft.BoundsRect := Rect;
            DriveLeft.Visible := True;
            DriveLeft.CharCase := ecUpperCase;
            DriveLeft.Visible := false;

            // правая панель
            Rect := DriveRight.BoundsRect;
            Win := DriveRight.Parent;
            DriveRight.Free;
            DriveRight := TDriveComboBox.Create(self);
            DriveRight.Parent := Win;
            DriveRight.BoundsRect := Rect;
            DriveRight.Visible := True;
            DriveRight.CharCase := ecUpperCase;
            DriveRight.Visible := false;

            TekDriveLeft := ComboBoxLeft.Items.Strings[ComboBoxLeft.ItemIndex];    // сохранил текущую позицию
            TekDriveRight := ComboBoxRight.Items.Strings[ComboBoxRight.ItemIndex];

            ComboBoxLeft.Items.Clear;   // очищаю
            ComboBoxRight.Items.Clear;

           // забиваю дисков в Combobox
             ld := GetLogicalDrives;
             for i := 0 to 25 do
               begin
                   if (ld and (1 shl i)) <> 0 then
                     begin
                       ComboBoxLeft.Items.Add(Char(Ord('A') + i) + ':\');
                       ComboBoxRight.Items.Add(Char(Ord('A') + i) + ':\');
                     end;
                end;

          Tek := 0;

          while TekDrive <> TekDriveLeft do      // возвращаю на искомое место, которое было до обновления
           begin
             Tek := Tek+1;
             if ComboBoxLeft.Items.Strings[Tek] = TekDriveLeft then TekDrive := TekDriveLeft;
           end;

           ComboBoxLeft.ItemIndex := Tek;

           Tek := 0;

          while TekDrive <> TekDriveRight do
           begin
             Tek := Tek+1;
             if ComboBoxRight.Items.Strings[Tek] = TekDriveRight then TekDrive := TekDriveRight;
           end;

          ComboBoxRight.ItemIndex := Tek;

       {  DriveRefreshLeft(ComboBoxLeft.Items.Count);

         Label1.Width:=ToolBar1.Width - ((DriveLeft.Items.Count)*SpeedButLeft.Width)-ListViewRight.Width+26;

         DriveRefreshRight(ComboBoxRight.Items.Count-1);}
 end;
end;


как мне сделать так, что бы на форме появилась соответствующее количество кнопок?

Это сообщение отредактировал(а) bems - 14.6.2010, 21:36
PM MAIL   Вверх
bems
Дата 14.6.2010, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

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



akosh12345, кнопка КОД справа над полем быстрого ответа


--------------------
Обижено школьников: 8
PM MAIL   Вверх
akosh12345
Дата 14.6.2010, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



bems вообще не понял что написал, плиз внятнее и по-русский
PM MAIL   Вверх
Keeper89
Дата 14.6.2010, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

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



user posted image
Цитата(akosh12345 @  14.6.2010,  20:59 Найти цитируемый пост)
внятнее и по-русский

smile


--------------------
PM MAIL WWW   Вверх
akosh12345
Дата 14.6.2010, 21:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код

const
  DBT_DeviceArrival = $8000;
  DBT_DeviceRemoveComplete = $8004;
type
 TMain = class(TForm)
........
 private
   procedure WMDeviceChange(var Msg: TMessage); message WM_DEVICECHANGE;  // отслежка подключенных устройств.

procedure TMain.WMDeviceChange(var Msg: TMessage);
var
 Drive: string;
 Rect :TRect;
 Win :TWinControl;

 ld : DWORD; // переменные для подключенных дисков
 i : integer;

 free_size, total_size: Int64; // определения размера текущего диска
 p : string[1];
 o : char;

 SpeedButDrive: TSpeedButton; // вывод кнопок дисков
 TekDrive : string;
 Tek : integer;

 TekDriveLeft, TekDriveRight : string; // текущая позиция
begin
 Application.ProcessMessages;
 if Msg.wParam = DBT_DeviceArrival then
   begin //если засунули

    // левая панель
    Rect := DriveLeft.BoundsRect;
    Win := DriveLeft.Parent;
    DriveLeft.Free;
    DriveLeft := TDriveComboBox.Create(self);
    DriveLeft.Parent := Win;
    DriveLeft.BoundsRect := Rect;
    DriveLeft.Visible := True;
    DriveLeft.CharCase := ecUpperCase;
    DriveLeft.Visible := false;

    // правая панель
    Rect := DriveRight.BoundsRect;
    Win := DriveRight.Parent;
    DriveRight.Free;
    DriveRight := TDriveComboBox.Create(self);
    DriveRight.Parent := Win;
    DriveRight.BoundsRect := Rect;
    DriveRight.Visible := True;
    DriveRight.CharCase := ecUpperCase;
    DriveRight.Visible := false;

    TekDriveLeft := ComboBoxLeft.Items.Strings[ComboBoxLeft.ItemIndex];    // сохранил текущую позицию
    TekDriveRight := ComboBoxRight.Items.Strings[ComboBoxRight.ItemIndex];

    ComboBoxLeft.Items.Clear;   // очищаю
    ComboBoxRight.Items.Clear;

   // забиваю дисков в Combobox
     ld := GetLogicalDrives;
     for i := 0 to 25 do
       begin
           if (ld and (1 shl i)) <> 0 then
             begin
               ComboBoxLeft.Items.Add(Char(Ord('A') + i) + ':\');
               ComboBoxRight.Items.Add(Char(Ord('A') + i) + ':\');
             end;
        end;

  Tek := 0;

  while TekDrive <> TekDriveLeft do      // возвращаю на искомое место, которое было до обновления
   begin
     Tek := Tek+1;
     if ComboBoxLeft.Items.Strings[Tek] = TekDriveLeft then TekDrive := TekDriveLeft;
   end;

   ComboBoxLeft.ItemIndex := Tek;

   Tek := 0;

  while TekDrive <> TekDriveRight do
   begin
     Tek := Tek+1;
     if ComboBoxRight.Items.Strings[Tek] = TekDriveRight then TekDrive := TekDriveRight;
   end;

  ComboBoxRight.ItemIndex := Tek;

{  DriveRefreshLeft(ComboBoxLeft.Items.Count);

 Label1.Width:=ToolBar1.Width - ((DriveLeft.Items.Count)*SpeedButLeft.Width)-ListViewRight.Width+26;

 DriveRefreshRight(ComboBoxRight.Items.Count-1);
}
 end
 else if  Msg.wParam = DBT_DeviceRemoveComplete then
 begin //если выдернули
            // левая панель
            Rect := DriveLeft.BoundsRect;
            Win := DriveLeft.Parent;
            DriveLeft.Free;
            DriveLeft := TDriveComboBox.Create(self);
            DriveLeft.Parent := Win;
            DriveLeft.BoundsRect := Rect;
            DriveLeft.Visible := True;
            DriveLeft.CharCase := ecUpperCase;
            DriveLeft.Visible := false;

            // правая панель
            Rect := DriveRight.BoundsRect;
            Win := DriveRight.Parent;
            DriveRight.Free;
            DriveRight := TDriveComboBox.Create(self);
            DriveRight.Parent := Win;
            DriveRight.BoundsRect := Rect;
            DriveRight.Visible := True;
            DriveRight.CharCase := ecUpperCase;
            DriveRight.Visible := false;

            TekDriveLeft := ComboBoxLeft.Items.Strings[ComboBoxLeft.ItemIndex];    // сохранил текущую позицию
            TekDriveRight := ComboBoxRight.Items.Strings[ComboBoxRight.ItemIndex];

            ComboBoxLeft.Items.Clear;   // очищаю
            ComboBoxRight.Items.Clear;

           // забиваю дисков в Combobox
             ld := GetLogicalDrives;
             for i := 0 to 25 do
               begin
                   if (ld and (1 shl i)) <> 0 then
                     begin
                       ComboBoxLeft.Items.Add(Char(Ord('A') + i) + ':\');
                       ComboBoxRight.Items.Add(Char(Ord('A') + i) + ':\');
                     end;
                end;

          Tek := 0;

          while TekDrive <> TekDriveLeft do      // возвращаю на искомое место, которое было до обновления
           begin
             Tek := Tek+1;
             if ComboBoxLeft.Items.Strings[Tek] = TekDriveLeft then TekDrive := TekDriveLeft;
           end;

           ComboBoxLeft.ItemIndex := Tek;

           Tek := 0;

          while TekDrive <> TekDriveRight do
           begin
             Tek := Tek+1;
             if ComboBoxRight.Items.Strings[Tek] = TekDriveRight then TekDrive := TekDriveRight;
           end;

          ComboBoxRight.ItemIndex := Tek;

       {  DriveRefreshLeft(ComboBoxLeft.Items.Count);

         Label1.Width:=ToolBar1.Width - ((DriveLeft.Items.Count)*SpeedButLeft.Width)-ListViewRight.Width+26;

         DriveRefreshRight(ComboBoxRight.Items.Count-1);}
 end;
end;


Добавлено @ 21:23
Код

const
  DBT_DeviceArrival = $8000;
  DBT_DeviceRemoveComplete = $8004;
type
 TMain = class(TForm)
........
 private
   procedure WMDeviceChange(var Msg: TMessage); message WM_DEVICECHANGE;  // отслежка подключенных устройств.

procedure TMain.WMDeviceChange(var Msg: TMessage);
var
 Drive: string;
 Rect :TRect;
 Win :TWinControl;

 ld : DWORD; // переменные для подключенных дисков
 i : integer;

 free_size, total_size: Int64; // определения размера текущего диска
 p : string[1];
 o : char;

 SpeedButDrive: TSpeedButton; // вывод кнопок дисков
 TekDrive : string;
 Tek : integer;

 TekDriveLeft, TekDriveRight : string; // текущая позиция
begin
 Application.ProcessMessages;
 if Msg.wParam = DBT_DeviceArrival then
   begin //если засунули

    // левая панель
    Rect := DriveLeft.BoundsRect;
    Win := DriveLeft.Parent;
    DriveLeft.Free;
    DriveLeft := TDriveComboBox.Create(self);
    DriveLeft.Parent := Win;
    DriveLeft.BoundsRect := Rect;
    DriveLeft.Visible := True;
    DriveLeft.CharCase := ecUpperCase;
    DriveLeft.Visible := false;

    // правая панель
    Rect := DriveRight.BoundsRect;
    Win := DriveRight.Parent;
    DriveRight.Free;
    DriveRight := TDriveComboBox.Create(self);
    DriveRight.Parent := Win;
    DriveRight.BoundsRect := Rect;
    DriveRight.Visible := True;
    DriveRight.CharCase := ecUpperCase;
    DriveRight.Visible := false;

    TekDriveLeft := ComboBoxLeft.Items.Strings[ComboBoxLeft.ItemIndex];    // сохранил текущую позицию
    TekDriveRight := ComboBoxRight.Items.Strings[ComboBoxRight.ItemIndex];

    ComboBoxLeft.Items.Clear;   // очищаю
    ComboBoxRight.Items.Clear;

   // забиваю дисков в Combobox
     ld := GetLogicalDrives;
     for i := 0 to 25 do
       begin
           if (ld and (1 shl i)) <> 0 then
             begin
               ComboBoxLeft.Items.Add(Char(Ord('A') + i) + ':\');
               ComboBoxRight.Items.Add(Char(Ord('A') + i) + ':\');
             end;
        end;

  Tek := 0;

  while TekDrive <> TekDriveLeft do      // возвращаю на искомое место, которое было до обновления
   begin
     Tek := Tek+1;
     if ComboBoxLeft.Items.Strings[Tek] = TekDriveLeft then TekDrive := TekDriveLeft;
   end;

   ComboBoxLeft.ItemIndex := Tek;

   Tek := 0;

  while TekDrive <> TekDriveRight do
   begin
     Tek := Tek+1;
     if ComboBoxRight.Items.Strings[Tek] = TekDriveRight then TekDrive := TekDriveRight;
   end;

  ComboBoxRight.ItemIndex := Tek;

{  DriveRefreshLeft(ComboBoxLeft.Items.Count);

 Label1.Width:=ToolBar1.Width - ((DriveLeft.Items.Count)*SpeedButLeft.Width)-ListViewRight.Width+26;

 DriveRefreshRight(ComboBoxRight.Items.Count-1);
}
 end
 else if  Msg.wParam = DBT_DeviceRemoveComplete then
 begin //если выдернули
            // левая панель
            Rect := DriveLeft.BoundsRect;
            Win := DriveLeft.Parent;
            DriveLeft.Free;
            DriveLeft := TDriveComboBox.Create(self);
            DriveLeft.Parent := Win;
            DriveLeft.BoundsRect := Rect;
            DriveLeft.Visible := True;
            DriveLeft.CharCase := ecUpperCase;
            DriveLeft.Visible := false;

            // правая панель
            Rect := DriveRight.BoundsRect;
            Win := DriveRight.Parent;
            DriveRight.Free;
            DriveRight := TDriveComboBox.Create(self);
            DriveRight.Parent := Win;
            DriveRight.BoundsRect := Rect;
            DriveRight.Visible := True;
            DriveRight.CharCase := ecUpperCase;
            DriveRight.Visible := false;

            TekDriveLeft := ComboBoxLeft.Items.Strings[ComboBoxLeft.ItemIndex];    // сохранил текущую позицию
            TekDriveRight := ComboBoxRight.Items.Strings[ComboBoxRight.ItemIndex];

            ComboBoxLeft.Items.Clear;   // очищаю
            ComboBoxRight.Items.Clear;

           // забиваю дисков в Combobox
             ld := GetLogicalDrives;
             for i := 0 to 25 do
               begin
                   if (ld and (1 shl i)) <> 0 then
                     begin
                       ComboBoxLeft.Items.Add(Char(Ord('A') + i) + ':\');
                       ComboBoxRight.Items.Add(Char(Ord('A') + i) + ':\');
                     end;
                end;

          Tek := 0;

          while TekDrive <> TekDriveLeft do      // возвращаю на искомое место, которое было до обновления
           begin
             Tek := Tek+1;
             if ComboBoxLeft.Items.Strings[Tek] = TekDriveLeft then TekDrive := TekDriveLeft;
           end;

           ComboBoxLeft.ItemIndex := Tek;

           Tek := 0;

          while TekDrive <> TekDriveRight do
           begin
             Tek := Tek+1;
             if ComboBoxRight.Items.Strings[Tek] = TekDriveRight then TekDrive := TekDriveRight;
           end;

          ComboBoxRight.ItemIndex := Tek;

       {  DriveRefreshLeft(ComboBoxLeft.Items.Count);

         Label1.Width:=ToolBar1.Width - ((DriveLeft.Items.Count)*SpeedButLeft.Width)-ListViewRight.Width+26;

         DriveRefreshRight(ComboBoxRight.Items.Count-1);}
 end;
end;


Добавлено @ 21:25
Код

procedure DriveRefreshLeft(DriveCount : Integer);
var
 SpeedButDrive : TSpeedButton;
begin

 While DriveCount>=0 do
   begin
     SpeedButDrive := TSpeedButton.Create(Application);
     SpeedButDrive.Parent:= Main.ToolBar1;
     SpeedButDrive.Caption := LeftStr(Main.ComboBoxLeft.Items[DriveCount],2);
     SpeedButDrive.Name := 'SpeedButDriveLeft'+IntToStr(DriveCount);
     SpeedButDrive.GroupIndex := 1;
     SpeedButDrive.OnClick := Main.SpeedButLeft.OnClick;
     Dec(DriveCount);
     SpeedButDrive.Visible := true;
   end;

end;

Создаю на ToolBar1 кнопки

Обрабатываю на подключения новых устройств 

const
  DBT_DeviceArrival = $8000;
  DBT_DeviceRemoveComplete = $8004;
type
 TMain = class(TForm)
........
 private
   procedure WMDeviceChange(var Msg: TMessage); message WM_DEVICECHANGE;  // отслежка подключенных устройств.

procedure TMain.WMDeviceChange(var Msg: TMessage);
var
 Drive: string;
 Rect :TRect;
 Win :TWinControl;

 ld : DWORD; // переменные для подключенных дисков
 i : integer;

 free_size, total_size: Int64; // определения размера текущего диска
 p : string[1];
 o : char;

 SpeedButDrive: TSpeedButton; // вывод кнопок дисков
 TekDrive : string;
 Tek : integer;

 TekDriveLeft, TekDriveRight : string; // текущая позиция
begin
 Application.ProcessMessages;
 if Msg.wParam = DBT_DeviceArrival then
   begin //если засунули

    // левая панель
    Rect := DriveLeft.BoundsRect;
    Win := DriveLeft.Parent;
    DriveLeft.Free;
    DriveLeft := TDriveComboBox.Create(self);
    DriveLeft.Parent := Win;
    DriveLeft.BoundsRect := Rect;
    DriveLeft.Visible := True;
    DriveLeft.CharCase := ecUpperCase;
    DriveLeft.Visible := false;

    // правая панель
    Rect := DriveRight.BoundsRect;
    Win := DriveRight.Parent;
    DriveRight.Free;
    DriveRight := TDriveComboBox.Create(self);
    DriveRight.Parent := Win;
    DriveRight.BoundsRect := Rect;
    DriveRight.Visible := True;
    DriveRight.CharCase := ecUpperCase;
    DriveRight.Visible := false;

    TekDriveLeft := ComboBoxLeft.Items.Strings[ComboBoxLeft.ItemIndex];    // сохранил текущую позицию
    TekDriveRight := ComboBoxRight.Items.Strings[ComboBoxRight.ItemIndex];

    ComboBoxLeft.Items.Clear;   // очищаю
    ComboBoxRight.Items.Clear;

   // забиваю дисков в Combobox
     ld := GetLogicalDrives;
     for i := 0 to 25 do
       begin
           if (ld and (1 shl i)) <> 0 then
             begin
               ComboBoxLeft.Items.Add(Char(Ord('A') + i) + ':\');
               ComboBoxRight.Items.Add(Char(Ord('A') + i) + ':\');
             end;
        end;

  Tek := 0;

  while TekDrive <> TekDriveLeft do      // возвращаю на искомое место, которое было до обновления
   begin
     Tek := Tek+1;
     if ComboBoxLeft.Items.Strings[Tek] = TekDriveLeft then TekDrive := TekDriveLeft;
   end;

   ComboBoxLeft.ItemIndex := Tek;

   Tek := 0;

  while TekDrive <> TekDriveRight do
   begin
     Tek := Tek+1;
     if ComboBoxRight.Items.Strings[Tek] = TekDriveRight then TekDrive := TekDriveRight;
   end;

  ComboBoxRight.ItemIndex := Tek;

{  DriveRefreshLeft(ComboBoxLeft.Items.Count);

 Label1.Width:=ToolBar1.Width - ((DriveLeft.Items.Count)*SpeedButLeft.Width)-ListViewRight.Width+26;

 DriveRefreshRight(ComboBoxRight.Items.Count-1);
}
 end
 else if  Msg.wParam = DBT_DeviceRemoveComplete then
 begin //если выдернули
            // левая панель
            Rect := DriveLeft.BoundsRect;
            Win := DriveLeft.Parent;
            DriveLeft.Free;
            DriveLeft := TDriveComboBox.Create(self);
            DriveLeft.Parent := Win;
            DriveLeft.BoundsRect := Rect;
            DriveLeft.Visible := True;
            DriveLeft.CharCase := ecUpperCase;
            DriveLeft.Visible := false;

            // правая панель
            Rect := DriveRight.BoundsRect;
            Win := DriveRight.Parent;
            DriveRight.Free;
            DriveRight := TDriveComboBox.Create(self);
            DriveRight.Parent := Win;
            DriveRight.BoundsRect := Rect;
            DriveRight.Visible := True;
            DriveRight.CharCase := ecUpperCase;
            DriveRight.Visible := false;

            TekDriveLeft := ComboBoxLeft.Items.Strings[ComboBoxLeft.ItemIndex];    // сохранил текущую позицию
            TekDriveRight := ComboBoxRight.Items.Strings[ComboBoxRight.ItemIndex];

            ComboBoxLeft.Items.Clear;   // очищаю
            ComboBoxRight.Items.Clear;

           // забиваю дисков в Combobox
             ld := GetLogicalDrives;
             for i := 0 to 25 do
               begin
                   if (ld and (1 shl i)) <> 0 then
                     begin
                       ComboBoxLeft.Items.Add(Char(Ord('A') + i) + ':\');
                       ComboBoxRight.Items.Add(Char(Ord('A') + i) + ':\');
                     end;
                end;

          Tek := 0;

          while TekDrive <> TekDriveLeft do      // возвращаю на искомое место, которое было до обновления
           begin
             Tek := Tek+1;
             if ComboBoxLeft.Items.Strings[Tek] = TekDriveLeft then TekDrive := TekDriveLeft;
           end;

           ComboBoxLeft.ItemIndex := Tek;

           Tek := 0;

          while TekDrive <> TekDriveRight do
           begin
             Tek := Tek+1;
             if ComboBoxRight.Items.Strings[Tek] = TekDriveRight then TekDrive := TekDriveRight;
           end;

          ComboBoxRight.ItemIndex := Tek;

       {  DriveRefreshLeft(ComboBoxLeft.Items.Count);

         Label1.Width:=ToolBar1.Width - ((DriveLeft.Items.Count)*SpeedButLeft.Width)-ListViewRight.Width+26;

         DriveRefreshRight(ComboBoxRight.Items.Count-1);}
 end;
end;



Добавлено @ 21:27
Цитата(bems @  14.6.2010,  20:12 Найти цитируемый пост)
akosh12345, кнопка КОД справа над полем быстрого ответа 


что-то я вообще не понял? зачем ты мне написал это? что мне это дало?

Это сообщение отредактировал(а) bems - 14.6.2010, 21:38
PM MAIL   Вверх
bems
Дата 14.6.2010, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

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



Намек оформлять свои посты так, чтобы их можно было читать оказался не достаточно толстым

Это сообщение отредактировал(а) bems - 14.6.2010, 21:45


--------------------
Обижено школьников: 8
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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