|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
EOleException и webBrowser('About:')
У меня есть 2-ва HTML файла они сжаты с помощью потока ZLIB,когда открываю один все норм,но при открытие второго, EoleException вылетает
Код:
procedure TForm2.OpenStream(obj: TWebBrowser); var AZLib : TDecompressionStream; AStream : TFileStream; AMemStream : TMemoryStream; ALen : Int64; str:string; begin str:=mydir+tv1.Selected.parent.Text+'\'+tv1.Selected.Text; AStream := TFileStream.Create(str,fmOpenRead); AZLib := TDecompressionStream.Create(AStream); AMemStream := TMemoryStream.Create; Try AZLib.ReadBuffer(ALen,SizeOf(Int64)); AMemStream.CopyFrom(AZLib,ALen); AMemStream.Seek(0,0); redt1.Lines.LoadFromStream(AMemStream); Finally AMemStream.Free; AZLib.Free; AStream.Free; End; wb1.Navigate('about:'+redt1.text); //вот тут EOleException end; Тегов в файле каких то крутых нету,он спокойно открывался,когда я его не сжимал. Так в целом в RichEdit Все хорошо открывается никаких проблем,а вот когда я это отправляю в веббраузер появляется ошибка |
#2
|
||||
|
||||
Код:
var document: OleVariant; stringlist: TStringList; begin WebBrowser.Navigate('a b o u t : b l a n k'); while WebBrowser.ReadyState<READYSTATE_INTERACTIVE do Application.ProcessMessages; stringlist:=TStringList.Create; try stringlist.LoadFromFile('test.htm'); document:=WebBrowser.Document; document.clear; document.open; document.write(stringlist.Text); document.close; while WebBrowser.ReadyState<READYSTATE_COMPLETE do Application.ProcessMessages; finally stringlist.Free; end; end; a b o u t : b l a n k без пробелов писать. форум косячит иначе. Пишу программы за еду. __________________ |
#3
|
||||
|
||||
Спасибо,обошелся временным файлом,не красиво но по рабочему))
Насколько я понял проблема была в том что оператор "about:" принимает ограниченное кол-во символов,а я туда целую страницу посылал,вот и ошибка вылетала. Но теперь вопрос оффтопом, мне интересно было бы модифицировать компонент PageControl ,а точнее добавить кнопки на вкладки что бы они закрывались. Создал класс,унаследовал его от TPageControl и тут же встал в тупик,ибо хз где прописывать создание кнопки и тд))) Знаю что такой компонент много кто делает и его можно скачать,но мне интересно написать его самому, может кто уже занимался велосипедами и подскажет как это реализовать или может какие то статейки по этому поводу) |
#4
|
||||
|
||||
Цитата:
Код:
constructor TPageControl.Create(AOwner: TComponent); begin inherited; ... // Вроде здесь end; Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#5
|
||||
|
||||
Цитата:
Цитата:
Но можно и над TPageControl поиздеваться. Например он умеет отображать на вкладках картинки если подключить к нему TImageList через свойство Images в которое можно картинку "крестика" поместить. И потом при нажатии (а лучше при отжатии) левой кнопки мышки проверять - если мышка находится над этой картинкой с крестиком, то уничтожать (или скрывать) соответствующую вкладку: Код:
procedure TForm1.PageControl1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var pt: TPoint; idx: Integer; begin pt := PageControl1.ScreenToClient(Mouse.CursorPos); if htOnIcon in PageControl1.GetHitTestInfoAt(pt.X, pt.Y) then begin idx := PageControl1.IndexOfTabAt(pt.X, pt.Y); if idx >= 0 then PageControl1.Pages[idx].Free; end; end; Ещё вместо использования свойства Images можно самому полностью отрисовывать вкладку если установить свойство OwnerDraw в True и прописать отрисовку на событии OnDrawTab. |
#6
|
||||
|
||||
Цитата:
Пишу программы за еду. __________________ |
#7
|
||||
|
||||
NumLock хорошо,опробую,спасибо.
При нажатие на кнопку пытаюсь удалить её,и её родителя, но вылетает EAbstrackError вот полный код компонента Код:
unit MyTabSheet; interface uses SysUtils, Classes, Controls, ComCtrls,StdCtrls; var b:TButton; type TMyTabSheet = class(TTabSheet) private { Private declarations } protected { Protected declarations } procedure OnClick(Sender:TObject); public { Public declarations } published { Published declarations } constructor Create(AOwner:TComponent);override; end; procedure Register; implementation procedure Register; begin RegisterComponents('MyComp', [TMyTabSheet]); end; { TMyTabSheet } constructor TMyTabSheet.Create(AOwner: TComponent); begin inherited Create(AOwner);; b:=TButton.Create(self); b.parent:=self; b.Height:=15; b.Width:=15; b.Caption:='x'; b.Left:=10; b.top:=5; b.OnClick:=OnClick; end; procedure TMyTabSheet.OnClick(Sender: TObject); begin b.Caption:='qwe'; // b.Parent.Free; b.Free; end; end. В чем проблема? И заодно спрошу куда прописать код что бы он срабатывал не при выставление объекта,а при запуске формы,что то типо OnActive компонента) Последний раз редактировалось JunkieBeat, 24.01.2014 в 21:37. |