Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 13.01.2007, 17:25
Delphinic Delphinic вне форума
Начинающий
 
Регистрация: 20.11.2006
Сообщения: 134
Репутация: 15
По умолчанию Всплывающий индикатор копирования.

Подскажите как сделать всплывающий индикатор копирования?
Продедуры которые выполняются делать в этом всплывающем окне с индикатором или в отдельном??
Я пробовал, но туда не передаются данные из переменной.
Индикатор молчит..
Ответить с цитированием
  #2  
Старый 13.01.2007, 20:01
~ SaM ~ ~ SaM ~ вне форума
Начинающий
 
Регистрация: 05.01.2007
Адрес: Днепропетровск
Сообщения: 141
Репутация: 25
По умолчанию

Чувак, а что ты имеешь ввиду по словом "всплывающий"???Просто я сталкивался с такой штукой пару дней назад и решил ее путем тупого ПрогрессБара(т.е. во время копирования он появляется, ну и движется по ходу копирования)!!!!
Если хочешь, то могу тебе на мыло выслать прогу, которая при копировании файла работает с прогрессбаром!!!!
Извини, но сейчас так не вспомню код...

Последний раз редактировалось ~ SaM ~, 13.01.2007 в 20:06.
Ответить с цитированием
  #3  
Старый 14.01.2007, 12:18
Delphinic Delphinic вне форума
Начинающий
 
Регистрация: 20.11.2006
Сообщения: 134
Репутация: 15
По умолчанию

