Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Форма из dll в стиле XP, как сделать? 
:(
    Опции темы
zedx
Дата 11.10.2009, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 29.11.2007

Репутация: нет
Всего: нет



Проблема в том, что форма из dll имеет "классический" стиль, а хотелось бы XP-шный.
Основное приложение без визуальных компонентов, создаю вот так:
Код

program My;

uses
  Windows,
  Messages,
  Classes;

type
  TMy=class
  class procedure WndProc(var M: TMessage);
  end;
 
var
  Wnd: THandle=0;
  Msg: TMsg;

class procedure TMy.WndProc(var M: TMessage);
begin
end;

begin
  try
    Wnd:= AllocateHWnd(TMy.WndProc);  

    //тут запускается дополнительный поток

    while (GetMessage(Msg, 0, 0, 0)) do         
    begin
      TranslateMessage(Msg);
      DispatchMessage(Msg);
    end;
  finally
     DeallocateHWnd(Wnd);
  end;
end.



В дополнительном потоке создаётся иконка в трее, с менюшкой и при клике по пункту меню должна загрузиться dll и показать форму. Всё работает, форма показывается, но не в XP стиле :(
Собственно, как побороть?

Вот dll:
Код
library frmDLL;

uses
  Windows,
  Classes,
  Unit2 in 'Unit2.pas' {Form2};

{$R *.res}

procedure OpenDLL(Handle: THandle); export; StdCall;
begin
   Form2:=TForm2.Create(nil);
   Form2.Show;
end;

exports OpenDLL;

begin
end.



вот форма:
Код
unit Unit2;

interface

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

type
  TForm2 = class(TForm)
    Button1: TButton;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

end.


PM MAIL   Вверх
Romikgy
Дата 12.10.2009, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 26
Всего: 146



манифест есть ?
имхо сначало надо все реализовать без dll 
а потом портировать куда нужно


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
zedx
Дата 13.10.2009, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 29.11.2007

Репутация: нет
Всего: нет



Пишу в Delphi2007, там у форм и без манифеста стиль XP и с "сначало надо все реализовать без dll" проблем не возникает, проблемы именно с dll :(
И даже если на форму из dll положить манифест, это ничего не меняет...
Проблема кроется именно в способе создания формы в основной (вызывающей эту dll) программе. Если создать прогу самой делфёй (File -> New -> VCL Forms...) и из неё вызвать dll, то форма в dll выглядит по XP-шному.

P.S. Хех, разобрался - нужно было в вызывающую прогу добавить манифест:
Код
uses
  Windows,
  Messages,
  Classes,
  XPMan;

type
  TMy=class
  class procedure WndProc(var M: TMessage);
  end;
...
 

Romikgy, спасибо за наводку.

Это сообщение отредактировал(а) zedx - 13.10.2009, 11:39
PM MAIL   Вверх
CodeMonkey
Дата 13.10.2009, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 38
Всего: 89



По-умолчанию стиль включается или выключается для всего приложения. Т.е. DLL наследуют это дело от вызывающего.
Но можно и мануально рулить.

Я особо не копал, но что-то по этой теме написано тут и тут.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0442 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.