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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.04.2007, 19:06   #1
ZhekON
Форумчанин
 
Аватар для ZhekON
 
Регистрация: 24.01.2007
Сообщений: 323
По умолчанию Лист

Люди подскажыте как перетащить элемент из Filelistbox в Listbox, и чтобы путь к файлу кудато тожэ запоминать, для того чтобы потом можно было обращатся к этому файлу.
Всё проще чем вы думаете, нужно только правильно подойти к тому или иному вопросу?
ZhekON вне форума Ответить с цитированием
Старый 13.04.2007, 22:16   #2
bphoenix
Пользователь
 
Аватар для bphoenix
 
Регистрация: 12.04.2007
Сообщений: 21
По умолчанию

Попробуй следующий код и не забудь выставить свойство DragMode у ListBox/FileListBox в dmAutomatic

Код:
procedure TForm1.ListBox1DragDrop(Sender, Source: TObject; X, Y: Integer);
var
  Str : String;
  Ptr : PChar;
begin
  if (Source is TFileListBox) then
    begin
      Str := (Source as TFileListBox).FileName;
      {
        здесь мы выделяем память для хранения полного имени файла.
        когда путь будет уже не нужен, не забудь освободить память
        при помощи FreeMem.
        делается это примерно так:
        for I := 0 to ListBox1.Items.Count - 1 do
          try
            FreeMem( Pointer(ListBox1.Items.Objects[ I ]) );
          except
          end;
      }
      Ptr := AllocMem( Length( Str ) + 1 );
      CopyMemory( Ptr, @Str[ 1 ], Length( Str ) );
      (Sender as TListBox).AddItem( ExtractFileName( Str ), TObject(Ptr) );
    end;
end;

procedure TForm1.ListBox1DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
  if (Source is TFileListBox) then
    Accept := True
  else
    Accept := False;
end;

procedure TForm1.ListBox1DblClick(Sender: TObject);
var
  Ptr : PChar;
begin
  if (Sender as TListBox).ItemIndex >= 0 then
    begin
      Ptr := PChar((Sender as TListBox).Items.Objects[ (Sender as TListBox).ItemIndex ]);
      ShowMessage( Ptr );
    end;
end;
Пусть баги обходят вас стороной

Последний раз редактировалось rpy3uH; 29.07.2008 в 12:50.
bphoenix вне форума Ответить с цитированием
Старый 14.04.2007, 14:01   #3
ZhekON
Форумчанин
 
Аватар для ZhekON
 
Регистрация: 24.01.2007
Сообщений: 323
По умолчанию

Цитата:
Сообщение от bphoenix Посмотреть сообщение
{
здесь мы выделяем память для хранения полного имени файла.
когда путь будет уже не нужен, не забудь освободить память
при помощи FreeMem.
делается это примерно так:
for I := 0 to ListBox1.Items.Count - 1 do
try
FreeMem( Pointer(ListBox1.Items.Objects[ I ]) );
except
end;
}
вот это не понял, как выделять? через GetMem или как? напишы...ато я не хорошо знаю эти функции...
Всё проще чем вы думаете, нужно только правильно подойти к тому или иному вопросу?
ZhekON вне форума Ответить с цитированием
Старый 14.04.2007, 18:09   #4
bphoenix
Пользователь
 
Аватар для bphoenix
 
Регистрация: 12.04.2007
Сообщений: 21
По умолчанию

а там уже написано как. через AllocMem

if (Source is TFileListBox) then
begin
Str := (Source as TFileListBox).FileName;
{
здесь мы выделяем память для хранения полного имени файла.
когда путь будет уже не нужен, не забудь освободить память
при помощи FreeMem.
делается это примерно так:
for I := 0 to ListBox1.Items.Count - 1 do
try
FreeMem( Pointer(ListBox1.Items.Objects[ I ]) );
except
end;
}
>>>>>> Ptr := AllocMem( Length( Str ) + 1 ); <<<<<< // здес выделяется память
CopyMemory( Ptr, @Str[ 1 ], Length( Str ) );
(Sender as TListBox).AddItem( ExtractFileName( Str ), TObject(Ptr) );
end;
Пусть баги обходят вас стороной
bphoenix вне форума Ответить с цитированием
Старый 17.04.2007, 10:59   #5
ZhekON
Форумчанин
 
Аватар для ZhekON
 
Регистрация: 24.01.2007
Сообщений: 323
По умолчанию

Спасибо, розобрался- работает!
Но возникла ещё одна проблема
Как при нажатии в другой форме Button'а получить адрес файла(текущего или первого в списке ListBox'а) в какуюто переменную?
Всё проще чем вы думаете, нужно только правильно подойти к тому или иному вопросу?
ZhekON вне форума Ответить с цитированием
Старый 17.04.2007, 11:34   #6
bphoenix
Пользователь
 
Аватар для bphoenix
 
Регистрация: 12.04.2007
Сообщений: 21
По умолчанию

в модуль, где находится форма с кнопкой в разделе implementation добавляешь uses <имя модуля, где форма с ListBox'ом>. проще всего это сделать через Alt + F11. теперь предположим, что форма с ListBox'ом называется Form1. тогда используешь следующий код:

procedure TForm2.Button1Click(Sender: TObject);
var
S : String;
begin
if Form1.ListBox1.ItemIndex > -1 then
begin
S := PChar(Form1.ListBox1.Items.Objects[ Form1.ListBox1.ItemIndex ]);
ShowMessage( S );
end;
end;
Пусть баги обходят вас стороной
bphoenix вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ICQClient контакт-лист DOLBY Компоненты Delphi 6 14.11.2008 22:38
Добавить лист в pdf файл jungo Microsoft Office Excel 1 10.07.2008 16:45
Word, ole, Альбомный лист K@$K@ Общие вопросы Delphi 2 16.04.2008 22:38
защитить лист zetrix Microsoft Office Excel 2 27.11.2006 17:21