Рассказываю.
Значит есть главная форма.
В главной форме есть кнопка (загрузить папки)
Я жму на главную фрму у меня появляется диалоговое окно для загрузки папок и когда я выбираю папку и жму ОК у меня должен всплыть индикатор копирования и показывать результат.
Вот.
Чего значит я сделал.
Создал вторую форму в ней индикатор и там же код.
Не пашет.
получается такая фигня, всплывает окно выбора директории а индикатор копирования как бы неактивный но его видно. Вообщем чушт какая то пол дня провозился, и в конце концов терпение кончилось, чувствую просто не по уму делаю, и сюда решил отписать.
Почему то после закрытия формы диалога выбора каталога, ничего не хочет больше появляться на экран.Хотя вроде как отработала форма и выгрузилась. Просто передала путь в код и все. Дальше работает процедура копирования.
Она по одному файлу копирует и из CheckListBox, галочки снимает. Но индикатор сабака молчит, хотя его видно.
Код вставлен в событие Show. Потом происходит Hide после выполнение копирования.
Тоесть как тока форма вторая с индикатором копирования Show, тут же открывается диалог выбора папки, я выбираю папку, путь передается в переменную например Dir := SelectFolder(Handle, 'Выбери каталог', 'C:\');
Далее пошел код копирования файлов.
Когда все заканчивается все останавливается, форма с индикатором висит, но индикатор нкакой.
И чтоб форма выгрузилась пришлось криво извратится, но это неправильно и временно. Я в событие OnDeactivate воткнул Hide;
Потому что если это воткнуть в событие Show, то по окончании выполнения кпрограммы возникает ошибка.
Вот еще проблемма сделать замоскрывающуюся форму.

Вот...

Последний раз редактировалось Delphinic, 14.01.2007 в 12:30.
Ответить с цитированием
  #4  
Старый 14.01.2007, 19:39
Аватар для Decoding
Decoding Decoding вне форума
Местный
 
Регистрация: 03.06.2006
Адрес: Почту найдете на моем сайте
Сообщения: 576
Версия Delphi: D10.2
Репутация: 214
По умолчанию

Показывай код…
Ответить с цитированием
  #5  
Старый 14.01.2007, 23:20
Delphinic Delphinic вне форума
Начинающий
 
Регистрация: 20.11.2006
Сообщения: 134
Репутация: 15
По умолчанию

unit CopyIndicators;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, cm_LSVGauges, ActiveX, ShlObj, ShellAPI;

type
TFcopy = class(TForm)
OneCopy: TLSVGauge;
procedure FormShow(Sender: TObject);
procedure FormDeactivate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Fcopy: TFcopy;
IMassive : Integer;
Dirs, MyDir : String;

implementation

uses SelectDir, PlayList;

{$R *.dfm}


function BrowseCallbackProc(hwnd: HWND; uMsg: UINT; lParam: LPARAM; lpData: LPARAM): integer; stdcall;
begin
Result := 0;
if uMsg = BFFM_INITIALIZED then
SendMessage( hwnd, BFFM_SETSELECTION, 1,
LongInt( PChar( myDir ) ) );
end;

/// Выбор каталога.
function SelectDirPlus(hWnd: HWND; const Caption: string; const Root: WideString): String;
var
WindowList: Pointer;
BrowseInfo : TBrowseInfo;
Buffer: PChar;
RootItemIDList, ItemIDList: PItemIDList;
ShellMalloc: IMalloc;
IDesktopFolder: IShellFolder;
Eaten, Flags: LongWord;
Cmd: Boolean;
begin
FillChar( BrowseInfo, SizeOf( BrowseInfo ), 0 );
if ( ShGetMalloc( ShellMalloc ) = S_OK ) and ( ShellMalloc <> nil ) then
begin
Buffer := ShellMalloc.Alloc( MAX_PATH );
try
RootItemIDList := nil;
if Root <> '' then
begin
SHGetDesktopFolder( IDesktopFolder );
IDesktopFolder.ParseDisplayName( hWnd, nil,
POleStr( Root ), Eaten, RootItemIDList, Flags );
end;
with BrowseInfo do
begin
hwndOwner := hWnd;
pidlRoot := RootItemIDList;
pszDisplayName := Buffer;
lpfn := BrowseCallbackProc;
lpszTitle := PChar( Caption );
ulFlags := BIF_RETURNONLYFSDIRS or $0040 or BIF_EDITBOX or BIF_STATUSTEXT;
end;
WindowList := DisableTaskWindows( 0 );
try
ItemIDList := ShBrowseForFolder( BrowseInfo );
finally
EnableTaskWindows( WindowList );
end;
Cmd := ItemIDList <> nil;
if Cmd then
begin
ShGetPathFromIDList( ItemIDList, Buffer );
ShellMalloc.Free( ItemIDList );
Result:= Buffer;
end;
finally
ShellMalloc.Free( Buffer );
end;
end;
end;

// Процедура копирования.
procedure FastFileCopy(const InfileName, OutFileName: string; SizeDone, SizeFile: LongInt);
const
BufSize = 3*4*4096;
type
PBuffer = ^TBuffer;
TBuffer = array [1..BufSize] of Byte;
var
Size : integer;
Buffer : PBuffer;
infile, outfile : file;
// SizeDone, SizeFile: Longint;
begin
if (InFileName <> OutFileName) then
begin
buffer := nil;
AssignFile(infile, InFileName);
System.Reset(infile, 1);
try
SizeFile := FileSize(infile);
AssignFile(outfile, OutFileName);
System.Rewrite(outfile, 1);
try
SizeDone := 0; New(Buffer);
repeat
BlockRead(infile, Buffer^, BufSize, Size);
Inc(SizeDone, Size);
FCopy.OneCopy.Progress := SizeDone; // Индикатор копирования. Gauge.
FCopy.OneCopy.MaxValue := SizeFile; // Максимальное значение Gauge.
BlockWrite(outfile,Buffer^, Size)
until Size < BufSize;
FileSetDate(TFileRec(outfile).Handle,
FileGetDate(TFileRec(infile).Handle));
finally
if Buffer <> nil then
Dispose(Buffer);
System.close(outfile)
end;
finally
System.close(infile);
end;
end
else
raise EInOutError.Create('File cannot be copied into itself');
end;



procedure TFcopy.FormShow(Sender: TObject);
begin
FCopy.Visible := True; // Пытался добиться видимости формы.
Dirs := SelectDirPlus( Handle, 'Выбор каталога', 'd:\' ); /// Выбор каталога
Imassive := 0;
Repeat
If ListF.CLB.Count = 0 Then Exit; // ListF Список файлов MP3. CheckListBox (CLB)
If ListF.CLB.Selected[Imassive] = True Then
Begin
FileSetAttr(ListF.CLB.items[IMassive],FaArchive);
FastFileCopy(ListF.CLB.items.Strings[IMassive],Dirs+'\'+ExtractFileName(ListF.CLB.items.Strings[Imassive]),int1,int); //Обращение к процедуре копирования файлов .
End;
IMAssive := Imassive + 1;
//Form1.Caption := IntToStr(CLB.Count);
Until IMassive = ListF.CLB.Count;
IMassive := 0;
Repeat
If ListF.CLB.Count = 0 Then Exit;
If ListF.CLB.Checked[Imassive] = True Then
Begin
FileSetAttr(ListF.CLB.Items.Strings[Imassive],FaArchive);
FastFileCopy(ListF.CLB.items[IMassive],Dirs+'\'+ExtractFileName(ListF.CLB.items[Imassive]),int1,int);
ListF.CLB.Checked[IMassive] := False;
End;
Inc(Imassive);
Until Imassive = ListF.CLB.Count;
end;

procedure TFcopy.FormDeactivate(Sender: TObject);
begin
ShowWindow(Fcopy.Handle, SW_Hide); // Типа скрывается форма. Но по кривому.
end;

end.

Последний раз редактировалось Delphinic, 14.01.2007 в 23:31.
Ответить с цитированием
  #6  
Старый 15.01.2007, 00:57
Аватар для Decoding
Decoding Decoding вне форума
Местный
 
Регистрация: 03.06.2006
Адрес: Почту найдете на моем сайте
Сообщения: 576
Версия Delphi: D10.2
Репутация: 214
По умолчанию

Глянь это - primer.zip
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 02:53.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter