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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.07.2017, 20:32   #1
Жора1111
Пользователь
 
Регистрация: 25.06.2017
Сообщений: 12
По умолчанию Ошибка в создании вкладки для браузера в Delphi

Дорогие знатоки прошу помощи в двух вопросах, заранее спасибо. Первая проблема заключается в том, что при начале поиска выскакивает ошибка "Invalid class typecast" в 130 строчке процедуры TForm1.WebDocumentComplate, причем если запускать программу не с самого делфи, а с exe-шника, то дальше можно работать с самой программой без проблем. И второе, программа сама начинает искать запрос, без нажатия на кнопку "Enter", если я начинаю вводить слова, которые начинались на такую же букву как и предыдущие запросы. Я надеюсь понятно объяснил, помогите если сможете.
Вложения
Тип файла: rar Браузер.rar (229.2 Кб, 15 просмотров)
Жора1111 вне форума Ответить с цитированием
Старый 27.07.2017, 08:41   #2
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Первая проблема у вас здесь

Код:
procedure TForm1.WebDocumentComplete(Sender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
begin
  // Ошибка здесь у вас же нет , если за комментировать то все нормально
//((TWinControl(Sender as TWebBrowser).Parent) as TTabSheet).Caption :=  
//((TWebBrowser(Sender).document as IHTMLDocument2).title);
end;
Неправильно определена PageControl

вот кое что подправил
Вложения
Тип файла: rar Браузер.rar (230.5 Кб, 19 просмотров)

Последний раз редактировалось Aliens_wolfs; 27.07.2017 в 09:57.
Aliens_wolfs вне форума Ответить с цитированием
Старый 28.07.2017, 17:45   #3
Жора1111
Пользователь
 
Регистрация: 25.06.2017
Сообщений: 12
По умолчанию

Спасибо огромное что откликнулись. Моя ошибка была в том что я не поместил TWebBrowser на TTabSheet и из-за этого возник конфликт. Но за то что ответили огромное спасибо. Можно ли у вас еще один-два вопроса уточнить?
Жора1111 вне форума Ответить с цитированием
Старый 30.07.2017, 20:00   #4
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Цитата:
Можно ли у вас еще один-два вопроса уточнить?
Можно
Aliens_wolfs вне форума Ответить с цитированием
Старый 31.07.2017, 22:52   #5
Жора1111
Пользователь
 
Регистрация: 25.06.2017
Сообщений: 12
По умолчанию

Я переделал некоторые моменты и перенес проект в делфи 10. Но проблему мою это так и не решило. А проблемы состоят в том что процедура TForm1.PageDrawTab (118) не рисует крестик в углу вкладки, хотя фактически она там есть и работает для ее закрытия. Вторая проблема, даже не проблема а непонятность. Если я в поисковик уже что-то вводил, то при последующем вводе слов, которые начинаться на такую же букву браузер сам начнет искать запрос, причем на старый запрос. Я надеюсь объяснил проблему. Заранее спасибо за ответ, конечно если он будет.
Вложения
Тип файла: rar Браузер.rar (765.1 Кб, 18 просмотров)
Жора1111 вне форума Ответить с цитированием
Старый 01.08.2017, 12:38   #6
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Цитата:
А проблемы состоят в том что процедура TForm1.PageDrawTab (118) не рисует
сразу включите в контроле Page.OwnerDraw=True
и прорисовать так

Код:
procedure TForm1.PageDrawTab(Control: TCustomTabControl; TabIndex: Integer;
  const Rect: TRect; Active: Boolean);
var
    AText: string;
    APoint: TPoint;
    r: Trect;
begin
  with (Control as TPageControl).Canvas do
  begin
    FillRect(Rect);
    Brush.Color:=clBtnFace;
    AText:= TPageControl(Control).Pages[TabIndex].Caption;
    with Control.Canvas do
    begin
      APoint.X:= (Rect.Right - Rect.Left) div 2 - TextWidth(Text) div 2;
      APoint.Y:= (Rect.Right - Rect.Left) div 2 - TextWidth(Text) div 2;
      TextRect(Rect, 2, 0, AText);
    end;
    Brush.Color:=clRed;
    r:= Types.Rect(Rect.Right - size - 4, Rect.Top + 2, Rect.Right - 2, Rect.Top + size + 4);
    Pen.Color:= clWhite;
    Rectangle(r);
  end
end;


procedure TForm1.FormPaint(Sender: TObject);
begin
if Page.PageCount > 0 then
Page.OnDrawTab(Page, Page.ActivePageIndex, Page.TabRect(Page.ActivePageIndex), true);
end;
Цитата:
Если я в поисковик уже что-то вводил, то при последующем вводе слов, которые начинаться на такую же букву браузер сам начнет искать запрос
Решается так:

Вообще уберите это событие procedure TForm1.SearchClick(Sender: TObject);

а в следующем событии сделайте так
Код:
procedure TForm1.SearchKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if (Key = VK_Return) then
    begin
      Key:=0;
      if (Search.Text= '') then
        exit;
        Search.Items.Insert(0, Search.Text);
        if (Search.Text <> '') then
       Web.Navigate('https://www.google.ru/search?q='+Search.Text)
    end;
end;

Последний раз редактировалось Aliens_wolfs; 01.08.2017 в 12:54.
Aliens_wolfs вне форума Ответить с цитированием
Старый 01.08.2017, 16:03   #7
Жора1111
Пользователь
 
Регистрация: 25.06.2017
Сообщений: 12
По умолчанию

Спасибо огромное, Вы очень помогли, только вот когда вывело кнопку название вкладки исчезает.
Жора1111 вне форума Ответить с цитированием
Старый 01.08.2017, 17:03   #8
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Выше в посте #6 смотрите в procedure TForm1.PageDrawTab
я же написал
TextRect(Rect, 2, 0, AText);
а у вас там
TextRect(Rect, Rect.Left + APoint.X, Rect.Top + APoint.Y, AText);
поэтому и невидно название

Последний раз редактировалось Aliens_wolfs; 01.08.2017 в 17:39.
Aliens_wolfs вне форума Ответить с цитированием
Старый 01.08.2017, 21:47   #9
Жора1111
Пользователь
 
Регистрация: 25.06.2017
Сообщений: 12
По умолчанию

Я это видел и исправил, но это все равно не помогло. Вернее текст там есть но его сильно смещает за пределы рамки вкладки влево.

Последний раз редактировалось Жора1111; 01.08.2017 в 21:49.
Жора1111 вне форума Ответить с цитированием
Старый 01.08.2017, 21:52   #10
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Поэкспериментируйте с этим значением TextRect(Rect, и подберите нужное, можно еще вместо TextRect
сделать так
Код:
R:= Rect;
DrawText(Handle, PAnsiChar(AText), Length(AText), R, DT_CENTER);
тогда текст выводиться по центру

Весь код будет примерно такой
Код:
procedure TForm1.PageDrawTab(Control: TCustomTabControl; TabIndex: Integer;
  const Rect: TRect; Active: Boolean);
var
    AText: string;
    r: Trect;
begin
  with (Control as TPageControl).Canvas do
  begin
    FillRect(Rect);
    Brush.Color:=clBtnFace;
    AText:= TPageControl(Control).Pages[TabIndex].Caption;
    with Control.Canvas do
    begin
    R:= Rect;
     DrawText(Handle, PAnsiChar(AText), Length(AText), R, DT_CENTER);
    end;
      Brush.Color:= clGradientActiveCaption;
      r:= Types.Rect(Rect.Right - size - 4, Rect.Top + 2, Rect.Right - 2, Rect.Top + size + 4);
      Rectangle(r);
      AText:= 'X';
      Font.Color:= clBlack;
      TextRect(R, r.Left + 2, r.Top - 1, AText);
  end
end;

Последний раз редактировалось Aliens_wolfs; 01.08.2017 в 22:37.
Aliens_wolfs вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вкладки браузера Ципихович Эндрю Свободное общение 30 09.05.2015 17:22
Ошибка в создании браузера vladimir98 Общие вопросы Delphi 11 21.07.2014 13:20
Вкладки веб-браузера в TabCantrol саша40 Работа с сетью в Delphi 3 26.11.2012 04:27
Получение html кода с текущей вкладки браузера (IE, opera, итд) Cyn4uk Фриланс 3 14.11.2010 15:26
Определить вкладки браузера toxicll Win Api 3 10.05.2007 20:11