Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.11.04;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.104 c
1-1187636613
EHOT
2007-08-20 23:03
2007.11.04
Master Boot Record


15-1191487519
Beginner3
2007-10-04 12:45
2007.11.04
Комплексные числа


2-1192189179
Tehnik(^____^)
2007-10-12 15:39
2007.11.04
Web Browser компонент


2-1192167883
kyn66
2007-10-12 09:44
2007.11.04
TRxDBLookupCombo вместе с MSSQL


15-1191237113
Суслик
2007-10-01 15:11
2007.11.04
Покритикуйте описание системных требований моего продукта





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский