Компьютерный форум NoWa.cc Здесь может быть Ваша реклама
Правила Форума
редакция от 22.06.2020
Портал .::2BakSa.WS::.
Вернуться   Компьютерный форум NoWa.cc > В помощь вебмастеру > Программирование > Delphi

Уважаемые пользователи nowa.cc и 2baksa.ws. У нас сложилось тяжёлое финансовое положение. Мы работаем для вас вот уже более 15 лет и сейчас вынуждены просить о помощи. Окажите посильную поддержку проектам. Мы очень надеемся на вас. Реквизиты для переводов ниже.
Webmoney Webmoney WMZ: 826074280762 Webmoney WME: 804621616710
Кошелёк для вашей помощи YooMoney 4100117770549562
YooMoney Спасибо за поддержку!
Ответ
 
Опции темы Опции просмотра Language
Старый 27.06.2006, 13:56   #76
asb_
Гость
 
Сообщений: n/a
По умолчанию Re: Вопросы по Delphi/Pascal

как работать с FTP?
  Ответить с цитированием Вверх
Здесь может быть Ваша реклама
Здесь может быть Ваша реклама


Реклама: Рекомендуем гипермаркет КНС.ру - exp43 - Подарок каждому покупателю!напольные стойки для телевизоровпривод клапана belimoподарочная корзина на новый годРекомендуем KNS - мфу xerox b225 - Подарок каждому покупателю!


Старый 28.06.2006, 10:46   #77
ErrorMs
Постоялец
 
Аватар для ErrorMs
 
Пол:Мужской
Регистрация: 09.07.2005
Сообщений: 300
Репутация: 286
По умолчанию Re: Вопросы по Delphi/Pascal

Цитата:
Сообщение от asb_
как работать с FTP?

Впервые компонент для работы в сети Internet по FTP протоколу - TFTP появился в третьей версии Дельфи, в составе пакета Internet. Компонент имеет один очень существенный недостаток: после выполнения какой-либо команды необходимо дождаться освобождения компонента (свойство Busy), и только потом можно обратиться с новой командой. Из-за этого недостатка при выполнении команд на удаленном сервере необходимо либо организовывать циклы ожидания освобождения компонента, либо организовывать работу с помощью таймера, или использовать другие приемы. Все этого увеличивает размер исходного текста программы и уменьшает ее быстродействие.



Пример использования циклов ожидания.



FTP.UserName := UserNameEdit.Text;

FTP.Pwd := PasswordEdit.Text;

FTP.RemoteHost := RemoteHostEdit.Text;

FTP.RemotePort := StrToInt(RemotePortEdit.Text);

//установка параметров соединения



FTP.Connect(RemoteHost, RemotePort);

//соединение с FTP сервером



while (FTP.Busy <> True) do

begin

end;

// ожидание освобождения FTP



FTP.PutFile('localfile.txt','file.txt');

// передача файла localfile.txt на FTP сервер

// на FTP сервере файл будет сохранен под именем file.txt



while (FTP.Busy <> True) do

begin

end;

// ожидание освобождения FTP



FTP.GetFile('removefile.txt','file.txt');

// прием файла removefile.txt с FTP сервера

// файл будет сохранен в текущей директории под именем //file.txt



FTP. Disconnect;

// отключение от FTP сервера



В Delphi четвертой версии появился новый компонент NMFTP, в котором были устранены недостатки предыдущего компонента. Теперь при выполнении нескольких команд достаточно записать их подряд, а компонент будет сам последовательно запускать каждую команду.



Пример использования NMFTP.



NMFTP.Host := RemoteHostEdit.Text;

NMFTP.Port := 21;

NMFTP.Timeout := 5000;

NMFTP.UserID := UserNameEdit.Text;

NMFTP.Password := PasswordEdit.Text;

//установка параметров соединения



NMFTP.Connect;

//соединение с FTP сервером



NMFTP.Download('removefile.txt','file.txt');

// прием файла removefile.txt с FTP сервера

// файл будет сохранен в иекущей директории под именем

//file.txt



NMFTP.Upload('localfile.txt','file.txt');

// передача файла localfile.txt на FTP сервер

// на FTP сервере файл будет сохранен под именем file.txt



NMFTP.Disconnect;

// отключение от FTP сервера
__________________
Все великие люди мало жили. Вот и мне что-то нездоровится...
ErrorMs вне форума
 
Ответить с цитированием Вверх
Старый 04.07.2006, 18:35   #78
neonman
Постоялец
 
Аватар для neonman
 
