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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Передача компонента фрейма в качестве параметра 
:(
    Опции темы
FlyingHome
Дата 7.6.2009, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Всем привет. Пишу тестирующую программу для вуза. Имеется 4 фрейма с различным набором компонентов для отображения вопросов (в зависимости от типа вопроса выводится определенный фрейм).
В одном модуле я описал собственный класс для реализации механизма отображения:
Код

type
  TQuestion = class(TTEster)
public
  Type1: TType1; //  4 фрейма
  Type2: TType2; //        по 
  Type3: TType3; //   типам
  Type4: TType4; //     вопросов
  HTML: TStringList;
  //  procedure HTMLInit();
  procedure FrameInit(Box: TGroupBox); //создание фреймов
  procedure view(box:TGroupBox; QType: byte; current:byte);
  procedure HTMLShow(WebBrowser:TWEbBrowser; HTMLCode: String);
end;

 с процедурой создания фрейма в run-time
Код

procedure TQUestion.FrameInit(Box: TGroupBox);
begin
Type1:= TType1.Create(box);
Type2:= TType2.Create(box);
Type3:= TType3.Create(box);
Type4:= TType4.Create(box);
Application.CreateForm(TType1,Type1);
Application.CreateForm(TType2,Type2);
Application.CreateForm(TType3,Type3);
Application.CreateForm(TType4,Type4);
end;

и отображения вопросов и вариантов ответа:
Код

procedure TQuestion.view(box:TGroupBox; QType:byte; current:byte);
begin
if QType=1 then
begin
Type1.Parent:=box;
Type1.Left:=8;
Type1.Top:=16;
Type1.Show;
Self.HTMLShow(Type1.Browser1,Self.test[current-1,2]);
Self.HTMLShow(Type1.Browser2,Self.test[current-1,3]);
Self.HTMLShow(Type1.Browser3,Self.test[current-1,4]);
Self.HTMLShow(Type1.Browser4,Self.test[current-1,5]);
end;

Процедура HTMLShow предназначена для записи HTML-кода в memorystream и последующего отображения этого кода в компоненте WebBrowser (это обязательно).
Проблема в том, что когда я в другом модуле запускаю процедуру TQuestion.view на строке 
Код

Self.HTMLShow(Type1.Browser1,Self.test[current-1,2]);

программа сваливается в EAccessViolation. Отладчик, судя по всему, ругается на компонент Type1.Browser1 типа WebBrowser. Что характерно, фрейм на форме отображается нормально, но HTML-код из переменной test[] не выводит. Как правильно передать компонент WebBrowser из фрейма в процедуру в качестве параметра?
Еще одну вещь заметил: при написании "Type1.Browser1." вне процедуры, Code Completition после точки выводит все методы и свойства компонента WebBrowser, а если то же самое написать в параметрах процедуры, например "HTMLShow(Type1.Browser1.", то Code Completition выведет только два конструктора: Create и CreateParent. В чем тут может быть проблема?

P.S. Если надо, реализация HTMLShow вот
Код

procedure TQuestion.HTMLShow(WebBrowser:TWEbBrowser; HTMLCode: string);
var
  ms: TMemoryStream;
begin
  WebBrowser.Navigate('about:blank');
  while WebBrowser.ReadyState < READYSTATE_INTERACTIVE do
   Application.ProcessMessages;

  if Assigned(WebBrowser.Document) then
  begin
    Self.HTML := TStringList.Create;
    try
      ms := TMemoryStream.Create;
      try
        Self.HTML.Text:=HTMLCode;
        Self.HTML.SaveToStream(ms);
        ms.Seek(0, 0);
        (WebBrowser.Document as IPersistStreamInit).Load(TStreamAdapter.Create(ms));
      finally
        ms.Free;
      end;
    finally
      Self.HTML.Free;
    end;
  end;
end;


Это сообщение отредактировал(а) FlyingHome - 8.6.2009, 02:51
PM MAIL   Вверх
HeliX
Дата 7.6.2009, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Из кода не понятно как объявлена переменная test и как она заполняется.
Скорее всего где-то неправильно заполняете текст или выделяете память для переменной. 
PM MAIL   Вверх
pseud
Дата 12.6.2009, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

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



1.
Цитата(FlyingHome @  7.6.2009,  10:57 Найти цитируемый пост)
Еще одну вещь заметил: при написании "Type1.Browser1." вне процедуры, Code Completition после точки выводит все методы и свойства компонента WebBrowser, а если то же самое написать в параметрах процедуры, например "HTMLShow(Type1.Browser1.", то Code Completition выведет только два конструктора: Create и CreateParent. В чем тут может быть проблема?

тебе дельфы выдает список допустимых свойств (функций) из полного списка свойств/функций/процедур TQuestion
Код

HTMLShow(WebBrowser:TWEbBrowser; ...

т.е. в список вываливается то что туда можно засунуть. Create и CreateParent - дельфи считает что они могут таки вернуть объект класса TWEbBrowser.

2. Что это?:
Код

Type1:= TType1.Create(box);
Application.CreateForm(TType1,Type1);

ты сначала создаешь фрейм TType1, владельцем которго назначешь box и засовываешь в перемнную Type1. А потом опять создаешь фрейм Type1: TType1, владельцем которго назначешь Application.

3. В основной твой вопрос не вникал, ибо пока код=каша.
Могу лишь предположить что объект класса TQuestion ты не создал, но пытаешься вызывать его методы.
Шаги
Код

Type1:= TType1.Create(box);
Type2:= TType2.Create(box);
Type3:= TType3.Create(box);
Type4:= TType4.Create(box);
Application.CreateForm(TType1,Type1);
Application.CreateForm(TType2,Type2);
Application.CreateForm(TType3,Type3);
Application.CreateForm(TType4,Type4);
Type1.Parent:=box;
Type1.Left:=8;
Type1.Top:=16;
Type1.Show;

проходят без AV, т.к. им нет нужды в объетке Self.
Но Self.HTMLShow( - валится.

Это сообщение отредактировал(а) pseud - 12.6.2009, 12:21


--------------------
Испытание чужого терпения можно считать успешным, если оно лопнуло...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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