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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.08.2014, 03:51   #1
Peshka5
Пользователь
 
Регистрация: 03.07.2014
Сообщений: 11
Вопрос Создать компонент в форме.

Доброго времени суток.
Работаю с компонентом TChromium. Мне нужно добавить его на форму, но уже после выполнения OnFormCreate (в нем я распаковываю .dll из ресурсов).
Косвенные решения (не через распаковку ресурсов) тоже приветствуются.
Delphi 7.
Peshka5 вне форума Ответить с цитированием
Старый 14.08.2014, 08:05   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Создай динамически.
Что-то типа:
Код:
With TChromium.Create do begin
 Parent:=self;
 align:=alClient;
 Visible:=true;
end;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.08.2014, 09:24   #3
Peshka5
Пользователь
 
Регистрация: 03.07.2014
Сообщений: 11
По умолчанию

Компилятор говорит, что не хватает параметров для Create.
Дополнил:
Код:
With TChromium.Create(Form1) do begin
Parent:=self;
align:=alClient;
Visible:=true;
При попытке компилирования появляется окошко CPU с ошибкой. Проблема в строчке Parent:=self; .

Последний раз редактировалось Peshka5; 14.08.2014 в 09:26.
Peshka5 вне форума Ответить с цитированием
Старый 14.08.2014, 10:57   #4
Toxa
Форумчанин Подтвердите свой е-майл
 
Аватар для Toxa
 
Регистрация: 01.12.2006
Сообщений: 514
По умолчанию

возможно такого параметра вообще нет, Stilet привел примерный вариант
и я бы настоятельно рекомендовал не использовать конструкцию with
уж лучше
Код:
var
chrom : TChromium;
begin
chrom := TChromium.Create(Form1);
chrom.Parent:=self;
chrom.align:=alClient;
chrom.Visible:=true;
будет сразу ясно к чему относится параметр, и при дебаге проще будет смотреть значения параметров
Пишу на Delphi за еду
Toxa вне форума Ответить с цитированием
Старый 14.08.2014, 11:02   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Текст ошибки как всегда засекречен в связи с крушением космического корабля пришельцев в Челябинске. Осторожнее - нас прослушивают.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.08.2014, 11:19   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Toxa
Насчет with дело вкуса (признаюсь - тоже не использую).
Self доступно из метода формы (возможно ТС обращается не оттуда).
А вот Form1 использовать не фонтан - зависит от способа создания формы, типа - удосужился ли программист засунуть в этот указатель чего нужно. И если динамически создается несколько копий одной и той же формы, то совсем уж не фонтан
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 14.08.2014, 20:16   #7
Peshka5
Пользователь
 
Регистрация: 03.07.2014
Сообщений: 11
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Текст ошибки как всегда засекречен.
Текста ошибке нет как такового, после компиляции открывается окно CPU с непонятным содержанием и после продолжения программа закрывается.
Что ошибка в строчке TChromium.Parent:=self; узнал путем заключения.

Цитата:
Сообщение от Аватар Посмотреть сообщение
А вот Form1 использовать не фонтан - зависит от способа создания формы, типа - удосужился ли программист засунуть в этот указатель чего нужно.
Тогда я немного не понимаю что использовать кроме Form1, так как моя форма пуста.

Последний раз редактировалось Stilet; 14.08.2014 в 21:46.
Peshka5 вне форума Ответить с цитированием
Старый 14.08.2014, 20:35   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Полный код создания в студию
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 14.08.2014, 21:10   #9
Peshka5
Пользователь
 
Регистрация: 03.07.2014
Сообщений: 11
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Полный код создания в студию
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  s : array [1..6] of string;
  wb:TChromium;

implementation

{$R *.dfm}
{$R dlls.RES}

procedure TForm1.FormCreate(Sender: TObject);
var
  ms : TMemoryStream;
  rs : TResourceStream;
  m_DllDataSize:integer;
  mp_DllData:Pointer;
  i : integer;
begin
   s[1]:='d3dcompiler_43.dll'; //Вношу названия dll'ок в s.
   s[2]:='d3dx9_43.dll';
   s[3]:='icudt.dll';
   s[4]:='libcef.dll';
   s[5]:='libEGL.dll';
   s[6]:='libGLESv2.dll';
   for i:=1 to 6 do
   if 0 <> FindResource(hInstance, PAnsiChar('DLL'+inttostr(i)), RT_RCDATA) then
   begin
    rs := TResourceStream.Create(hInstance, PAnsiChar('DLL'+inttostr(i)), RT_RCDATA);
    ms := TMemoryStream.Create; 
     try
      ms.LoadFromStream(rs);                 //Не мой код, но рабочий.
      ms.Position := 0; 
      m_DllDataSize := ms.Size;
      mp_DllData := GetMemory(m_DllDataSize);
      ms.Read(mp_DllData^, m_DllDataSize);
     finally
      ms.SaveToFile(s[i]);  //Сохраняю из мемори стрим в файл называя названиями из s.
      ms.Free;
      rs.Free;
     end;
   end;
   wb:=TChromium.Create(Form1);  //Проблемное место.
   wb.Parent:=self;
   wb.align:=alClient;
   wb.Visible:=true;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
i:integer;
begin
for i:=1 to 6 do
if FileExists(s[i]) then DeleteFile(s[i]);  //Удаляю dll.
end;

end.
Peshka5 вне форума Ответить с цитированием
Старый 14.08.2014, 21:47   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
открывается окно CPU
Скриншот покажешь?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Компонент AxShockwaveFlashObjects в форме VisualStudio C# ChumCh WPF, UWP, WinRT, XAML 0 02.04.2013 23:07
DSPack - перевести вывод из консольной на компонент на форме GoodDA Мультимедиа в Delphi 0 20.02.2012 02:42
создать форму на форме разработать меню и создать кнопки конец и о программе Андрей_И Помощь студентам 1 23.05.2011 23:42
Как проверить существует ли определённый компонент на форме? Ksardas13 C++ Builder 1 06.04.2011 04:22
Непрозрачный компонент на почти прозрачной форме Marsel737 Общие вопросы Delphi 1 15.05.2010 19:22