Вопрос № 30717: Доброго времени суток!
Возникла тут у меня проблема. Необходимо создать программу, способную передавать и принимать файлы с FTP-сервера. Понятно что для реализации можно воспользоваться соответствующим компонентом. Но вот разобраться с ним я не м...Вопрос № 30718: Доброго времени суток!
Ещё помогите ещё разок, плиз.
Условно задачу можно поставить так: Есть 2 приложения в виде запущенных процессов, без консоли и формы. Как можно осуществить обмен строковыми данными между программами. Можно конечно посре...Вопрос № 30719: Есть функция для склеивания файлов в один.
Клеит… Но при запуске итогового файла играет только первый файл. (к-й был первый на очереди склеивания) Подскажите что за беда?
function MergeWavFiles(const SourceFiles: TStrings; const Destina...Вопрос № 30722: Здравствуйте, уважаемые эксперты!
Как сохранить текст из richedit в фаил при помощи Savedialog, так чтобы в качестве расширения фаила использовался Filter, выбранный в Combobox напротив типа фаила в окне сохранения?
Спасибо.
..Вопрос № 30726: Здраствуйте, подскажите я из программы наисанной в Delphi вывожу данные в Excel, но после вывода окно Excel оказывается не активным (на заднем плане программы). Как после вывода активизировать окно Excel (чтобы оно появлялось сразу же видимым для пол...Вопрос № 30734: Как в Delphi считать текст со сканера.
Желательно преобразовать его в строку.
Усли можно, поподробней.
Всем ПАСИБО...Вопрос № 30750: Как преобразовать String в PAnsichar???...Вопрос № 30758: Конечно немного не в тему, но листинг был на Delphi...
Люди!!! По ошибке замочил листинг!!! Дайте ссылки на хорошие программы по восстановлению файлов! Срочно надо! Только хорошие программы и маловесящие! На диск ничего не записываю, поэтому шанс...Вопрос № 30762: Здравствуйте!
Подскажите как создать массив, когда конечное число его компонентов не известно....
Вопрос № 30.717
Доброго времени суток!
Возникла тут у меня проблема. Необходимо создать программу, способную передавать и принимать файлы с FTP-сервера. Понятно что для реализации можно воспользоваться соответствующим компонентом. Но вот разобраться с ним я не могу.Может что-нибудь посоветуете. Есть 2 вопроса.
1)Возобновится ли закачка после разрыва связи. Я понимаю что скорее всего нет, поэтому задаю в довесок вопрос как возобнить закачку с места обрыва.
2)Как ограничить трафик используемый при закачке файлов.
Отправлен: 03.12.2005, 18:51
Вопрос задал: Schmak (статус: Студент)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: sir henry
Здравствуйте, Schmak!
1. Возобновляется ли закачка - зависит исключительно от того, поддерживает ли сервер FTP докачку. По крайней мере Вы можете попытаться это сделать, послав на него команду REST.
Ответ отправил: sir henry (статус: Академик)
Отправлен: 03.12.2005, 19:43
Вопрос № 30.718
Доброго времени суток!
Ещё помогите ещё разок, плиз.
Условно задачу можно поставить так: Есть 2 приложения в виде запущенных процессов, без консоли и формы. Как можно осуществить обмен строковыми данными между программами. Можно конечно посредством COM, но с этим я не разбирался, да и проги нежелательно переделывать. Читал что-то о пользовательских сообщениях. но ничего не получилось. Пожалуйста объясните, если можно то с примером.
Отправлен: 03.12.2005, 18:51
Вопрос задал: Schmak (статус: Студент)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: sir henry
Здравствуйте, Schmak!
Если проги нельзя переделывать, то Вам ничего не поможет - не питайте ложных иллюзий. Пользовательские сообщения - это всего лишь коды, которые передаются от ОС компонентам и обратно при возникновении тех или иных событий. Это отнюдь не обмен сообщениями в текстовой форме.
Если я Вас неправильно понял, изьяснитесь более подробно о Вашей цели.
Ответ отправил: sir henry (статус: Академик)
Отправлен: 03.12.2005, 19:47
Отвечает: Zubex
Здравствуйте, Schmak!
Посмотри в SDK-Help`е или в MSDN сообщение WM_COPYDATA.
--------- Если не знаешь что сказать - лучше промолчи...
Ответ отправил: Zubex (статус: 3-ий класс)
Отправлен: 05.12.2005, 16:04
Вопрос № 30.719
Есть функция для склеивания файлов в один.
Клеит… Но при запуске итогового файла играет только первый файл. (к-й был первый на очереди склеивания) Подскажите что за беда?
function MergeWavFiles(const SourceFiles: TStrings; const Destination: string): boolean;
type
// äëÿ ñêëåéêè îäíîðîäíûõ ôàéëîâ èìåþò çíà÷åíèå òîëüêî FileLength è DataLength
TWaveHeader = packed record // âñåãî-òî 44 áàéòà
dummy1: array[1..4] of byte; //"RIFF"
FileLength: cardinal; // íó íå äëèíà ôàéëà, à äëèíà ôàéëà ìèíóñ 8 áàéò
dummy2: array[1..8] of byte; //"WAVEfmt "
ChunkLength: cardinal; //
dummy3: array[1..32] of byte;//
DataLength: cardinal;
end;
function MergeWavFiles(const SourceFiles: TStrings; const Destination: string): boolean;
var
i, HeaderSize: integer;
fssrc, fsdest: TFileStream;
destheader: TWaveHeader;
begin
try
fsdest := TFileStream.Create(Destination, fmCreate);
HeaderSize := sizeof(TWaveHeader);
try
for i := 0 to SourceFiles.Count - 1 do
if FileExists(SourceFiles[i]) then
begin
fssrc := TFileStream.Create(SourceFiles[i], fmOpenRead);
try
if fsdest.Size = 0 then // êîïèðóåì çàãîëîâîê ïåðâîãî ñóùåñòâóþùåãî ôàéëà â çàãîëîâîê ñóììû
begin
fssrc.Seek(0, soFromBeginning);
fssrc.Read(destheader, HeaderSize);
end;
fssrc.Seek(HeaderSize, soFromBeginning);
fsdest.CopyFrom(fssrc, fssrc.Size - HeaderSize); // êîïèðóåì òîëüêî äàííûå(áåç çàãîëîâêîâ)
// ïîòîì ìîäèôèöèðóåì ñ÷åò÷èêè ðàçìåðà
destheader.DataLength := destheader.DataLength - fssrc.Size - HeaderSize;
destheader.FileLength := destheader.FileLength - fssrc.Size - HeaderSize;
finally
fssrc.Free;
end;
end;
fsdest.Seek(0, soFromBeginning);
fsdest.Write(destheader, HeaderSize);
Result := true;
finally
fsdest.Free;
end;
except
Result := false;
end;
end;
Отправлен: 03.12.2005, 18:55
Вопрос задал: REFERI (статус: Студент)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 2)
Отвечает: Denisss Здравствуйте, REFERI!
Вы как-то неправильно скопировали исходники (см. приложение)
Все отличие только в том, что Вы в двух местах + заменили на - (хотя не исключено, что это не Вы, а тот, у кого Вы скопировали).
Прим.
Как сказано на сайте "Мастера Delphi", код недоделанный:
нет проверки на "одинаковость" файлов и др. недочеты
Приложение:
Ответ отправил: Denisss (статус: Специалист)
Отправлен: 04.12.2005, 00:57 Оценка за ответ: 3
Вопрос № 30.722
Здравствуйте, уважаемые эксперты!
Как сохранить текст из richedit в фаил при помощи Savedialog, так чтобы в качестве расширения фаила использовался Filter, выбранный в Combobox напротив типа фаила в окне сохранения?
Спасибо.
Отвечает: REFERI
Здравствуйте, Граур Василий Олегович!
Кидаем на форму RichEdit, SaveDialog, Button.
В свойстве Filtr DialogBox-а пишем текст|*.txt
Затем при нажатии на батон пишем
SaveDialog1.Execute;
richedit1.Lines.SaveToFile(SaveDialog1.FileName+'.txt');
Все!
--------- Не судите, да не судимы будете...
Ответ отправил: REFERI (статус: Студент)
Отправлен: 03.12.2005, 19:53
Отвечает: sir henry
Здравствуйте, Граур Василий Олегович!
SaveDialog всего лишь задает имя файла, не более того.
SaveDialog1.Filter:='Файлы RTF|*.rtf'; {Задание фильтра}
SaveDialog1.DefaultExt:='rtf'; {Расширение по умолчанию}
If SaveDialog1.execute Then
RichEdit1.Lines.SaveToFile(SaveDialog1.FileName);
Ответ отправил: sir henry (статус: Академик)
Отправлен: 03.12.2005, 19:59
Отвечает: Vitava
Здравствуйте, Граур Василий Олегович!
SaveDialog1.Filter:='Rtf Files |*.rtf'; // фильтр
SaveDialog1.DefaultExt:='rtf'; // расширение файла по умолчанию
Удачи вам.
Ответ отправил: Vitava (статус: 5-ый класс)
Отправлен: 03.12.2005, 22:45
Отвечает: Denisss Здравствуйте, Граур Василий Олегович!
В приложении приведен пример. Названия кнопки, диалога и RichEdit не поменял специально, чтобы не запутать.
Фильтр заполнять перед сохранением не обязательно - достаточно его заполнить один только раз.
FilterIndex - номер выбранного фильтра (нумеруется от 1)
Т.е. в примере 1 - TXT, 2 - RTF, 3 - *.*
UpperCase работает только с английскими символами. Если Вам понадобится сделать русское расширение (что крайне нежелательно), то воспользуйтесь AnsiUpperCase
Удачи!
Приложение:
Ответ отправил: Denisss (статус: Специалист)
Отправлен: 03.12.2005, 23:35
Отвечает: Schmak
Здравствуйте, Граур Василий Олегович!
1)Во время проектирования указываете необходимые расширения и описания к ним в свойство Filter.
2)В свойство DefaultExt заносите расширение по умолчанию rtf.
3)Далее собственно вызываете диалог и сохраняете в файл
if SaveDialog1.Execute then
RichEdit1.Lines.SaveToFile(SaveDialog1.FileName);
--------- Не всё то Windows, что висит!
Ответ отправил: Schmak (статус: Студент)
Отправлен: 04.12.2005, 14:07
Отвечает: Golden Spider
Здравствуйте, Граур Василий Олегович!
Предлагаю вам такой вариант:
создайте строковый массив с количеством элементов равных количевству типо файлов в Savedialog, и заполните его типами файлов (mass[1]:='.txt').
Далее делаете так:
begin
if fileexists(savedialog1.filename) then
richedit1.lines.savetofile(savedialog1.filename)
else
richedit1.lines.savetofile(savedialog1.filename+mass[savedialog1.filterindex]);
end;
Удачи!
--------- Знания ничто! Хорошие знания Всё!
Ответ отправил: Golden Spider (статус: 3-ий класс)
Отправлен: 04.12.2005, 15:50
Вопрос № 30.726
Здраствуйте, подскажите я из программы наисанной в Delphi вывожу данные в Excel, но после вывода окно Excel оказывается не активным (на заднем плане программы). Как после вывода активизировать окно Excel (чтобы оно появлялось сразу же видимым для пользователя).
Заранее благодарен.
Отвечает: sir henry
Здравствуйте, Захаров Дмитрий Александрович!
Вам нада делать Эксель видимым уже после передачи в него данных. Это будет черезвычайно полезно для скорости передачи.
var
Exc: OleVariant;
Begin
Exc:=CreateObject('Excel.Application');
Exc.Visible:=False;
...
{Здесь Вы передаете данные}
...
Exc.Visible:=True;
End;
Ответ отправил: sir henry (статус: Академик)
Отправлен: 04.12.2005, 08:38
Вопрос № 30.734
Как в Delphi считать текст со сканера.
Желательно преобразовать его в строку.
Усли можно, поподробней.
Всем ПАСИБО
Отправлен: 03.12.2005, 23:24
Вопрос задал: Ton (статус: Посетитель)
Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Bochvarov NikB
Здравствуйте, Ton!
Ето две разние дела: скенер и декодировка в текст.
Первое - не так сложное, но я не нашел хорошие безплатние компоненти (надо искать TWAIN компонент (я пробовал MultiTWAIN, ezTwain и другие, хужие), но думаю, что мне придется платит :(
Второе труднее, с ним не занимался :((
Ответ отправил: Bochvarov NikB (статус: 4-ый класс)
Отправлен: 04.12.2005, 00:36
Отвечает: Golden Spider
Здравствуйте, Ton!
Вобще-то чтобы считать текст, со сканера используют специальные программы распознавания текста, вроде FineReader.
А для получения изображений со сканера попробуйте поискать компоненты для этого (TWAIN и др.).
--------- Знания ничто! Хорошие знания Всё!
Ответ отправил: Golden Spider (статус: 3-ий класс)
Отправлен: 04.12.2005, 15:25
Отвечает: Vbhjndjhtw
Здравствуйте, Ton!
С какого сканера? Со сканера штрихкодов? Или со сканера изображения?
P.S.У меня есть исходник считывания штрихкода.
--------- Бороться и искать, найти и перепрятать!
Ответ отправил: Vbhjndjhtw (статус: 6-ой класс)
Отправлен: 05.12.2005, 09:45
Вопрос № 30.750
Как преобразовать String в PAnsichar???
Отправлен: 04.12.2005, 14:31
Вопрос задал: REFERI (статус: Студент)
Всего ответов: 8 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Samum
Здравствуйте, REFERI!
Очень просто: PANSYChar(StringVariable);
Delphi всю работу сам сделает.
--------- Если бы программистам за их ошибки отрывали части тела, то в конце концов им пришлось бы использовать голову!
Ответ отправил: Samum (статус: Специалист)
Отправлен: 04.12.2005, 14:36 Оценка за ответ: 5
Отвечает: Татьяна
Здравствуйте, REFERI!
уже отвечала на этот вопрос, поэтому просто процитирую ответ
Обычно, если нужно передевать строку в качестве параметров помогает преобразование типа
PAnsiChar(str) (у меня это PChar(str) - суть дела не меняет)
Ну а если делать правильно, см. приложение
Желаю удачи
Приложение:
--------- Нет ничего невозможного!!!
Ответ отправила: Татьяна (статус: 9-ый класс)
Отправлен: 04.12.2005, 15:03 Оценка за ответ: 5
Отвечает: Golden Spider
Здравствуйте, REFERI!
Очень просто:
используйте функцию преобразования Pchar(string):PansiChar
Пробуйте!
--------- Знания ничто! Хорошие знания Всё!
Ответ отправил: Golden Spider (статус: 3-ий класс)
Отправлен: 04.12.2005, 15:18 Оценка за ответ: 5
Отвечает: Маренич Владимир
Здравствуйте, REFERI!
var s: string;
begin
....PAnsichar(S)
end;
Ответ отправил: Маренич Владимир (статус: 9-ый класс)
Отправлен: 04.12.2005, 15:43
Отвечает: sir henry
Здравствуйте, REFERI!
Все очень просто:
var
s: String;
p: PAnsiChar;
Begin
s:='Что-нибудь типа написано.';
p:=PChar(s);
End;
Ответ отправил: sir henry (статус: Академик)
Отправлен: 04.12.2005, 18:13
Отвечает: Ерёмин Андрей
Здравствуйте, REFERI!
А прямо вот так и преобразовать:
var str2: pansichar; str1: string;
...
str2:=pchar(str1);
--------- Где найти кpяк под ковpик для однокнопочного мыша?
Ответ отправил: Ерёмин Андрей (статус: Специалист)
Отправлен: 04.12.2005, 18:16
Отвечает: Schmak
Здравствуйте, REFERI!
При помощи функции Pchar(s:string):Pansichar
А в принципе Вы можете посмотреть ответ на вопрос №29298
Приложение:
--------- Не всё то Windows, что висит!
Ответ отправил: Schmak (статус: Студент)
Отправлен: 04.12.2005, 20:04
Отвечает: Vadim Vitomsky
Здравствуйте, REFERI!
PChar(s);
где s : String;
Ответ отправил: Vadim Vitomsky (статус: 5-ый класс)
Отправлен: 05.12.2005, 10:09
Вопрос № 30.758
Конечно немного не в тему, но листинг был на Delphi...
Люди!!! По ошибке замочил листинг!!! Дайте ссылки на хорошие программы по восстановлению файлов! Срочно надо! Только хорошие программы и маловесящие! На диск ничего не записываю, поэтому шансы воостановить доку большие...
Отправлен: 04.12.2005, 16:05
Вопрос задал: REFERI (статус: Студент)
Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Jadd
Здравствуйте, REFERI!
EasyRecovery Pro. В свое время многим "жизнь" вернула :)
--------- Если в сердце дверь закрыта, нужно в печень постучаться
Ответ отправил: Jadd (статус: Специалист)
Отправлен: 04.12.2005, 16:21
Отвечает: CJ
Здравствуйте, REFERI!
http://grandutils.com/Back2Life/ - Back2Life
У меня она проявила хорошие показатели работы.
Ответ отправил: CJ (статус: Студент)
Отправлен: 04.12.2005, 23:28
Отвечает: Vadim Vitomsky
Здравствуйте, REFERI!
Если файловая система FAT, то я пользуюсь DOS'овской программой Unerase.exe
Если надо выслать - пиши на cybersoft@rambler.ru с темой unerase
Ответ отправил: Vadim Vitomsky (статус: 5-ый класс)
Отправлен: 05.12.2005, 10:10
Вопрос № 30.762
Здравствуйте!
Подскажите как создать массив, когда конечное число его компонентов не известно.
Отвечает: Каськов Артем Игоревич
Здравствуйте, Артемова Марина!
Делается это очень просто
var
моймассив:array of ТипДанныхЭлементоа
Далее при возникновении какого-то события задаем его длину
SetLength(моймассив,кол-во элементов)
Отвечает: Jadd
Здравствуйте, Артемова Марина!
Очень просто. Эта конструкция называется - динамический массив. Объявляется такое так:
myArr: array of integer; //тип может быть любым
дальше, нам нужно его инициализировать или просто выделить память для массива, размером n-элементов или для 1-го элемента с тем, чтобы на каждой итерации выделять еще место для еще одного елемента. Делается это так:
SetLength(myArr, 10); //если известно сколько элементов
или
SetLength(myArr, Length(myArr)+1); //Если количество элементов не известно и может расти в зависимости от условий программы.
Удачи. Пишите, если будут вопросы.
--------- Если в сердце дверь закрыта, нужно в печень постучаться
Ответ отправил: Jadd (статус: Специалист)
Отправлен: 04.12.2005, 16:36 Оценка за ответ: 5
Отвечает: Татьяна
Здравствуйте, Артемова Марина!
ну это классический динамический массив
a : array of integer
установить длину массива
SetLength(а,5)
узнать длину length(a)
ну и в конце работы не забывать очистить массив
SetLength(а,0)
ну вот, вообщем то основы есть.
Желаю удачи
--------- Нет ничего невозможного!!!
Ответ отправила: Татьяна (статус: 9-ый класс)
Отправлен: 04.12.2005, 16:59 Оценка за ответ: 4
Отвечает: Vitava
Здравствуйте, Артемова Марина!
1. можно использовать динамические структуры;
2. можно использовать таблицу базы данных.
Удачи Вам.
Ответ отправил: Vitava (статус: 5-ый класс)
Отправлен: 04.12.2005, 17:10
Отвечает: sir henry
Здравствуйте, Артемова Марина!
Вы просто не задаете размер массива, только его тип:
Var
ar: array of integer;
Begin
{Когда станет известен размер массива, задать его так}
SetLength(ar, Kolichestvo);
End;
Ответ отправил: sir henry (статус: Академик)
Отправлен: 04.12.2005, 18:16
Отвечает: Schmak
Здравствуйте, Артемова Марина!
Для этого существуют динамические массивы. Вопрос звучал сравнительно недавно, поэтому в приложении я привожу мой ответ на вопрос 30702.
Приложение:
--------- Не всё то Windows, что висит!
Ответ отправил: Schmak (статус: Студент)
Отправлен: 04.12.2005, 20:05
Отвечает: Golden Spider
Здравствуйте, Артемова Марина!
Для этого нужно создать динамический массив.
Он описывается так же как и обычный массив только без указания количества элементов (array of type).
Для того чтобы задать кольчество элементов нужно использовать процедуру SetLength(Имя_массива,Кол-во_элементов).
По окончании работы с ним его можно очистить Имя_массива:=nil;
После этого кол-во элементов устанавливается на 0.
Пользуйтесь!
--------- Знания ничто! Хорошие знания Всё!
Ответ отправил: Golden Spider (статус: 3-ий класс)
Отправлен: 04.12.2005, 20:45
Отвечает: Ерёмин Андрей
Здравствуйте, Артемова Марина!
Для этой цели следует использовать динамические массивы. Для примера, смотрите мой ответ на вопрос 30702: http://rusfaq.ru?Step=info&Action=Question&ID=30702.
--------- Где найти кpяк под ковpик для однокнопочного мыша?
Ответ отправил: Ерёмин Андрей (статус: Специалист)
Отправлен: 04.12.2005, 22:45
Отвечает: CJ
Здравствуйте, Артемова Марина!
Недавно сам задавал такой вопрос, а щас отвечу:
необходимо создать динамический массив: a: array of integer;
SetLength(a, n); - устанавливаем длинну массива.
И нижний индекс массива будет начинаться с 0.
Ответ отправил: CJ (статус: Студент)
Отправлен: 04.12.2005, 23:27
Отвечает: Vadim Vitomsky
Здравствуйте, Артемова Марина!
Попробуйте использовать динамические массивы:
var a : array of Integer;
Основные функции для работы с динамическим массивом:
SetLength - устанавливает новый размер массива.
Length - возвращает количество элементов в массиве.
Low - индекс первого элемента в массиве (всегда 0 для динамических массивов).
High - индекс последнего элемента в массиве.
Copy - возвращает подмножество элементов массива.
Slice - используется при передаче динамического массива в процедуры в качестве открытого массива (open arrays).
Ответ отправил: Vadim Vitomsky (статус: 5-ый класс)
Отправлен: 05.12.2005, 10:12