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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.06.2012, 21:51   #1
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,899
Вопрос Delphi 2010. Проблема с HTTP в потоке

Есть
Код:
...
  TDownloadFile_Thread = class(TThread)
  private
    { Private declarations }
    procedure HTTPWork(ASender: TObject; AWorkMode: TWorkMode;
      const AWorkCount: Int64);
    procedure HTTPWorkBegin(ASender: TObject; AWorkMode: TWorkMode;
      const AWorkCountMax: Int64);
  protected
    procedure Execute; override;
  public
  end;
...
procedure TDownloadFile_Thread.Execute;
var
  HTTP: TIdHTTP;
begin
  HTTP := TIdHTTP.Create(nil);
  try
    HTTP.OnWork := HTTPWork; // E2009 Incompatible types: 'Parameter lists differ'
    HTTP.OnWorkBegin := HTTPWorkBegin; // E2009 Incompatible types: 'Parameter lists differ'
    try
      ...
    except
      ...
    end;
  finally
    MS.Free;
  end;
end;
В инете есть подобные вопросы, но толковых ответов нет. Как решить данную проблему, привязать к динамически создаваемому HTTP его события OnWork и OnWorkBegin?
Shouldercannon вне форума Ответить с цитированием
Старый 03.06.2012, 21:54   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

вы киньте на форму компонент, и посмотрите, такой же ли там список параметров что у вас.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 03.06.2012, 21:56   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Parameter lists differ
Ну так может быть стоит посмотреть в хелпе описание этих событий? Каков список параметров, каковы у них типы...
И описать HTTPWork и HTTPWorkBegin так чтоб параметры совпадали.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.06.2012, 22:00   #4
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,899
По умолчанию

С Help беда - его нет.
Особо сильных различий нет. Количество параметров тоже самое.
Delphi 7
Код:
    procedure HTTPWork(Sender: TObject; AWorkMode: TWorkMode;
      const AWorkCount: Integer);
    procedure HTTPWorkBegin(Sender: TObject; AWorkMode: TWorkMode;
      const AWorkCountMax: Integer);
Delphi 2010
Код:
    procedure HTTPWork(ASender: TObject; AWorkMode: TWorkMode;
      const AWorkCount: Int64);
    procedure HTTPWorkBegin(ASender: TObject; AWorkMode: TWorkMode;
      const AWorkCountMax: Int64);
Shouldercannon вне форума Ответить с цитированием
Старый 03.06.2012, 22:36   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Значить не то же самое.
Раз ошибка всплывает.
Наведи мышку на HTTP.OnWork - что в хинте показывает?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.06.2012, 22:41   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Сообщение от Shouldercannon Посмотреть сообщение
С Help беда - его нет.
При желании можно и в юнитах инди поискать точное описание типа.
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 03.06.2012, 23:11   #7
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Берите ICS или Synapce библиотеки. Они легче инди.
Человек_Борща вне форума Ответить с цитированием
Старый 03.06.2012, 23:12   #8
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,899
По умолчанию

Вот три скрина
Изображения
Тип файла: gif 1.gif (4.9 Кб, 75 просмотров)
Тип файла: gif 2.gif (8.9 Кб, 62 просмотров)
Тип файла: gif 3.gif (12.8 Кб, 122 просмотров)
Shouldercannon вне форума Ответить с цитированием
Старый 03.06.2012, 23:30   #9
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

проверьте, точно ли TWorkMode ведет в модуль ИнДи.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 03.06.2012, 23:50   #10
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,899
По умолчанию

