ProgressBar в стиле MARQUEE (Win7Style) не работает в DLL

Рейтинг: 0Ответов: 1Опубликовано: 07.03.2015

Всем доброго времени суток!

Возникла проблема с прогресбаром. Дело в том, что мне нужно в точке инициализации DLL библиотеки организовать некоторые процедуры и сделать что-то в роде уведомления со статусбаром в стиле Marquee типа как тут: http://www.cyberforum.ru/attachments/196663d1351769468

Вот с этим кодом в EXE файле работает без проблем:

unit Unit1;

interface

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

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

var
  Form1: TForm1;

implementation

{$R *.dfm}
{$R WinStyle.res}

procedure TForm1.FormCreate(Sender: TObject);const
  PBS_MARQUEE   =8;
  PBM_SETMARQUEE=WM_USER+10;
begin
  SetWindowLong(ProgressBar1.Handle,GWL_STYLE,PBS_MARQUEE+WS_CHILD+WS_VISIBLE);
  SendMessage(ProgressBar1.Handle,PBM_SETMARQUEE,1,30);
end;

end.

Но в DLLке это не работает, т.е. стиль Marquee не наблюдается... Вот фрагмент кода:

unit SplsFrchk;

interface

uses
    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
    ExtCtrls, StdCtrls, ComCtrls,httpsend, jpeg, IdTCPClient, IdICMPClient,
    Hash,base64,DECUtil,JclMime,CONVUNIT;

const WM_LOAD = WM_USER+1001;
  PBS_MARQUEE   =8;
  PBM_SETMARQUEE=WM_USER+10;
type
    TSplFmr = class(TForm)
        Label1: TLabel;
    ProgressBar1: TProgressBar;
        procedure FormShow(Sender: TObject);
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
    private
        procedure doLoad(var Msg: TMessage); message WM_LOAD;

.......................................

        { Private declarations }
    public

     { Public declarations }
    end;

Type
 TdoHandle = procedure(aKey: Integer; blackList: Pchar);

 var
    SplFmr: TSplFmr;

implementation

{$R *.DFM}
{$R WinStyle.res}

.......................................

procedure TSplFmr.doLoad(var Msg: TMessage);
var
.......................................
begin

  SetWindowLong(ProgressBar1.Handle,GWL_STYLE,PBS_MARQUEE+WS_CHILD+WS_VISIBLE);
  SendMessage(ProgressBar1.Handle,PBM_SETMARQUEE,1,5);

.......................................
end;

procedure TSplFmr.FormShow(Sender: TObject);
begin
 PostMessage(Handle,WM_LOAD,0,0);

end;

procedure TSplFmr.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 Action := caFree;
end;

.......................................

end;

end.

Запускаю DLLку через LoadLibrary().

P.S. Не спрашивайте, почему я делаю всё это именно в точке входа в DLLку! Т.к. без этого в моём проекте никак! И не нужно говорить, что создавать формы и прочее в точке входа нельзя. Я это и так знаю, тем не менее полный код DLLки рабочий.

Ответы

Ответов пока нет.