Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

обясните как переопределить interface (IBindStatusCallback) [D7, WinXP]


BANick ©   (2005-07-14 14:57:00) 

Есть форма main:Tmain;
на ней есть прогресс бар PB:TProgressBar;
как мне сделать, чтобы при зарузге файла у меня заполнялся прогресс файл, прошу дополнить мой код.


unit Unit1;

interface

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

type
 Tmain = class(TForm)
   PB: TProgressBar;
   procedure FormCreate(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 main: Tmain;
 DURL:IBindStatusCallback;
implementation

{$R *.dfm}
function OnProgress(ulProgress: Cardinal; ulProgressMax: Cardinal;
     ulStatusCode: Cardinal; szStatusText: PWideChar): HRESULT;
begin
 main.pb.Max:=ulProgressMax;
 main.pb.Position:=ulProgress;
 application.ProcessMessages;
 result:=S_OK;
end;

procedure Tmain.FormCreate(Sender: TObject);
begin
UrlDownloadToFile(nil,PChar(SourceFile), PChar(DestFile), 0,DURL);
end;

end.

уже перепробовал все что пришло в голову: (


Digitman   (2005-07-14 16:11:00) [1]


> только не понимал какой класс ставить первым


в принципе - любой

просто TInterfacedObject удобен тем что уже реализует методы IUnknown и ведет подсчет интерф.ссылок


BANick   (2005-07-14 15:31:00) [2]

Спасибо - все работает. под "переопределить" я это и имел ввиду. я так пробовал, только не понимал какой класс ставить первым - пробовал ставить туда мой класс пустой, ошибок не выдовало, но и метод онпрогресс не вызывался


Digitman   (2005-07-14 15:20:00) [3]


> как переопределить interface


никак.

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

TBindStatusCallback = class(TInterfacedObject, IBindStatusCallback)
private
 function OnProgress(ulProgress: Cardinal; ulProgressMax: Cardinal; ulStatusCode: Cardinal; szStatusText: PWideChar): HRESULT; stdcall;
 function OnDataAvailable(grfBSCF: DWORD; dwSize: DWORD; pformatetc, pstgmed: Pointer): HRESULT; stdcall;
end;

function TBindStatusCallback.OnProgress;
begin
..
end;

..
procedure Tmain.FormCreate(Sender: TObject);
begin
UrlDownloadToFile(nil,PChar(SourceFile), PChar(DestFile), 0, BindStatusCallback.Create as IBindStatusCallback);
end;


Наверх

Титульная страница Поиск, карта сайта Написать письмо