C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
ActiveX на основе RxCalcEdit выпадает с access vio
slydiman
  Отправлено: 16.08.2003, 01:02


Не зарегистрирован







Сделал ActiveX на основе RxCalcEdit, при загрузке в IE выпадает с access violation. Аналогичный ActiveX на основе TDateTimePicker прекрасно работает. Проблема возникает при

CODE

 // Create VCL Object Wrapper for our Control
 m_VclCtl = (TWinControlAccess<TVCL>*)(TVCL::CreateParentedControl(__classid(TVCL), hwndParkingWindow));


в файле atlvcl.h

Возможно это происходит из-за того что RxCalcEdit создает свою скрытую форму с калькулятором.

Положил RxCalcEdit на TActiveForm — все в порядке. Но это не удобно, нужно переписывать все свойства ActiveX объекта.

Кроме того есть другая проблема — не работают кнопки стрелок и backspace.

Гость_slydiman
  Отправлено: 16.08.2003, 23:48


Не зарегистрирован







TRxCalcEdit является наследником TCustomComboEdit (файл ToolEdit.pas из пакета RXLib)

В конструкторе создается кнопка (справа от поля Edit).

CODE

constructor TCustomComboEdit.Create(AOwner: TComponent);
begin
 inherited Create(AOwner);
{$IFDEF RX_D3}
 ControlStyle := ControlStyle + [csCaptureMouse];
{$ENDIF}
 AutoSize := False;
 FDirectInput := True;
 FClickKey := scAltDown;
 FPopupAlign := epaRight;
 FBtnControl := TWinControl.Create(Self);
{$IFDEF WIN32}
 with FBtnControl do
   ControlStyle := ControlStyle + [csReplicatable];
{$ENDIF}
 FBtnControl.Width := DefEditBtnWidth;
 FBtnControl.Height := 17;
 FBtnControl.Visible := True;
 FBtnControl.Parent := Self;                    // Access violation  здесь !!!
 FButton := TEditButton.Create(Self);
 FButton.SetBounds(0, 0, FBtnControl.Width, FBtnControl.Height);
 FButton.Visible := True;
 FButton.Parent := FBtnControl;
 TEditButton(FButton).OnClick := EditButtonClick;
 Height := 21;
 FDefNumGlyphs := 1;
 FGlyphKind := gkCustom;
end;


Еще точнее access violation наступает в процессе прорисовки созданной кнопки.
Сразу после FBtnControl.Parent := Self;
вызывается TCustomComboEdit.WMSize,
потом TCustomComboEdit.UpdateBtnBounds, и ... access violation

Причем после нажатия ОК, ActiveX нормально прорисовывается и работает дальше.

Может есть какой патч для RXLib, где кнопка в TCustomComboEdit создается каким-то
другим образом (не в конструкторе)?

Вернуться в Вопросы программирования в C++Builder