Давайте поможем друг другу!!!

Алгоритмы, вопросы по синаксису, описание програмного обеспечения, администрирование серверов и т.д. и т.п.

Модератор: Модераторы

+}{oTT@BbI4+

Давайте поможем друг другу!!!

Сообщение +}{oTT@BbI4+ »

Если кому что нада прошу сюда выкладывать, может кому что найдётся!(по теме програмирования)
Аватара пользователя
ToNick
постоянный житель
постоянный житель
Сообщения: 96
Зарегистрирован: 02 фев 2007, 13:05
Контактная информация:

Сообщение ToNick »

Мне интересно как и с помощью какого фильтра через функции DirectDraw вывести бегущую строку на поток видео и записать куда-нибудь. Записать как-бы не проблема, а вот с бегущей строкой - интересно. Если можно фрагмент кода, например, Delphi. Буду рад любой инфе.
Аватара пользователя
Denied
ВЕТЕРАН
ВЕТЕРАН
Сообщения: 978
Зарегистрирован: 02 ноя 2004, 20:12
Откуда: Горно-Дырск
Контактная информация:

Сообщение Denied »

ìíå âîò íàäî ñêîïèðîâàòü ôàéë 1..4 èç ïàïêè À â ïàïêó Á ïðè ýòîì ïîìåíÿòü èìåíà. äóëüôè 7. íå ìîãó îñèëèòü.
...сказал они запил водой.
MaSe

Сообщение MaSe »

Denied писал(а):мне вот надо скопировать файл 1..4 из папки А в папку Б при этом поменять имена. дульфи 7. не могу осилить.
Delphi World
Файловые операции средствами ShellAPI
--------------------------------------------------------------------------------

Программер сидит дома, смотрит TV. За его спиной стоит комп. Из-за монитора выглядывает мальчик 5 лет:
- Пап, а пап, а фто знатит "формат драйв цэ камплит"?


В данной статье мы подробно рассмотрим применение функции SHFileOperation.



function SHFileOperation(const lpFileOp: TSHFileOpStruct): Integer; stdcall;




Данная функция позволяет производить копирование, перемещение, переименование и удаление (в том числе и в Recycle Bin) объектов файловой системы.

Функция возвращает 0, если операция выполнена успешно, и ненулевое значение в противном :-) случае.

Функция имеет единственный аргумент - структуру типа TSHFileOpStruct, в которой и передаются все необходимые данные.

Эта структура выглядит следующим образом:



_SHFILEOPSTRUCTA = packed record
Wnd: HWND;
wFunc: UINT;
pFrom: PAnsiChar;
pTo: PAnsiChar;
fFlags: FILEOP_FLAGS;
fAnyOperationsAborted: BOOL;
hNameMappings: Pointer;
lpszProgressTitle: PAnsiChar; { используется только при установленном флаге FOF_SIMPLEPROGRESS }
end;




Поля этой структуры имеют следующее назначение:

hwnd
Хэндл окна, на которое будут выводиться диалоговые окна о ходе операции.
wFunc
Требуемая операция. Может принимать одно из значений:
FO_COPY - Копирует файлы, указанные в pFrom в папку, указанную в pTo.
FO_DELETE - Удаляет файлы, указанные pFrom (pTo игнорируется).
FO_MOVE - Перемещает файлы, указанные в pFrom в папку, указанную в pTo.
FO_RENAME - Переименовывает файлы, указанные в pFrom.
pFrom
Указатель на буфер, содержащий пути к одному или нескольким файлам. Если файлов несколько, между путями ставится нулевой байт. Список должен заканчиваться двумя нулевыми байтами.
pTo
Аналогично pFrom, но содержит путь к директории - адресату, в которую производится копирование или перемещение файлов. Также может содержать несколько путей. При этом нужно установить флаг FOF_MULTIDESTFILES.
fFlags
Управляющие флаги.
FOF_ALLOWUNDO Если возможно, сохраняет информацию для возможности UnDo.
FOF_CONFIRMMOUSE Не реализовано.
FOF_FILESONLY Если в поле pFrom установлено *.*, то операция будет производиться только с файлами.
FOF_MULTIDESTFILES Указывает, что для каждого исходного файла в поле pFrom указана своя директория - адресат.
FOF_NOCONFIRMATION Отвечает "yes to all" на все запросы в ходе опеации.
FOF_NOCONFIRMMKDIR Не подтверждает создание нового каталога, если операция требует, чтобы он был создан.
FOF_RENAMEONCOLLISION В случае, если уже существует файл с данным именем, создается файл с именем "Copy #N of..."
FOF_SILENT Не показывать диалог с индикатором прогресса.
FOF_SIMPLEPROGRESS Показывать диалог с индикатором прогресса, но не показывать имен файлов.
FOF_WANTMAPPINGHANDLE Вносит hNameMappings элемент. Дескриптор должен быть освобожден функцией SHFreeNameMappings.
fAnyOperationsAborted
Принимает значение TRUE если пользователь прервал любую файловую операцию до ее завершения и FALSE в ином случае.
hNameMappings
Дескриптор объекта отображения имени файла, который содержит массив структур SHNAMEMAPPING. Каждая структура содержит старые и новые имена пути для каждого файла, который перемещался, скопирован, или переименован. Этот элемент используется только, если установлен флаг FOF_WANTMAPPINGHANDLE.
lpszProgressTitle
Указатель на строку, используемую как заголовок для диалогового окна прогресса. Этот элемент используется только, если установлен флаг FOF_SIMPLEPROGRESS.
Примечание.