Пол:Мужской
Регистрация: 04.07.2006
Сообщений: 360
Репутация: 88
По умолчанию Re: Вопросы по Delphi/Pascal

Может кто делал такое - программа запускается и сразу же сваливается в трей. Вроде бы ничего сложного, но загвоздка в том, чтобы скрыть окно, а не просто его свернуть, а метод Application.Run делает видимым главное окно программы не смотря ни на что.
Решил временно проблему закоментарив Application.Run, но пришлось еще добавить (не смеятся!)
while true do Application.Processmessages =)
neonman вне форума
 
Ответить с цитированием Вверх
Старый 04.07.2006, 19:50   #79
ErrorMs
Постоялец
 
Аватар для ErrorMs
 
Пол:Мужской
Регистрация: 09.07.2005
Сообщений: 300
Репутация: 286
По умолчанию Re: Вопросы по Delphi/Pascal

neonman, посмотри этот модуль. Он для трея и все что с ним связано... http://www.nowa.ru/showpost.php?p=91384&postcount=7
__________________
Все великие люди мало жили. Вот и мне что-то нездоровится...
ErrorMs вне форума
 
Ответить с цитированием Вверх
Старый 04.07.2006, 22:23   #80
neonman
Постоялец
 
Аватар для neonman
 
Пол:Мужской
Регистрация: 04.07.2006
Сообщений: 360
Репутация: 88
По умолчанию Re: Вопросы по Delphi/Pascal

Тогда еще вопрос: хочу получить размер файла на удаленном сервере в инете. InternetQueryDataAvailable возвращает странные значения, не относящиеся к размеру файла. =( Склоняюсь к использованию HTTP запроса через сокет для этого. Мне сказали что разны серваки по-разному работают с InternetQueryDataAvailable, но верных данных он мне так и не вернул.
neonman вне форума
 
Ответить с цитированием Вверх
Старый 05.07.2006, 12:06   #81
ErrorMs
Постоялец
 
Аватар для ErrorMs
 
Пол:Мужской
Регистрация: 09.07.2005
Сообщений: 300
Репутация: 286
По умолчанию Re: Вопросы по Delphi/Pascal

neonman,
InternetQueryDataAvailable показывает сколько осталось докачать (если на сервере есть докачка).


Почитай это:
Закачиваем файлы с докачкой

ТЕОРИЯ:
Для начала рассмотрим все функции, константы и типы, которые мы будем использовать:
1) HINTERNET, вот как он описан:

type
HINTERNET = Pointer;
PHINTERNET = ^HINTERNET;

При детальном рассмотрении, это обычный указатель.
2) функции InternetOpen и InternetCloseHandle:

function InternetOpen(lpszAgent: PChar; dwAccessType: DWORD;
lpszProxy, lpszProxyBypass: PChar; dwFlags: DWORD): HINTERNET; stdcall;

где:
lpszAgent <-|Имя программы, с помощью которой мы соединяемся,
|может принимать любые значения
dwAccessType <-|Каким макаром соединяться с и-нетом
|принимаемые значения:
| PRE_CONFIG_INTERNET_ACCESS -как в системном реестре
| LOCAL_INTERNET_ACCESS -напрямую
| GATEWAY_INTERNET_ACCESS -через GateWay
| CERN_PROXY_INTERNET_ACCESS -через проксю
lpszProxy <-|Имя прокси сервера (ставим в nil)
lpszProxyBypass<-|Не уверен, но смахивает на имена хостов, для которых не
|использовать проксю (ставим в nil)
dwFlags <-|Принимаеемые значения:
| INTERNET_FLAG_ASYNC -этот запрос асинхронный (если есть
| поддержка), но мы поставим 0

возвращает пресловутый HINTERNET, который будет требоваться при вызове всех остальных функций. С вызова этой функции начинается вся наша работа с интернетом, а с вызова второй заканчивается.
function InternetCloseHandle(hInet: HINTERNET): BOOL; stdcall;

где: nInet ранее созданый указатель.
3) функция InternetOpenUrl:

function InternetOpenUrl(hInet: HINTERNET; lpszUrl: PChar;
lpszHeaders: PChar; dwHeadersLength: DWORD; dwFlags: DWORD;
dwContext: DWORD): HINTERNET; stdcall;

