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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.03.2011, 17:00   #1
JasperCRT
Пользователь
 
Аватар для JasperCRT
 
Регистрация: 23.12.2010
Сообщений: 40
По умолчанию Процедура! Нужно код сделать процедурой : )

Алоха)! У меня просьба к знающим людям будьте добры не откажите! : )
Я в программирование новичек и с процедурами знаком плохо! Вся литература которую я прочитал до этого ничего нового мне не принесла!
Короче есть код нужно его сделать процедурой и заснуть в DLL.
Вот код (я пытался сделать его процедурой но не получилось):
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
  IdHTTP, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    IdHTTP1: TIdHTTP;
    procedure upload;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
procedure Upload;
var F:TFileStream;
begin
F:=TFileStream.Create('c:\temp\google-image.gif', fmCreate);
 idHTTP1.Get('http://www.google.com/intl/de/images/home_title.gif',f);
 F.Free;
end;

end.
Если можно прокомментируйте свои действия) Спасибо всем кто поможет!)
Интернет как жизнь - смысла нет, а уходить не хочется!
JasperCRT вне форума Ответить с цитированием
Старый 13.03.2011, 17:03   #2
JasperCRT
Пользователь
 
Аватар для JasperCRT
 
Регистрация: 23.12.2010
Сообщений: 40
По умолчанию

При компилирование он Delphi подчеркивает idHTTP1 и пишет что она не определена (или что-то в этом роде). Хотя в типах она стоит)
Интернет как жизнь - смысла нет, а уходить не хочется!
JasperCRT вне форума Ответить с цитированием
Старый 13.03.2011, 17:28   #3
AlDelta
Реанимируюсь...
Участник клуба
 
Аватар для AlDelta
 
Регистрация: 19.07.2007
Сообщений: 1,445
По умолчанию

Код:
procedure TForm1.Upload;
var F:TFileStream;
begin
F:=TFileStream.Create('c:\temp\google-image.gif', fmCreate);
 idHTTP1.Get('http://www.google.com/intl/de/images/home_title.gif',f);
 F.Free;
end;
Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте.
Правила форума => Правила раздела => Для общего развития => Помощь студентам => Перед тем, как создавать тему, скачайте себе...
P.S.: форум не песочница (с)
название статьи на сайте MS: "Отмена принудительного отключения автоматического запуска в реестре Windows"
AlDelta вне форума Ответить с цитированием
Старый 13.03.2011, 17:30   #4
Alex2391
Пользователь
 
Аватар для Alex2391
 
Регистрация: 31.01.2011
Сообщений: 54
По умолчанию

Я точно не знаю есть ли разница в Delphi между строчными и заглавными именами переменных?
Код:
var F:TFileStream;
Объявляете заглавную F, а используете строчную:
Код:
idHTTP1.Get('http://www.google.com/intl/de/images/home_title.gif',f);
Alex2391 вне форума Ответить с цитированием
Старый 13.03.2011, 17:52   #5
JasperCRT
Пользователь
 
Аватар для JasperCRT
 
Регистрация: 23.12.2010
Сообщений: 40
По умолчанию

[Error] Unit1.pas(29): Undeclared identifier: 'idHTTP1'
[Error] Unit1.pas(25): Undeclared identifier: 'Upload'
Вот это он показывает когда делаю способом AlDelta!
Аекс) Почитай основы программирования) Любые) Регистр не оказывает влияние на разность переменных)
Интернет как жизнь - смысла нет, а уходить не хочется!
JasperCRT вне форума Ответить с цитированием
Старый 13.03.2011, 17:54   #6
JasperCRT
Пользователь
 
Аватар для JasperCRT
 
Регистрация: 23.12.2010
Сообщений: 40
По умолчанию

Сорри всё работает) забыл в типы процедуру прописать)
Интернет как жизнь - смысла нет, а уходить не хочется!
JasperCRT вне форума Ответить с цитированием
Старый 13.03.2011, 18:01   #7
Alex2391
Пользователь
 
Аватар для Alex2391
 
Регистрация: 31.01.2011
Сообщений: 54
По умолчанию

Цитата:
Регистр не оказывает влияние на разность переменных)
В C++ оказывает влияние! Я про Delphi не был уверен.
Alex2391 вне форума Ответить с цитированием
Старый 13.03.2011, 18:03   #8
JasperCRT
Пользователь
 
Аватар для JasperCRT
 
Регистрация: 23.12.2010
Сообщений: 40
По умолчанию

С++ не изучал пока) Надо с низами разобраться а потом и выше можно карабкаться)
Интернет как жизнь - смысла нет, а уходить не хочется!
JasperCRT вне форума Ответить с цитированием
Старый 13.03.2011, 18:48   #9
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Основной модуль(Лоадер):
Код:
unit MainUnit;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

procedure DownloadFile(fURL, fDest: PChar); stdcall; external 'DF.dll';

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  dllHandle: THandle; //Хэндл dll
  p:Pointer; //Указатель на эксп. .процедуру
begin
  dllHandle := LoadLibrary('DF.dll'); //загружаем нажу библу
  if dllHandle <= 0 then
  begin
    ShowMessage('Can not load df.dll'); //Ули неудалось загрузить
  end
  else
  begin
    p := GetProcAddress(dllHandle, 'DownloadFile'); //Получаем указатель на роцедуру
    if Assigned(p) then //Если получено
    begin
      DownloadFile(PAnsiChar(Edit1.text), PAnsiChar(Edit2.Text)); //Выполняем код
      if FileExists(Edit2.Text) then
        ShowMessage('Получено')
      else
        ShowMessage('Не получено');
    end;
  end;
  FreeLibrary(dllHandle); //Отваливаем
end;

end.
DLL (то что грузим):
Код:
library DF;

uses
  ShareMem,
  SysUtils,
  Classes,
  IdHTTP, //Ради idhttp
  StdCtrls;

{$R *.res}

procedure DownloadFile(fURL, fDest: PChar);stdcall;
var
  http: TIdHTTP;
  dFile: TMemoryStream;
begin
  http := TIdHTTP.Create(nil); //создаём экземпляр http
  dFile := TMemoryStream.Create; //сюда будем качать
  try
    http.Get(fURL, dFile); //получаем файл в поток
    dFile.SaveToFile(fDest); //Сохраняем файл
  finally
    FreeAndNil(dFile); //осваливаем
    FreeAndNil(http);
  end;
end;

exports
  DownloadFile;

begin
end.
писал на коленке.

Последний раз редактировалось Человек_Борща; 13.03.2011 в 18:50.
Человек_Борща вне форума Ответить с цитированием
Старый 14.03.2011, 09:28   #10
XerSon
Форумчанин
 
Аватар для XerSon
 
Регистрация: 21.01.2008
Сообщений: 211
По умолчанию

А как прикрутить прогресс в Основном модуле (Лоадер)?
XerSon вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
нужно сделать сделать лабу по БД!!! APXAHGEL Фриланс 4 13.12.2010 09:50
Нужно подправить код zeppelin58 Общие вопросы C/C++ 1 28.05.2010 12:11
Как сделать так,чтобы при нажатии на кнопку выполнялась процедура? Bolgarin Общие вопросы Delphi 10 03.06.2008 23:48
что нужно сделать, чтобы при нажатии кнопки запускалась процедура mager Общие вопросы Delphi 15 19.11.2006 15:02