Модераторы: MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TWebBrowser, FullScreen 
:(
    Опции темы
Quadr0
Дата 19.6.2005, 21:49 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











...

Это сообщение отредактировал(а) Quadr0 - 14.7.2011, 21:21
  Вверх
December
Дата 19.6.2005, 23:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Antitheorist
****


Профиль
Группа: Участник
Сообщений: 4423
Регистрация: 14.8.2002
Где: Харьков

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



У меня
Код

WindowState := wsMaximized;
BorderStyle:=bsNone;

работает на ура. На форме лежит TWebBrowser c Align=alClient. Скорее всего, у тебя в другом месте ошибка.
Цитата(Quadr0 @ 19.6.2005, 21:49)
ни на какие Visible := True.

А он вообще на это свойство плевать хотел smile В ходе моих давних экспериментов выяснилось, что лучше всего держать TWebBrowser внутри TPanel, и уже через TPanel регулировать видимость.


--------------------
Для друзей с винграда - скидки на разработку сайтов
PM MAIL WWW ICQ   Вверх
p0s0l
Дата 20.6.2005, 01:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

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



Скорее всего это происходит из-за того, что пересоздаются окна, поэтому TWebBrowser теряет своё содержимое...
Чтобы проверить так это или нет, посмотри значение WebBrowser.Handle до и после строчки BorderStyle := bsNone... Если изменяется - значит плохо smile (по смыслу - должно изменяться smile )
Когда-то была темка про подобное, но не совсем про это:
http://forum.vingrad.ru/index.php?showtopic=40245&view=all(но смысл тот же - уничтожаются окна)...
Я так понял, ты это для DRKB-вьювера делаешь. Поэтому может проще обойтись без лишнего геморроя и перезагрузить страничку и перемотать на нужное место ?... smile

Либо же, через WinAPI:
Код
procedure TMainForm.FullScrenn(Sender: TObject);
var
  ws : integer;
begin
  ShowWindow(Handle, SW_MAXIMIZE);
  ws := GetWindowLong(Handle, GWL_STYLE);
  ws := ws and (not (WS_BORDER or WS_CAPTION or WS_THICKFRAME));
  SetWindowLong(Handle, GWL_STYLE, ws);
  Width := Width + 1;
  Width := Width - 1;
end;
Соответственно, возврат в неполноэкранный режим тоже надо делать через WinAPI...


--------------------
С уважением, г-н Посол.
PM   Вверх
Quadr0
Дата 20.6.2005, 02:12 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











...

Это сообщение отредактировал(а) Quadr0 - 14.7.2011, 21:24
  Вверх
p0s0l
Дата 20.6.2005, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

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



Цитата(Quadr0 @ 20.6.2005, 02:12)
подходит к этому без особого энтузиазизма. Форма сначала прячется вообще. Реанимровать её удаётся ShowWindow(Handle, SW_SHOWNORMAL), но никакого заголовка и бордера при этом не видно. Меня спас только WS_OVERLAPPEDWINDOW, за что ему низкий поклон.
ну дык еще бы smile, WinAPI сделал всё так как положено, т.е. так как ты написал smile
Там вместо and надо or, да и вообще, лучше перед переходом в полноэкранный режим запомнить стиль (ws), а потом при возврате его восстановить...
Код
var oldws : integer;

procedure TMainForm.FullScrenn(Sender: TObject);    
var    
  ws : integer;    
begin    
  ShowWindow(Handle, SW_MAXIMIZE);    
  oldws := GetWindowLong(Handle, GWL_STYLE);    
  ws := oldws and (not (WS_BORDER or WS_CAPTION or WS_THICKFRAME));    
  SetWindowLong(Handle, GWL_STYLE, ws);    
  Width := Width + 1;    
  Width := Width - 1;    
end;

procedure TMainForm.WindowMode(Sender: TObject);    
begin    
  SetWindowLong(Handle, GWL_STYLE, oldws);    
  Width := Width + 1;    
  Width := Width - 1;    
end;

Добавлено @ 12:04
Цитата(Quadr0 @ 20.6.2005, 02:12)
Возможно
А ты проверь... smile

Цитата(Quadr0 @ 20.6.2005, 02:12)
С какого перепугу? Это исключено. Или ты имеешь ввиду теряет свой Хендл(0)?
Это ты зря... Веб-браузер вообще вещь такая, с которой нужно бережно обращаться... Потеря содержимого возможна smile, почитай ту тему - при смене родителя содержимое терялось из-за того, что уничтожалось окно. В твоём случае вполне возможно что такая же байда... Вот только непонятно, зачем он исчезал ?...





--------------------
С уважением, г-н Посол.
PM   Вверх
Girder
Дата 20.6.2005, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


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

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



Цитата(p0s0l @ 20.6.2005, 02:21)
Скорее всего это происходит из-за того, что пересоздаются окна
угу smile

Quadr0 если ты в енто не веришь... то можеш сам проверить. Скопируй файл Controls.pas в директорию... где у тебя находится твой проект. И замени в нем процедуру CMRecreateWnd на код(см. ниже). А также выстави у твоего WebBrowser.Tag в 1(WebBrowser.Tag=1).

Код
procedure TWinControl.CMRecreateWnd(var Message: TMessage);
type
 TX=record
  Parent:TComponent;
  D:Pointer;
 end;
var
  WasFocused: Boolean;
  fW:TList;
  X:^TX;
  i:integer;
  p:TAlign;
begin
  fW:=TList.Create;
  if FHandle <> 0 then
  begin
    if FWinControls <> nil then
      for I := FWinControls.Count - 1 downto 0  do
       begin
        if TWinControl(FWinControls[I]).Tag=1 then
         begin
          New(X);
          X^.D:=FWinControls.Items[i];
          X^.Parent:=TComponent(X^.D).GetParentComponent;
          Windows.SetParent(TWinControl(X^.D).Handle,0);
          fW.Add(X);
          FWinControls.Delete(I);
         end;
       end;
  end;
  WasFocused := Focused;
  DestroyHandle;
  UpdateControlState;
  if WasFocused and (FHandle <> 0) then Windows.SetFocus(FHandle);
  for i:=fW.Count-1 downto 0 do
   begin
    X:=fW.Items[i];
    FWinControls.Add(X^.D);
    Windows.SetParent(TWinControl(X^.D).Handle,TWinControl(X^.Parent).Handle);
    p:=TWinControl(X^.D).Align;
    TWinControl(X^.D).Align:=alNone;
    TWinControl(X^.D).Align:=p;
    Dispose(X);
    fW.Delete(i);
   end;
  fW.Free;
end;


Ну а теперь... можеш сделать форме BorderStyle := bsNone и ни чего не исчезает smile .

Это сообщение отредактировал(а) Girder - 23.6.2005, 09:24


--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
Quadr0
Дата 20.6.2005, 15:22 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











...

Это сообщение отредактировал(а) Quadr0 - 14.7.2011, 21:27
  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: ActiveX/СОМ/CORBA"

Rrader
Girder

Запрещено:

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

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


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

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

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


 




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


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

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