где:
hInet <-|Ранее созданый указатель
lpszUrl <-|Сам УРЛ
lpszHeaders <-|Дополнительные строки в НТТР запрос
dwHeadersLength<-|Длинна предыдущего
dwFlags <-|Принимаемые значения:
| INTERNET_FLAG_RAW_DATA -принимать как RAW данные
| INTERNET_FLAG_EXISTING_CONNECT -не создавать для
| объекта нового соединения
| (поставим в 0)
dwContext <-|пока не знаю, ставим в 0

Функция возвращает HINTERNET, указывающий на конкретный файл (далее он в параметрах функций будет называться hFile).
4) функция InternetReadFile:

function InternetReadFile(hFile: HINTERNET; lpBuffer: Pointer;
dwNumberOfBytesToRead: DWORD; var lpdwNumberOfBytesRead: DWORD): BOOL; stdcall;

где:
hFile <-|Указатель, созданый предыдущей функцией
lpBuffer <-|Указатель на буфер куда читать
dwNumberOfBytesToRead<-|Сколько максимум читать (можно сказать размер
| буфера, хотя не факт)
lpdwNumberOfBytesRead<-|Сколько реально прочитано байт

Этой функой мы будем читать файл из и-нета.
5) функция InternetSetFilePointer:

function InternetSetFilePointer(hFile: HINTERNET;
lDistanceToMove: Longint; pReserved: Pointer;
dwMoveMethod, dwContext: DWORD): DWORD; stdcall;
где:
hFile <-|Указатель созданый функцией InternetOpenUrl
lDistanceToMove<-|На сколько байт смещать указатель
pReserved <-|??
dwMoveMethod <-|Как смещать (=0)
dwContext <-|??

Собственно, эта функция и поможет нам организовать докачку. Она смещает указатель в файле, после чего передача файла начнется с этого места.
В принципе этих данных уже достаточно для наших целей, но есть еще одна полезная функция, которая пригодится нам:
function InternetQueryDataAvailable(hFile: HINTERNET; var lpdwNumberOfBytesAvailable: DWORD;
dwFlags, dwContext: DWORD): BOOL; stdcall;
где:
hFile <-|Указатель, созданный функцией InternetOpenUrl
lpdwNumberOfBytesAvailable<-|Сколько осталось байт
dwFlags <-|??
dwContext <-|??

Как вы уже догадались, с помощью этой функции можно узнать сколько осталось байт скачать (или размер файла, если вызвать ее сразу после InternetOpenUrl).
Ну, собственно, и все по теории.
ПРАКТИКА:
Условия задачи:
1. Скачиваемый файл сохраняется как c:\123.tmp
2. При очередном старте скачки идет проверка на наличие оного файла на винте, если он есть, считаем что надо докачивать. Размер этого файла является признаком того, с какого места надо качать.
Требуемые материалы:
1. Форма (TForm)-1 шт.
2. Кнопки (TButton)-2 шт.
3. Строка ввода (TEdit)-1 шт.
4. Progress bar для красоты (TProgressBar)-1 шт.
5. Метки (TLabel)-по необходимости.

Зависимости: WinInet
Автор: [NIKEL], [email protected], Norilsk
Copyright: Some site
Дата: 15 сентября 2002 г.
********************************************** }

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
wininet,
StdCtrls, ComCtrls;