Если pFrom или pTo не указаны, берутся файлы из текущей директории. Текущую директорию можно установить с помощью функции SetCurrentDirectory и получить функцией GetCurrentDirectory.

А теперь - примеры

Разумеется, вам нужно вставить в секцию uses модуль ShellAPI, в котором определена функция SHFileOperation.

Рассмотрим самое простое - удаление файлов.



procedure TForm1.Button1Click(Sender: TObject);
var
SHFileOpStruct : TSHFileOpStruct;
From : array [0..255] of Char;
begin
SetCurrentDirectory( PChar( 'C:\' ) );
From := 'Test1.tst' + #0 + 'Test2.tst' + #0 + #0;
with SHFileOpStruct do
begin
Wnd := Handle;
wFunc := FO_DELETE;
pFrom := @From;
pTo := nil;
fFlags := 0;
fAnyOperationsAborted := False;
hNameMappings := nil;
lpszProgressTitle := nil;
end;
SHFileOperation( SHFileOpStruct );
end;




Обратите внимание, что ни один из флагов не установлен. Если вы хотите не просто удалить файлы, а переместить их в корзину, должен быть установлен флаг FOF_ALLOWUNDO.

Для удобства дальнейших экспериментов напишем функцию, создающую из массива строк буфер для передачи его в качестве параметра pFrom. После каждой строки в буфер вставляется нулевой байт, в конце списка - два нулевых байта.



type TBuffer = array of Char;

procedure CreateBuffer( Names : array of string; var P : TBuffer );
var
I, J, L : Integer;
begin
for I := Low( Names ) to High( Names ) do
begin
L := Length( P );
SetLength( P, L + Length( Names[ I ] ) + 1 );
for J := 0 to Length( Names[ I ] ) - 1 do
P[ L + J ] := Names[ I, J + 1 ];
P[ L + J ] := #0;
end;
SetLength( P, Length( P ) + 1 );
P[ Length( P ) ] := #0;
end;




Выглядит ужасно, но работает. Можно написать красивее, просто лень.

И, наконец, функция, удаляющая файлы, переданные ей в списке Names. Параметр ToRecycle определяет, будут ли файлы перемещены в корзину или удалены. Функция возвращает 0, если операция выполнена успешно, и ненулевое значение, если руки у кого-то растут не из того места, и этот кто-то всунул функции имена несуществующих файлов.



function DeleteFiles( Handle : HWnd; Names : array of string;
ToRecycle : Boolean ) : Integer;
var
SHFileOpStruct : TSHFileOpStruct;
Src : TBuffer;
begin
CreateBuffer( Names, Src );
with SHFileOpStruct do
begin
Wnd := Handle;
wFunc := FO_DELETE;
pFrom := Pointer( Src );
pTo := nil;
fFlags := 0;
if ToRecycle then
fFlags := FOF_ALLOWUNDO;
fAnyOperationsAborted := False;
hNameMappings := nil;
lpszProgressTitle := nil;
end;
Result := SHFileOperation( SHFileOpStruct );
Src := nil;
end;




Обратите внимание, что мы освобождаем буфер Src простым присваиванием значения nil. Если верить документации, потери памяти при этом не происходит, а напротив, происходит корректное уничтожение динамического массива. Каким образом, правда - это рак мозга :-).

Проверяем:



procedure TForm1.Button1Click(Sender: TObject);
begin
DeleteFiles( Handle, [ 'C:\Test1', 'C:\Test2' ], True );
end;




Вроде все работает.

Кстати, обнаружился забавный глюк - вызовем процедуру DeleteFiles таким образом:



procedure TForm1.Button1Click(Sender: TObject);
begin
SetCurrentDirectory( PChar( 'C:\' ) );
DeleteFiles( Handle, [ 'Test1', 'Test2' ], True );
end;




Файлы 'Test1' и 'Test2' удаляются совсем, без помещения в корзину, несмотря на установленный флаг FOF_ALLOWUNDO. Мораль: при использовании функции SHFileOperation используйте полные пути всегда, когда это возможно.

Ну, с удалением файлов разобрались.

Теперь очередь за копированием и перемещением.

Следующая функция перемещает файлы указанные в списке Src в директорию Dest. Параметр Move определяет, будут ли файлы перемещаться или копироваться. Параметр AutoRename указывает, переименовывать ли файлы в случае конфликта имен.



function CopyFiles( Handle : Hwnd; Src : array of string;
Dest : string; Move : Boolean; AutoRename : Boolean ) : Integer;
var
SHFileOpStruct : TSHFileOpStruct;
SrcBuf : TBuffer;
begin
CreateBuffer( Src, SrcBuf );
with SHFileOpStruct do
begin
Wnd := Handle;
wFunc := FO_COPY;
if Move then wFunc := FO_MOVE;
pFrom := Pointer( SrcBuf );
pTo := PChar( Dest );
fFlags := 0;
if AutoRename then
fFlags := FOF_RENAMEONCOLLISION;
fAnyOperationsAborted := False;
hNameMappings := nil;
lpszProgressTitle := nil;
end;
Result := SHFileOperation( SHFileOpStruct );
SrcBuf := nil;
end;




Ну, проверим:



procedure TForm1.Button1Click(Sender: TObject);
begin
CopyFiles( Handle, [ 'C:\Test1', 'C:\Test2' ], 'C:\Temp', True, True );
end;




Все в порядке (а кудa ж оно денется).

Есть, правда еще одна возможность - перемещать много файлов каждый в свою директорию за один присест, но я с трудом представляю, кому это может понадобиться.

Осталась последняя операция - переименование.



function RenameFiles( Handle : HWnd; Src : string; New : string;
AutoRename : Boolean ) : Integer;
var
SHFileOpStruct : TSHFileOpStruct;
begin
with SHFileOpStruct do
begin
Wnd := Handle;
wFunc := FO_RENAME;
pFrom := PChar( Src );
pTo := PChar( New );
fFlags := 0;
if AutoRename then
fFlags := FOF_RENAMEONCOLLISION;
fAnyOperationsAborted := False;
hNameMappings := nil;
lpszProgressTitle := nil;
end;
Result := SHFileOperation( SHFileOpStruct );
end;




И проверка ...



procedure TForm1.Button1Click(Sender: TObject);
begin
RenameFiles( Handle, 'C:\Test1' , 'C:\Test3' , False );
end;


от туда же
Копирование файлов
--------------------------------------------------------------------------------



F8 - Copy? Да кто ж тебе это сказал?!


Копирование методом TurboPascal



type
{Для индикации процесса копирования}
TCallBack = procedure (Position, Size: Longint);

procedure FastFileCopy(const InfileName, OutFileName: string;
CallBack: TCallBack);
const
BufSize = 3*4*4096; { 48Kbytes дает прекрасный результат }
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);
CallBack(SizeDone, SizeFile);
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 FileCopy(const SourceFileName, TargetFileName: string);
var
S, T : TFileStream;
begin
S := TFileStream.Create(sourcefilename, fmOpenRead );
try
T := TFileStream.Create(targetfilename, fmOpenWrite or fmCreate);
try
T.CopyFrom(S, S.Size ) ;
FileSetDate(T.Handle, FileGetDate(S.Handle));
finally
T.Free;
end;
finally
S.Free;
end;
end;




Копирование методом LZExpand



uses
LZExpand;

procedure CopyFile(FromFileName, ToFileName : string);
var
FromFile, ToFile: file;
begin
AssignFile(FromFile, FromFileName);
AssignFile(ToFile, ToFileName);
Reset(FromFile);
try
Rewrite(ToFile);
try
if LZCopy(TFileRec(FromFile).Handle, TFileRec(ToFile).Handle)<0 then
raise Exception.Create('Error using LZCopy')
finally
CloseFile(ToFile);
end;
finally
CloseFile(FromFile);
end;
end;




Копирование методами Windows



uses
// !!! важно
ShellApi;

function WindowsCopyFile(FromFile, ToDir : string) : boolean;
var
F: TShFileOpStruct;
begin
F.Wnd := 0; F.wFunc := FO_COPY;
FromFile:=FromFile+#0; F.pFrom:=pchar(FromFile);
ToDir:=ToDir+#0; F.pTo:=pchar(ToDir);
F.fFlags := FOF_ALLOWUNDO or FOF_NOCONFIRMATION;
result:=ShFileOperation(F) = 0;
end;

// пример копирования
procedure TForm1.Button1Click(Sender: TObject);
begin
if not WindowsCopyFile('C:\UTIL\ARJ.EXE', GetCurrentDir) then
ShowMessage('Copy Failed');
end;


MaSe

Сообщение MaSe »

ToNick писал(а):Мне интересно как и с помощью какого фильтра через функции DirectDraw вывести бегущую строку на поток видео и записать куда-нибудь. Записать как-бы не проблема, а вот с бегущей строкой - интересно. Если можно фрагмент кода, например, Delphi. Буду рад любой инфе.
http://burlakovmb.narod.ru/Articles/Del ... cation.htm

http://www.alldelphi.ru/direct_show.php
MaSe

Сообщение MaSe »

Denied писал(а):Маse спасибо. будем копать. блин как многово я ещне знаю.
не мне спасибо, а кто ресурс сей создал... у меня много че есть по delphi в электронном виде, будет надо тащи болванку...
Аватара пользователя
telengit
ВЕТЕРАН
ВЕТЕРАН
Сообщения: 2202
Зарегистрирован: 03 май 2007, 21:18
Откуда: клан [Flood]
Контактная информация:

Сообщение telengit »

искал раздел, куда написать. так вот. вопрос простенький: как с формата pdf сделать txt. шоб текст отредактировать. и еще, можно ли картики стырить? (там идет текст pdf с картинками)

заранее благодырю
Изображение
Изображение
MaSe

Сообщение MaSe »

telengit писал(а):искал раздел, куда написать. так вот. вопрос простенький: как с формата pdf сделать txt. шоб текст отредактировать. и еще, можно ли картики стырить? (там идет текст pdf с картинками)

заранее благодырю
проще распознать pdf-файл в abby finereader, а потом хоть че с ним делай...
Аватара пользователя
Marug
UGUGUROV
UGUGUROV
Сообщения: 1142
Зарегистрирован: 21 окт 2003, 19:14
Откуда: Горно-Алтайск
Контактная информация:

Сообщение Marug »

telengit писал(а):как с формата pdf
самый простой вариант - на панеле в акробат ридере есть две кнопки "текст селект" и "график селект" ими выделяеш и ctrl-с, ctrl-v
посложнее - найти в нете прогу pdf2doc, работает не со всеми
самый сложный купить адоб акробат и им редактировать.

кстати фотошоп может листы из пдф импортировать как картинки...

а кроме этого есть прога GSview http://www.ghostgum.com.au/index.htm (интерфейс для GPL Ghostscript) там есть функция "извлечь текст", сразу в тхт, и функция "конвертировать", в кучу форматов
MaSe

Сообщение MaSe »

Marug писал(а): кстати фотошоп может листы из пдф импортировать как картинки...
а с картинками CuneForm(он теперь freeware) работать может :)
Аватара пользователя
cyberone
ветеран
ветеран
Сообщения: 447
Зарегистрирован: 17 мар 2005, 20:35
Откуда: от Верблюда
Контактная информация:

pdf2txt

Сообщение cyberone »

есть коммерческое решение AABBYY PDF Transformer
Аватара пользователя
telengit
ВЕТЕРАН
ВЕТЕРАН
Сообщения: 2202
Зарегистрирован: 03 май 2007, 21:18
Откуда: клан [Flood]
Контактная информация:

Сообщение telengit »

круто..спасибки за инфу :P
Изображение
Изображение
Аватара пользователя
Trawl
Полуночник
Сообщения: 1424
Зарегистрирован: 13 сен 2008, 18:22
Откуда: клан [Flood]
Контактная информация:

Re: Давайте поможем друг другу!!!

Сообщение Trawl »

Кто может помочь с Перлом, пожалуйста отзовитесь в личку?
бэкендер Хабра
Hrust

Re: Давайте поможем друг другу!!!

Сообщение Hrust »

Изображение116КБ

Изображение81КБ

вот такие вот вопросы, поможите пжсты, а то что-то нифига пойму...
CRusheR
постоянный житель
постоянный житель
Сообщения: 76
Зарегистрирован: 26 апр 2009, 19:50
Контактная информация:

Re: Давайте поможем друг другу!!!

Сообщение CRusheR »

Подскажите плз как можно связать 4 компа так что-бы каждый мог заходить в интернетс одного модема в любое время не зависимо от других компов, скажите что нужно покупать и как что проводить желательно как можно проще потому что я человек не оч щарющий в этих делах, за ранее спасибо
Ответить

Вернуться в «Программирование, администрирование и софт»