| 
| 
 | Вопрос # 2 269/ вопрос открыт / | 
 |  Здравствуйте, эксперты! Пытаюсь программно перейти на первую вкладку в TabControl, но что-то не то с синтаксисом. Подскажете, что не так? Приложение:Переключить в обычный режим SendMessage(TabControl1.Handle, 0);TabControl1.Perform(WM_LBUTTONDOWN, 0);TabControl1.Perform(WM_LBUTTONUP, 0);
|  |   Вопрос задал: YPCom (статус: Посетитель)Вопрос отправлен: 6 января 2009, 12:39
 Состояние вопроса: открыт, ответов: 1.
 |  Ответ #1. Отвечает эксперт: Пупкин В.В. Не проще сделать так:
 TabControl1.TabIndex:=0;
 
|  | Ответ отправил: Пупкин В.В. (статус: 1-ый класс)Время отправки: 6 января 2009, 12:55
 
 |  
 Мини-форум вопросаВсего сообщений: 5; последнее сообщение — 6 января 2009, 13:33; участников в обсуждении: 2. 
|   | YPCom (статус: Посетитель), 6 января 2009, 13:08 [#1]:Не подходит. Вкладка выбирается первая, но цвет шрифта на ней не меняется (http://www.delphikingdom.com/asp/answer.asp?IDAnswer=67681). |  
|   | YPCom (статус: Посетитель), 6 января 2009, 13:14 [#2]:Нужно как-то так TabControl1.OnChange ... и на первую вкладку |  
|   | Пупкин В.В. (статус: 1-ый класс), 6 января 2009, 13:18 [#3]:Принципиальное отличие его от PageControl заключается в том, что TabControl не имеет множества панелей (страниц). Компонент представляет собой одну страницу с управляющим элементом типа кнопки со многими положениями. И надо написать соответствующие обработчики событий OnChanging и OnChange, чтобы определить, что именно должно происходить на панели при переключениях закладок пользователем. 
 а ваш вопрос-программно перейти на первую вкладку в TabControl
 пожалуйста задавайте корректно вопрос, бо какой вопрос такой ответ =)
 |  
|   | YPCom (статус: Посетитель), 6 января 2009, 13:32 [#4]:Есть панель TabControl. Закладки создаются при запуске программы автоматически и заполняются именами Папок (тематических). При выборе закладки в ListBox заносятся названия папок (которые находятся внутри тематической). При выборе закладки цвет ее шрифта меняется, а ListBox заполняется именами папок. Нужно, чтобы при запуске программы была открыта первая закладка (и выделена цветом), а в ListBox занесены имена папок и выбрана первая папка. |  
|   | YPCom (статус: Посетитель), 6 января 2009, 13:33 [#5]:unit Unit1; 
 interface
 
 uses // Использование
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, ComCtrls, OleCtrls, SHDocVw, ShellAPI, ActiveX, ExtCtrls,
 XPMan;
 
 type // Тип
 TForm1 = class(TForm)
 TabControl1: TTabControl;
 ListBox1: TListBox;
 WebBrowser1: TWebBrowser;
 Button1: TButton;
 Panel1: TPanel;
 Panel2: TPanel;
 Panel3: TPanel;
 Panel4: TPanel;
 Panel5: TPanel;
 Panel6: TPanel;
 XPManifest1: TXPManifest;
 procedure TabControl1DrawTab(Control: TCustomTabControl; TabIndex: Integer;
 const Rect: TRect; Active: Boolean);
 procedure Button1Click(Sender: TObject);
 procedure findaddress;
 procedure ListBox1Click(Sender: TObject);
 procedure TabControl1Change(Sender: TObject);
 procedure FormActivate(Sender: TObject);
 procedure WebBrowser1NavigateComplete2(ASender: TObject;
 const pDisp: IDispatch; var URL: OleVariant);
 procedure noscroll;
 
 private
 { Private declarations }
 public
 { Public declarations }
 end;
 
 var
 SaveMessageHandler,MyMessageHandler: TMessageEvent;  // Надо для возможности копирования из TWebBrowser
 Form1: TForm1; // Надо для возможности копирования из TWebBrowser
 dir:string; URLs:string;
 
 implementation
 
 {$R *.dfm}
 {$R nodescription.RES}
 
 
 
 procedure TForm1.FormActivate(Sender: TObject); // При активации формы
 var
 srSearch: TSearchRec;
 path: string;
 begin
 SaveMessageHandler := Application.OnMessage; // Надо для возможности копирования из TWebBrowser
 Application.OnMessage := MyMessageHandler;   // Надо для возможности копирования из TWebBrowser
 WebBrowser1.Navigate('about:blank'); // Инициализируем пустой документ в TWebBrowser
 GetDir(0, dir); // Считываем текущий каталог
 if FindFirst(dir + '\*' , faDirectory, srSearch) = 0 then // Ищем в нем каталоги
 repeat
 if ((srSearch.Attr and faDirectory) = faDirectory) and
 (srSearch.Name <> '.') and
 (srSearch.Name <> '..') then // Исключаем пустые строки как в проводнике
 begin
 TabControl1.Tabs.Add(srSearch.Name); // Заполняем TabControl именами корневых каталогов
 TabControl1.TabIndex:=0;
 end;
 until (FindNext(srSearch) <> 0);
 FindClose(srSearch); // Завершаем поиск
 begin
 ListBox1.Clear; // Очищаем ListBox
 TabControl1.TabIndex:= 0; // Переходим на 1-ю вкладку в TabControl
 path:= dir + '\' + TabControl1.Tabs.Strings[0]; // Считываем каталог с 1-й вкладки
 if FindFirst(path + '\*' , faDirectory, srSearch) = 0 then // Ищем в нем каталоги
 repeat
 if ((srSearch.Attr and faDirectory) = faDirectory) and
 (srSearch.Name <> '.') and
 (srSearch.Name <> '..') then  // Исключаем пустые строки как в проводнике
 begin
 ListBox1.Items.Add(srSearch.Name); // Заполняем ListBox именами каталогов
 end;
 until (FindNext(srSearch) <> 0);
 FindClose(srSearch); // Завершаем поиск
 end;
 SendMessage(ListBox1.Handle, LB_SETCURSEL, 0{порядковый номер строки}, 0); // Программно выбираем 1-ю строку в ListBOX
 ListBox1.Perform(WM_LBUTTONDOWN, 0, 0);
 ListBox1.Perform(WM_LBUTTONUP, 0, 0); // Программно имитируем щелчок по выбранной строке в ListBox
 end;
 
 
 
 procedure TForm1.ListBox1Click(Sender: TObject); // Щелчок по ListBox
 var
 i, MaxWidth: integer; // Для гориз. прокрутки в ListBox
 begin
 GetDir(0, dir); // Считываем текущий каталог
 URLs:= dir + '\' + TabControl1.Tabs.Strings[TabControl1.TabIndex] + '\' + ListBox1.Items.Strings[ListBox1.ItemIndex] + '\' + '9.mht';
 // Путь к файлу с описанием
 if fileexists(URLs) then findaddress // Если файл существует, то показываем его
 else // Иначе показываем 'Описание отсутствует' из ресурса
 begin
 URLs:='';
 if URLs='' then WebBrowser1.Navigate('res://' + Application.ExeName + '/HTML/nodescription')
 else findaddress;
 end;
 MaxWidth := 0; // Далее для гориз. прокрутки в ListBox, если назв. не умещается
 for i := 0 to LIstBox1.Items.Count - 1 do
 if MaxWidth < LIstBox1.Canvas.TextWidth(LIstBox1.Items.Strings[i]) then
 MaxWidth := LIstBox1.Canvas.TextWidth(LIstBox1.Items.Strings[i]);
 SendMessage(LIstBox1.Handle, LB_SETHORIZONTALEXTENT, (Round(MaxWidth * 1.35) + 2), 0);
 end;
 
 procedure TForm1.Button1Click(Sender: TObject); // Щелчок по кнопке "Обзор"
 begin
 try
 ShellExecute(Handle, 'open', PChar(dir + '\' + TabControl1.Tabs.Strings[TabControl1.TabIndex] + '\' + ListBox1.Items.Strings[ListBox1.ItemIndex]), nil, nil, SW_SHOWNORMAL);
 // Если такой папки нет, то открываем тематическую
 except
 ShellExecute(Handle, 'open', PChar(dir + '\' + TabControl1.Tabs.Strings[TabControl1.TabIndex]), nil, nil, SW_SHOWNORMAL);
 end;
 end;
 
 procedure TForm1.findaddress;  // Открываем найденный файл в WebBrowser
 var
 Flags: OLEVariant;
 begin
 Flags := 0;
 WebBrowser1.Navigate(WideString(URLs), Flags, Flags, Flags, Flags);
 end;
 
 procedure TForm1.TabControl1Change(Sender: TObject); // При переходе на другую вкладку
 var
 srSearch: TSearchRec;
 dir_temp: string;
 begin
 WebBrowser1.Navigate('about:blank'); // Инициализируем пустой документ в TWebBrowser
 listBox1.Clear;
 GetDir(0, dir); // Считываем текущий каталог
 dir_temp:= dir + '\' + TabControl1.Tabs.Strings[TabControl1.TabIndex]; // Находим в нем нужный каталог
 if FindFirst(dir_temp + '\*' , faDirectory, srSearch) = 0 then // Ищем в нем каталоги
 repeat
 if ((srSearch.Attr and faDirectory) = faDirectory) and
 (srSearch.Name <> '.') and
 (srSearch.Name <> '..') then // Исключаем пустые строки как в проводнике
 begin
 ListBox1.Items.Add(srSearch.Name); // Заполняем ListBox
 end;
 until (FindNext(srSearch) <> 0);
 FindClose(srSearch); // Заканчиваем поиск
 SendMessage(ListBox1.Handle, LB_SETCURSEL, 0{порядковый номер строки}, 0); // Программно выбираем 1-ю строку в ListBOX
 ListBox1.Perform(WM_LBUTTONDOWN, 0, 0);
 ListBox1.Perform(WM_LBUTTONUP, 0, 0); // Программно имитируем щелчок по выбранной строке в ListBox
 end;
 
 procedure TForm1.TabControl1DrawTab(Control: TCustomTabControl;
 TabIndex: Integer; const Rect: TRect; Active: Boolean);
 var
 R:TRect;
 Pt:TPoint;
 begin
 R:=Rect;
 SetTextColor(Control.Canvas.Handle,clBlack);
 GetCursorPos(Pt);
 Pt:=TabControl1.ScreenToClient(Pt);
 if  PtInRect(R,Pt) then SetTextColor(Control.Canvas.Handle,clBlue)
 else SetTextColor(Control.Canvas.Handle,clBlack);
 DrawText(Control.Canvas.Handle,PChar((Control as TTabControl).Tabs[TabIndex]),
 Length((Control as TTabControl).Tabs[TabIndex]),R,
 DT_SINGLELINE or DT_CENTER or DT_VCENTER);
 end;
 
 procedure TForm1.WebBrowser1NavigateComplete2(ASender: TObject; // Скрытие скролла в WebBrowser для нулевого URL
 const pDisp: IDispatch; var URL: OleVariant);
 begin
 if URLs='' then noscroll;
 end;
 
 procedure TForm1.noscroll; // Скрытие скролла в WebBrowser
 begin
 WebBrowser1.OleObject.Document.Body.Style.OverflowX := 'hidden';
 WebBrowser1.OleObject.Document.Body.Style.OverflowY := 'hidden';
 end;
 
 initialization
 OleInitialize(nil); // Надо для возможности копирования из TWebBrowser
 
 finalization
 OleUninitialize; // Надо для возможности копирования из TWebBrowser
 
 end.
 |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |