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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.06.2009, 13:04   #21
beemoto
Форумчанин
 
Аватар для beemoto
 
Регистрация: 11.04.2009
Сообщений: 277
По умолчанию

надо зделать чтоб если вкладки ВСЕ закрыты, то открыть пустую вкладку
пробовал так:
Код:
if pagecontrol1.PageCount < 1 then
CreateTabBrowser('about:blank','about:blank');
но ничего непроисходит...

Последний раз редактировалось Stilet; 16.06.2009 в 13:08.
beemoto вне форума Ответить с цитированием
Старый 16.06.2009, 13:12   #22
S@fer
Форумчанин
 
Аватар для S@fer
 
Регистрация: 29.01.2009
Сообщений: 411
По умолчанию

я делал так
Код:
PageControl1.ActivePage.Destroy; //Удаляет активную вкладку
  if PageControl1.PageCount=0 then Close; // Закрывает окно если нет вкладок
S@fer вне форума Ответить с цитированием
Старый 16.06.2009, 13:13   #23
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
CreateTabBrowser
А что эта процедура делает?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.06.2009, 13:42   #24
beemoto
Форумчанин
 
Аватар для beemoto
 
Регистрация: 11.04.2009
Сообщений: 277
По умолчанию

это функция открывает новую вкладку с встреным веббраузером вот код:
Код:
function Tform1.CreateTabBrowser(sURL: string; sCaption: string):TTabSheet;
var
  ts: TTabSheet;
  WB: TWebbrowser;
begin
 ts:= TTabSheet.Create(PageControl1); //ñîçäàåì íîâóþ âêëàäêó
 Result:=ts;
     try
     //ïðèñâàåâàåì çíà÷åíèÿ Pagecontrol'ó
    ts.PageControl:=PageControl1 ;
    ts.Parent := PageControl1;
    ts.Caption := sCaption;
    //ïðèñâàåâûåì çíà÷åíèÿ Webbrowser'ó
    WB := TWebbrowser.Create(ts);

    TControl(WB).Parent := ts;
        WB.OnNewWindow2 := WebBrowser1NewWindow2;
        wb.OnProgressChange:=WebBrowser1ProgressChange;

    WB.Align := alClient;
    WB.Silent := True;
    WB.Visible := True;

    PageControl1.ActivePage := ts;

           if Trim(sURL) <> '' then//åñëè óðë íå ïóñòîé òî ïåðåõîäèì
    begin
      WB.Navigate(sURL);
      WaitForBrowser(WB);
    end;
     except
       ts.Free; //îñâîáîæäàåì Pagecontrol
     end;
end;
S@fer, это понятно, но вот я пишу:
Код:
if pagecontrol1.PageCount=0 then
CreateTabBrowser('about:blank','about:blank')
else
PageControl1.ActivePage.Destroy;
но нереагирует......

Последний раз редактировалось Stilet; 16.06.2009 в 14:28.
beemoto вне форума Ответить с цитированием
Старый 16.06.2009, 15:27   #25
S@fer
Форумчанин
 
Аватар для S@fer
 
Регистрация: 29.01.2009
Сообщений: 411
По умолчанию

Цитата:
Код:
if pagecontrol1.PageCount=0 then
CreateTabBrowser('about:blank','about:blank')
else
PageControl1.ActivePage.Destroy;
а где вы это пишите? в каком событии?
S@fer вне форума Ответить с цитированием
Старый 16.06.2009, 15:33   #26
beemoto
Форумчанин
 
Аватар для beemoto
 
Регистрация: 11.04.2009
Сообщений: 277
По умолчанию

S@fer,в онклик кнопки
beemoto вне форума Ответить с цитированием
Старый 16.06.2009, 15:39   #27
S@fer
Форумчанин
 
Аватар для S@fer
 
Регистрация: 29.01.2009
Сообщений: 411
По умолчанию

а вот так будет работать ?
Код:
if pagecontrol1.PageCount=0 then
Showmessage('Вкладок нет')
else
PageControl1.ActivePage.Destroy;
И еще попробуйте разделить процедуры. сначала сделать удаление, а потом проверку на открытые вкладки.
Код:
PageControl1.ActivePage.Destroy;

if pagecontrol1.PageCount=0 then
CreateTabBrowser('about:blank','about:blank');
Просто нажав на кнопку программа у вас либо удалит, либо создаст вкладку. (т.е. нужно нажимать 2 раза). а этим способом сначала идет удаление а потом проверка.

Последний раз редактировалось S@fer; 16.06.2009 в 15:40. Причина: добавил описание
S@fer вне форума Ответить с цитированием
Старый 16.06.2009, 16:39   #28
beemoto
Форумчанин
 
Аватар для beemoto
 
Регистрация: 11.04.2009
Сообщений: 277
По умолчанию

