![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
|
У меня есть 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. |