type
TForm1 = class(TForm)
Edit1: TEdit; //<-строка для УРЛа
Label1: TLabel;
Button1: TButton; //<-кнопка Start
Button2: TButton; //<-кнопка Stop
ProgressBar1: TProgressBar;//<-декорация
procedure Button1Click(Sender: TObject);//<-|процедура начала скачки
procedure Button2Click(Sender: TObject);//<-|принудительный обрыв
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
stop:boolean;//<-|вспомогательная переменная отв. за
// |остановку скачки
implementation
{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var hInet, //<-переменная сод. указатель на сессию
hURL:HINTERNET; //<-указатель на URL
fSize, //<-размер файла
ReadLen, //<-количество реально прочитанных байт
RestartPos:DWORD;//<-|позиция с которой начинается
// |докачка
fBuf:array[1..1024]of byte;//<-буфер куда качаем
f:file; //<-файл куда качаем
Header:string;//<-|дополнительная переменная в HTTP
// |заголовок
begin
RestartPos:=0; //<- |инициализация
fSize:=0; //<- |переменных
Button1.Enabled:=false;
Button2.Enabled:=true;
//Если на винте есть файл то считаем, что нужно докачивать
if FileExists('c:\123.tmp') then
begin
AssignFile(f,'c:\123.tmp');
Reset(f,1);
RestartPos:=FileSize(F);
Seek(F, FileSize(F));
end else
begin
//иначе с начала
AssignFile(f,'c:\123.tmp');
ReWrite(f,1);
end;
//открываем сессию
hInet := InternetOpen('Mozilla',
PRE_CONFIG_INTERNET_ACCESS,
nil,
nil,
0);
//Пишем дополнительную строку для заголовка
Header:='Accept: */*';
//открываем URL
hURL := InternetOpenURL(hInet,
PChar(Edit1.Text),
pchar(Header),
StrLen(pchar(Header)),
0,
0);
//устанавливаем позицию в файле для докачки
if RestartPos>0 then InternetSetFilePointer(hURL,
RestartPos,
nil,
0,
0);
//смотрим ск-ко надо скачать
InternetQueryDataAvailable(hURL, fSize,0,0);
if RestartPos>0 then
begin
ProgressBar1.Min:=0;
ProgressBar1.Max:=fSize+RestartPos;
ProgressBar1.Position:=RestartPos;
end else
begin
ProgressBar1.Min:=0;
ProgressBar1.Max:=fSize+RestartPos;
end;
//качаем до тех пор пока реально прочитаное число байт не
//будет равно нулю или не стор
while (ReadLen<>0) and (stop=false) do
begin
//читаем в буфер
InternetReadFile(hURL, @fBuf, SizeOf(fBuf), ReadLen);
//смотрим ск-ко осталось докачать
InternetQueryDataAvailable(hURL, fSize,0,0);
ProgressBar1.Position:=ProgressBar1.Max-fSize;
BlockWrite(f, fBuf, ReadLen);//<-пишем в файл
Application.ProcessMessages;
end;
stop:=false;
Button1.Enabled:=true;
Button2.Enabled:=false;
InternetCloseHandle(hURL); //<-|закрываем
InternetCloseHandle(hInet);//<-|сесcии
CloseFile(f); //<-|и файл
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
stop:=false;//<-прервать скачку
Button2.Enabled:=false;//<-кнопка останова скачки
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
stop:=true;//<-сообщаем о необходимости прерывания скачки
end;

end.
__________________
Все великие люди мало жили. Вот и мне что-то нездоровится...
ErrorMs вне форума
 
Ответить с цитированием Вверх
Старый 06.07.2006, 16:13   #82
neonman
Постоялец
 
Аватар для neonman
 
Пол:Мужской
Регистрация: 04.07.2006
Сообщений: 360
Репутация: 88
По умолчанию Re: Вопросы по Delphi/Pascal

IQDA возвращает, похоже сколько осталось байт в текущем блоке (~8 кб), после окончания блока возвращает опять 8 кб и так пока не скачает весь файл. Это я тоже пробовал. Вообще, люди, кто-нить пробовал компилить эти исходники? Качают, докачивают, но не выдают размера! =( Сервер finam.ru, файл *.zip, 1,2 Мб.
neonman вне форума
 
Ответить с цитированием Вверх
Старый 06.07.2006, 23:39   #83
wellwisher
Постоялец
 
Аватар для wellwisher
 
Пол:Мужской
Регистрация: 01.05.2006
Сообщений: 379
Репутация: 12487
По умолчанию Re: Вопросы по Delphi/Pascal

Цитата:
Сообщение от asb_
как работать с FTP?

Вообще то уже ответили, но если рыть глубоко неохота, посмотри компоненты Internet Component Suite на http://www.overbyte.be.
Под все версии делфей, исходный код, тьма примеров в т.ч. FTP client&server
.
wellwisher вне форума
 
Ответить с цитированием Вверх
Старый 21.07.2006, 18:55   #84
ReVEraNT
Неактивный пользователь
 
Пол:Мужской
Регистрация: 16.06.2006
Сообщений: 9
Репутация: 1
По умолчанию Delphi для PocketPC

Както раз в сети встречал некую надстройку для Delphi чтобы можнобыло пистаь для PocketPC на ней самой софт .. А сейчас вот понадобилось да не могу найти - может кто поделится? Буду премного благодарен!
ReVEraNT вне форума
 
Ответить с цитированием Вверх
Старый 23.07.2006, 03:48   #85
impuls
Пользователь
 
Пол:Мужской
Регистрация: 18.09.2005
Адрес: Vladivostok
Сообщений: 42
Репутация: 9
По умолчанию осцилограф/графики.

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

Также может кто нибудь подскажет как лучше сохранять данные с графика,что бы их можно было потом загрузить и просмотреть. Может есть у кого пример для сохранения в формат CoolEdit, тогда и внем можно будет просматривать. И как сохранить в графический формат.
impuls вне форума
 
Ответить с цитированием Вверх
Старый 26.07.2006, 10:37   #86
Hoosim
Гость
 
Сообщений: n/a
По умолчанию Re: Вопросы по Delphi/Pascal

Есть оракловая процедура, которая возвращает данные типа PL/SQL Table. И есть прога на Delphi, которая эту процедуру юзает (через DOA). Знает кто-нибудь как обрабатывать такой тип данных в Delphi?
  Ответить с цитированием Вверх
Старый 26.07.2006, 16:08   #87
MrKresT
Неактивный пользователь
 
Пол:Мужской
Регистрация: 25.07.2006
Сообщений: 4
Репутация: 5
По умолчанию Re: Вопросы по Delphi/Pascal

Цитата:
Сообщение от awoland
Как программно узнать, какой символ используется в качестве разделителя целой и дробной части (точка или запятая)?
Столкнулся с проблемой при преобразовании дробных чисел из строки. Например, если в системе установлен разделитель как 1234.56, а в текстовом файле число записано как 1234,56, то при вызове функции strtofloat() возникает ошибка. Как этого можно избежать?

есть системная переменная DecimalSeparator - в ней опредлен знак разделения десятичной части, если в него занести '.' то будет точка, если ',' то запятая, просто в программе перед функцией strtofloat() необходимо написать DecimalSeparator:=',' а после DecimalSeparator:='.' и все обработается путем
MrKresT вне форума
 
Ответить с цитированием Вверх
Старый 28.07.2006, 13:24   #88
DizeL
Пользователь
 
Аватар для DizeL
 
Пол:Мужской
Регистрация: 25.02.2005
Адрес: Украина
Сообщений: 90
Репутация: 73
Lightbulb Re: Вопросы по Delphi/Pascal

Привет знатокам!

Данные:
Сервер - Firebird 1.5
Компоненты - FIBPlus


Дано две таблицы Master-Details1 и Master-Details2. Пользователь в гриде выбирает запись и жмет на кномку ПЕРЕНОСА данной записи.

Требуеться перенести текущие данные из Master-Details1 в Master-Details2 (естественно с сохранением связей)?

А если я переношу абсолюбтно все поля, типа:

INSERT INTO MASTER2 (...) SELECT ... FROM MASTER1 WHERE MASTER1_ID = <ID>;
INSERT INTO DETAIL2 (...) SELECT ... FROM DETAIL1 WHERE DETAIL1_MASTER = <ID>;
DROP FROM DETAIL1 WHERE DETAIL1_MASTER = <ID>;
DROP FROM MASTER1 WHERE MASTER1_ID = <ID>;

то все получаеться, но в будущем возникает проблема, если запись (MASTERID) переносимого Мастера или Детейла уже будет сущевствовать, то возникнет ошибка одинаковы ключей.

Заранне всем спасибо!
__________________
Тиха украинская ночь ... Но сало надо перепрятать !
DizeL вне форума
 
Ответить с цитированием Вверх
Старый 30.07.2006, 01:00   #89
neonman
Постоялец
 
Аватар для neonman
 
Пол:Мужской
Регистрация: 04.07.2006
Сообщений: 360
Репутация: 88
По умолчанию Re: Вопросы по Delphi/Pascal

Как выключить обновление DBGrid'а на время изменения запроса? Может кто сталкивался... Очень нада
neonman вне форума
 
Ответить с цитированием Вверх
Старый 30.07.2006, 01:43   #90
ErrorMs
Постоялец
 
Аватар для ErrorMs
 
Пол:Мужской
Регистрация: 09.07.2005
Сообщений: 300
Репутация: 286
По умолчанию Re: Вопросы по Delphi/Pascal

neonman, если ничего не путаю, то DBGrid1.Enabled:=false;
__________________
Все великие люди мало жили. Вот и мне что-то нездоровится...
ErrorMs вне форума
 
Ответить с цитированием Вверх
Ответ


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
PASCAL Алексей М Моделирование программ 1 27.02.2009 16:52
Castalia for Delphi 2008.1 - эксперт IDE Delphi Minotawr Компоненты 0 03.09.2008 02:17
Pascal Fiesta_Life Delphi 4 01.06.2008 03:11
Pascal puella Delphi 5 18.02.2008 18:11

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 02:00. Часовой пояс GMT +3.


Copyright ©2004 - 2024 2BakSa.WS

Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2024, vBulletin Solutions, Inc. Перевод: zCarot
Время генерации страницы 0.24089 секунды с 11 запросами