S@fer, ксожалению - нет
нехочет =(
beemoto вне форума Ответить с цитированием
Старый 17.06.2009, 03:56   #29
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
Лампочка

А почему функция? Для чего-то необходимо возвращать созданную вкладку?
А "OnNewWindow2" и "OnProgressChange" тоже потребуются?

Я бы так делал:
Код:
...

      Public
            { Public declarations }
            Procedure WBNewWindow(Sender: TObject; Var ppDisp: IDispatch; Var Cancel: WordBool);
            Procedure WBProgressChange(Sender: TObject; Progress, ProgressMax: Integer);
            Procedure CreateBrowserTab(sURL: String; sCaption: String);
      End;

...

Procedure TForm1.FormCreate(Sender: TObject);
Begin
Button1.Caption:='New Tab';
Button2.Caption:='First Tab';
Button3.Caption:='Close Active Tab';
End;

Procedure TForm1.CreateBrowserTab(sURL: String; sCaption: String);
Var TS: TTabSheet; WB: TWebBrowser;
Begin
TS:=TTabSheet.Create(PageControl1);
Try
      TS.PageControl:=PageControl1;
      TS.Parent:=PageControl1;
      PageControl1.ActivePage:=TS;
      TS.Caption:=sCaption;
      WB:=TWebBrowser.Create(TS);
      TControl(WB).Parent:=TS;
      WB.OnNewWindow2:=WBNewWindow;
      WB.OnProgressChange:=WBProgressChange;
      WB.Align:=alClient;
      WB.Silent:=True;
      If Trim(sURL)<>'' Then
            Begin
            WB.Navigate(sURL);
            End;
Except
      TS.Free;
      End;
End;

Procedure TForm1.WBNewWindow(Sender: TObject; Var ppDisp: IDispatch; Var Cancel: WordBool);
Begin
CreateBrowserTab('http://ya.ru', ' WBNewWindow '); // Не знаю как перехватывать адрес и запрещать открывать новое окно эксплорером...
End;

Procedure TForm1.WBProgressChange(Sender: TObject; Progress, ProgressMax: Integer);
Begin
// Не знаю что тут нужно обрабатывать
End;

Procedure TForm1.Button1Click(Sender: TObject);
Begin
CreateBrowserTab('http://ya.ru', ' Яндекс!  О_О ');
End;

Procedure TForm1.Button2Click(Sender: TObject);
Begin
If PageControl1.PageCount<1 Then
      Begin
      CreateBrowserTab('about:blank', 'about:blank');
      End;
End;

Procedure TForm1.Button3Click(Sender: TObject);
Begin
PageControl1.ActivePage.Free;
End;
Переделал в процедуру и переименовал, чтоб с оригиналом не путалось...


P.S. Почему-то с процедурой "Button2Click" перестаёт форматироваться код...
I am the First of Cyber Evolution...
I am the First to Program your Future...

Последний раз редактировалось DomiNick; 17.06.2009 в 04:10.
DomiNick вне форума Ответить с цитированием
Старый 17.06.2009, 12:05   #30
beemoto
Форумчанин
 
Аватар для beemoto
 
Регистрация: 11.04.2009
Сообщений: 277
По умолчанию

тогда, подскажите что здесь нетак!?
Код:
procedure TForm1.WebBrowser1NewWindow2(ASender: TObject;
  var ppDisp: IDispatch; var Cancel: WordBool);
var
ts: TTabSheet;
begin
if TWebBrowser(asender).ReadyState <> READYSTATE_COMPLETE then
  begin
    ppDisp := nil;
    Cancel := True;
  end else
begin
ts:=CreateBrowserTab('','Íîâàÿ âêëàäêà');
    WaitForBrowser(TWebbrowser(ts.Controls[0]));
    ppdisp := (TWebbrowser(ts.Controls[0])).Application;
    WaitForBrowser(TWebbrowser(ts.Controls[0]));
end;
ругается на строчку ts:=CreateBrowserTab('','Новая вкладка');
пишет: Несовместимые типы: ТТабшеет и Процедура

а всё заменил WBNewWindow на WebBrowser1NewWindow2
и соединил 2 кнопки:
Код:
PageControl1.ActivePage.Free;
If PageControl1.PageCount<1 Then
      Begin
      CreateBrowserTab('about:blank', 'about:blank');
      End;
но при закрытии всёравно ругается...

Последний раз редактировалось Stilet; 18.06.2009 в 12:17.
beemoto вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Страшные Вкладки (C#/C++) Balizard Помощь студентам 1 05.05.2009 06:49
закрытие вкладки в TTabControl Shade Помощь студентам 3 06.02.2009 13:10
Вкладки в делфи7 Никита1984 Компоненты Delphi 3 09.12.2007 17:33
закрытие вкладки в TTabControl Shade Компоненты Delphi 9 19.05.2007 03:02
Вкладки Каштанка Компоненты Delphi 1 02.05.2007 11:01