Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.11.04;
Скачать: CL | DM;

Вниз

Tab Control -?   Найти похожие ветки 

 
TIF ©   (2007-09-15 13:21) [0]

Здравствуйте.

Вопрос такой: когда нажимаю TAB, то происходит фокусировка на Таб Контрол, и потом можно передвигаться по его вкладкам (с помоью "стрелка влево", "стрелка вправо"). Надо: как-то запретить такой переход, чтобы нельзя было с помощью клавиатуры переходить с одной вкладки на другую.

Пожалуйста, помогите, а то уже месяц бьюсь на этим, но никто не может ничего дельного сказать.


 
{RASkov} ©   (2007-09-15 14:05) [1]

> [0] TIF ©   (15.09.07 13:21)

Если я правильно понял, то можно так попробывать:

TForm1 = class(TForm)
   .....
   TabControl1: TTabControl;
   procedure FormCreate(Sender: TObject);
 private
   OldWndProc: TWndMethod;
   procedure NewWndProc(var Mes: TMessage);
 public
   { Public declarations }
 end;
................
procedure TForm1.FormCreate(Sender: TObject);
begin
 OldWndProc:=TabControl1.WindowProc;
 TabControl1.WindowProc:=NewWndProc;
end;

procedure TForm1.NewWndProc(var Mes: TMessage);
begin
 if Mes.Msg=WM_KEYDOWN then begin
  with TWMKey(Mes) do
  if (CharCode=VK_LEFT) or (TWMKey(Mes).CharCode=VK_RIGHT) then CharCode:=0 else OldWndProc(Mes);
 end else OldWndProc(Mes);
end;


 
{RASkov} ©   (2007-09-15 14:07) [2]

>  with TWMKey(Mes) do
>  if (CharCode=VK_LEFT) or (TWMKey(Mes).CharCode=VK_RIGHT)
> then CharCode:=0 else OldWndProc(Mes);

ошибки нет, но забыл убрать :)
 with TWMKey(Mes) do
  if (CharCode=VK_LEFT) or (CharCode=VK_RIGHT) then CharCode:=0 else OldWndProc(Mes);


 
{RASkov} ©   (2007-09-15 14:22) [3]

Неее [1] не верно.... так как там вообще стрелки вправо-влево запрещаются во всем ТабКонтроле...)


 
{RASkov} ©   (2007-09-15 14:25) [4]

Хм... Впрочем, сейчас проверил.... нормально вроде....
хотя фик знает как там нужно автору :)


 
TIF ©   (2007-09-28 14:10) [5]

СПАСИБО! Этот способ работает, но возник ещё нюанс:

переход по вкладкам осуществляется при нажатии ctrl+tab и ctrl+tab+shift.

Хорошо бы заблокировтаь и их...


 
clickmaker ©   (2007-09-28 14:45) [6]

TCS_FOCUSNEVER ?


 
Германн ©   (2007-09-28 15:20) [7]


> Пожалуйста, помогите, а то уже месяц бьюсь на этим

И стоило ли целый месяц так извращаться над стандартным поведением стандартного компонента?


 
TIF ©   (2007-09-29 15:25) [8]


> TCS_FOCUSNEVER ?


а как это отслеживать?


 
TIF ©   (2007-10-02 10:53) [9]

не понял, как это можно отслеживать...


 
clickmaker ©   (2007-10-02 11:15) [10]


> [9] TIF ©   (02.10.07 10:53)

это не нужно отслеживать.
Это стиль окна

const
 TCS_FOCUSNEVER = $8000;

 SetWindowLong(PageControl1.Handle, GWL_STYLE,
   GetWindowLong(PageControl1.Handle, GWL_STYLE) or TCS_FOCUSNEVER);


 
ASoft   (2007-10-02 13:00) [11]


> TIF ©   (15.09.07 13:21)

может вам нужен просто запрет выбора другой закладки при определенном условии?
Действительно [7], зачем так извращаться...:)


 
TIF ©   (2007-10-02 16:24) [12]


> может вам нужен просто запрет выбора другой закладки при
> определенном условии?


Вкладки закрыты (накрыты поверх) панелью, т.е. они невидимы, и щёлкать по ним нельзя, но мне нужно ещё запретить переход по вкладкам с помощью клавиатуры


 
clickmaker ©   (2007-10-02 16:29) [13]


> [12] TIF ©   (02.10.07 16:24)

так а почему бы TabVisible = false не сделать?


 
TIF ©   (2007-10-11 14:59) [14]


> так а почему бы TabVisible = false не сделать?


а прикол в том, что вкладок будет, например, 50 или больше. Придётся тогда прописывать визибл для каждой, а это просто ужас...

можно, конечно, выполнить поиск всех вкладок, но этот способ менее рациональный и будет выполняться много раз при работе с программой, а мне нужна блокировка, которая сработает лишь тогда, когда юзер попытается выполнить "незаконную" операцию, т.е. перейти на следующую вкладку. Если попыток не будет, то эта процедура вообще не выполнится.


 
Игорь Шевченко ©   (2007-10-11 15:08) [15]


> когда юзер попытается выполнить "незаконную" операцию, т.
> е. перейти на следующую вкладку


может не мучить пользователя и использовать вместо таб-контрола что-то другое ?


 
Dennis I. Komarov ©   (2007-10-11 15:12) [16]

if not HaveRights(User) then .....Enable:=false; И все тут :)


 
ASoft   (2007-10-11 15:15) [17]


TIF ©   (11.10.07 14:59) [14]
> а мне нужна блокировка, которая сработает лишь тогда, когда
> юзер попытается выполнить "незаконную" операцию, т.е. перейти
> на следующую вкладку.

ну, может тогда OnChanging(Sender: TObject; var AllowChange: Boolean) подойдет?
> юзер попытается выполнить "незаконную" операцию
AllowChange:=False;


 
TIF ©   (2007-10-12 12:08) [18]


> может не мучить пользователя и использовать вместо таб-контрола
> что-то другое ?


хотелось бы, но что можете предложить?


 
Игорь Шевченко ©   (2007-10-12 12:24) [19]


> хотелось бы, но что можете предложить?


Могу предложить внятно описать задание


 
TIF ©   (2007-10-13 15:26) [20]


> Могу предложить внятно описать задание


я уж старался, описал по-моему очень понятно. я уж всё равно решение нашёл :-)


 
TIF ©   (2007-10-15 11:52) [21]


> я уж всё равно решение нашёл :-)


вроде :-)



Страницы: 1 вся ветка

Текущий архив: 2007.11.04;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.02 c
15-1191147175
opa4ki2
2007-09-30 14:12
2007.11.04
Прозрачный scrollbox


2-1192282342
AlexanderMS
2007-10-13 17:32
2007.11.04
Узнать, запущен ли Word.


11-1175322891
Trible
2007-03-31 10:34
2007.11.04
Содержимое RichEdit


2-1191935983
Мурзик
2007-10-09 17:19
2007.11.04
Как убрать точку


15-1190289015
de.
2007-09-20 15:50
2007.11.04
Кто программирует под Linux? Отзовитесь !!!