Линк привёл в IdComponent.pas
Код:
type
  TIdStatusEvent = procedure(ASender: TObject; const AStatus: TIdStatus;
   const AStatusText: string) of object;

  TWorkMode = (wmRead, wmWrite);
  TWorkInfo = record
    Current: Int64;
    Max: Int64;
    Level: Integer;
  end;

  TWorkBeginEvent = procedure(ASender: TObject; AWorkMode: TWorkMode; AWorkCountMax: Int64) of object;
  TWorkEndEvent = procedure(ASender: TObject; AWorkMode: TWorkMode) of object;
  TWorkEvent = procedure(ASender: TObject; AWorkMode: TWorkMode; AWorkCount: Int64) of object;

  TIdComponent = class(TIdBaseComponent)
  protected
    FOnStatus: TIdStatusEvent;
    FOnWork: TWorkEvent;
    FOnWorkBegin: TWorkBeginEvent;
    FOnWorkEnd: TWorkEndEvent;
    FWorkInfos: array[TWorkMode] of TWorkInfo;
    FWorkTarget: TIdComponent;
    //
    procedure DoStatus(AStatus: TIdStatus); overload;
    procedure DoStatus(AStatus: TIdStatus; const AArgs: array of const); overload;
    procedure InitComponent; override;
    //
    property OnWork: TWorkEvent read FOnWork write FOnWork;
    property OnWorkBegin: TWorkBeginEvent read FOnWorkBegin write FOnWorkBegin;
    property OnWorkEnd: TWorkEndEvent read FOnWorkEnd write FOnWorkEnd;
  public
    procedure BeginWork(AWorkMode: TWorkMode; const ASize: Int64 = 0); virtual;
    destructor Destroy; override;
    procedure DoWork(AWorkMode: TWorkMode; const ACount: Int64); virtual;
    procedure EndWork(AWorkMode: TWorkMode); virtual;
    //
    property WorkTarget: TIdComponent read FWorkTarget write FWorkTarget;
  published
    property OnStatus: TIdStatusEvent read FOnStatus write FOnStatus;
  end;
Тоже самое, но из Delphi 7
Код:
type
  TIdStatusEvent = procedure(ASender: TObject; const AStatus: TIdStatus;
   const AStatusText: string) of object;

  TWorkMode = (wmRead, wmWrite);
  TWorkInfo = record
    Current: Integer;
    Max: Integer;
    Level: Integer;
  end;

  TWorkBeginEvent = procedure(Sender: TObject; AWorkMode: TWorkMode;
   const AWorkCountMax: Integer) of object;
  TWorkEndEvent = procedure(Sender: TObject; AWorkMode: TWorkMode) of object;
  TWorkEvent = procedure(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer)
   of object;

  TIdComponent = class(TIdBaseComponent)
  protected
    FOnStatus: TIdStatusEvent;
    FOnWork: TWorkEvent;
    FOnWorkBegin: TWorkBeginEvent;
    FOnWorkEnd: TWorkEndEvent;
    FWorkInfos: array[TWorkMode] of TWorkInfo;
    //
    procedure DoStatus(AStatus: TIdStatus); overload;
    procedure DoStatus(AStatus: TIdStatus; const aaArgs: array of const); overload;
    // GetLocalName cannot be static/class method.
    // CBuilder doesnt handle it correctly for a prop accessor
    function GetLocalName: string;
    //
    property OnWork: TWorkEvent read FOnWork write FOnWork;
    property OnWorkBegin: TWorkBeginEvent read FOnWorkBegin write FOnWorkBegin;
    property OnWorkEnd: TWorkEndEvent read FOnWorkEnd write FOnWorkEnd;
  public
    procedure BeginWork(AWorkMode: TWorkMode; const ASize: Integer = 0); virtual;
    constructor Create(axOwner: TComponent); override;
    destructor Destroy; override;
    procedure DoWork(AWorkMode: TWorkMode; const ACount: Integer); virtual;
    procedure EndWork(AWorkMode: TWorkMode); virtual;
    //
    property LocalName: string read GetLocalName;
  published
    property OnStatus: TIdStatusEvent read FOnStatus write FOnStatus;
  end;

Последний раз редактировалось Shouldercannon; 03.06.2012 в 23:59.
Shouldercannon вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi 2010. Проблема с формами. Multiman Помощь студентам 3 17.12.2011 20:16
Проблема с DElphi 2010 ошибка Olddron Компоненты Delphi 1 07.04.2011 16:19
Проблема с Delphi 2010 gisinfo Общие вопросы Delphi 1 05.12.2010 23:16
Проблема с запуском Delphi 2010 zver777 Софт 5 26.09.2010 11:16
Проблема с THotKey в Delphi 2010 Altera Компоненты Delphi 8 06.01.2010 09:51