Не понятные вещи с TabControl.(Решено)

Вопросы программирования и использования среды Lazarus.

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

Не понятные вещи с TabControl.(Решено)

Сообщение pro_berserk » 19.11.2013 04:32:15

Доброго времени суток, подобные темы уже создавались на форуме, но поиск по ним к сожалению не дал мне ответов на мои вопросы.
Использую Lazarus 1.0.12 и fpc 2.6.2 под Win 7 x64 хотя все тоже самое и под Win XP x86.
Для создания приложения пришлось использовать TabControl, поскольку нужны только вкладки (без страниц) и их динамическое создание(сохранение) и удаление в программе.
Все выше сказанное нормально работает, но мне понадобилось открывать вкладки при нажатии правой кнопки мыши решил как и большинство использовать виртуальное нажатие левой кнопки, но не тут то было такое ощущение что TabControl полностью игнорирует нажатие на правую кнопку но при этом PopUp работает...
Код: Выделить всё
procedure TForm1.TabControl1MouseDown(Sender...);
begin
  if Button=mbRight then
  begin
    //Любой код... ни какой реакции вообще
  end;
end;

В следствии возникли вопросовы: Помогите пожалуйста разобраться...
1. Выше сказанное это глюк TabControl или у меня сборка Lazarus'а глючная просто?
2. По поводу вирутуального нажатия на кнопку мыши, если использовать Mouse_Event пропадает кроссплатформенность, каким образом можно это еще реализовать?
Код: Выделить всё

mouse_event(MOUSEEVENTF_LEFTDOWN,X,Y,0,0);
mouse_event(MOUSEEVENTF_LEFTUP,X,Y,0,0);

3. При наведдении на TabControl вкладки подсвечиваются каким образом можно получить Index подсвеченного Tab'а, что бы передать его например в PopUp?
Прошу меня извинить за мою наглость конечно, но 3 дня поиска в инете не дали желаемых результатов, буду очень благодарен за помощь...
Последний раз редактировалось pro_berserk 23.11.2013 17:42:17, всего редактировалось 1 раз.
pro_berserk
новенький
 
Сообщения: 21
Зарегистрирован: 05.11.2013 14:02:33

Re: Не понятные вещи с TabControl.

Сообщение Zak » 19.11.2013 10:10:13

1. не знаю как TabControl, а на PageControl всё это будет работать (имеется ввиду OnMousDown)
кстати проверил TabControl на Win7 x32, Lazarus 1.3, PFC 2.6.2 не работает onmousedown. точнее работает, но не на самих вкладках, а на самой странице вкладки.

3. если бы работало по событию OnMouseDown, возможно получить так
Код: Выделить всё
tabcontrol.IndexOfTabAt(x, y);
теоретически думается что и на событие OnMouseEnter тот же принцип.

если просто получить индекс текущей вкладки, то наверное
Код: Выделить всё
tabcontrol.tabindex
Zak
новенький
 
Сообщения: 31
Зарегистрирован: 16.06.2013 07:24:39
Откуда: морозная Сибирь

Re: Не понятные вещи с TabControl.

Сообщение zoltanleo » 19.11.2013 10:33:51

Код: Выделить всё
uses
... LCLIntf, LCLType ...

procedure TForm1.TabControl1MouseDown(Sender...);
begin
  if GetKeyState(VK_RBUTTON) < 0 then
  begin
    //Любой код...
  end;
end;
Аватара пользователя
zoltanleo
постоялец
 
Сообщения: 459
Зарегистрирован: 17.10.2013 10:55:01

Re: Не понятные вещи с TabControl.

Сообщение pro_berserk » 19.11.2013 13:35:24

Zak писал(а):
Код: Выделить всё
tabcontrol.IndexOfTabAt(x, y);
теоретически думается что и на событие OnMouseEnter тот же принцип.

Zak, Спасибо большое буду теперь знать, хоть и не помогло Мне т.к.TabControl мертв не реагирует даже на OnMouseMove...
tabcontrol.tabindex - спасибо, про текущую вкладку я в курсе, но в том то и суть что она мне не нужна...
zoltanleo писал(а):
Код: Выделить всё
begin
  if GetKeyState(VK_RBUTTON) < 0 then
  begin
    //Любой код...
  end;

Спасибо за совет, я так пологаю это тоже самое что и...
Код: Выделить всё
if Button=mbRight then
begin
//
end;           

Но увы TabControl и здесь не реагирует ни как :(...
Вывод: В топку TabControl уж много в нем глюков, тогда подскажите пожалуйста какой нибудь компонент по типу TabControl, с учетом того что мне нужны только вкладки от него, а страницы я не собираюсь использовать и еще Tab'ы я сохраняю в ini и загружаю от туда же, PageControl мне не подошел сразу...
Заранее спасибо... :)
pro_berserk
новенький
 
Сообщения: 21
Зарегистрирован: 05.11.2013 14:02:33

Re: Не понятные вещи с TabControl.

Сообщение zoltanleo » 19.11.2013 14:27:27

pro_berserk писал(а):Спасибо за совет, я так пологаю это тоже самое что и...

прежде, чем полагать, нужно пробовать. Я не выкладываю нерабочий код :x

pro_berserk писал(а):В топку TabControl уж много в нем глюков

вы напоминаете Незнайку из известной книжки Носова, когда первый пытался учиться чему-нибудь.

зы. если вы не слушаете советов, зачем вопрошать на форуме?
Аватара пользователя
zoltanleo
постоялец
 
Сообщения: 459
Зарегистрирован: 17.10.2013 10:55:01

Re: Не понятные вещи с TabControl.

Сообщение Zak » 19.11.2013 14:41:52

zoltanleo писал(а):CodeTyphon 4.5 x32
смею предположить, что в версии 4.5 всё работает, т.к. я проверил в 4.4. событие OnMouseDown вообще не возникает, ни на вкладках, ни на страницах этих вкладок. в лазаре хоть на страницах реагирует данное событие.
Может я какой-то параметр упустил, который отключает например "штатный" PopUp и передает бразды правления в личное пользование юзеру?

Добавлено спустя 19 минут 20 секунд:
pro_berserk писал(а):подскажите пожалуйста какой нибудь компонент по типу TabControl

не знаю как "по типу", но в CodeTyphon есть ORCA, возможно есть там что-то. Знаю что 100% там есть PageControl, пробовал его тут http://freepascal.ru/forum/viewtopic.php?f=5&t=9073&hilit=pagecontrol#p75605
его можно перенести в лазарь
Zak
новенький
 
Сообщения: 31
Зарегистрирован: 16.06.2013 07:24:39
Откуда: морозная Сибирь

Re: Не понятные вещи с TabControl.

Сообщение pro_berserk » 19.11.2013 15:05:55

zoltanleo писал(а):
pro_berserk писал(а):Спасибо за совет, я так пологаю это тоже самое что и...

прежде, чем полагать, нужно пробовать. Я не выкладываю нерабочий код :x

pro_berserk писал(а):В топку TabControl уж много в нем глюков

вы напоминаете Незнайку из известной книжки Носова, когда первый пытался учиться чему-нибудь.

зы. если вы не слушаете советов, зачем вопрошать на форуме?

Извиняюсь если не корректно выразился на ваш топик!
Но я естественно проверил этот код, по поводу "Полагаю" это скорее риторическое выражение, требующее более утверждения...
По большому счету то что вы предложили, просто использует другой класс, который ни коим разом не относится к событию OnMouseDown в TabControl, вот поэтому он у меня и не работает потому что TabControl глючный у меня...
P.S. Если бы я не слушал советов я бы и не отвечал на них разве не логично?
pro_berserk
новенький
 
Сообщения: 21
Зарегистрирован: 05.11.2013 14:02:33

Re: Не понятные вещи с TabControl.

Сообщение Zak » 19.11.2013 15:20:56

pro_berserk писал(а):поскольку нужны только вкладки (без страниц)

а может посмотреть в сторону RadioGroup c параметром расположения clVerticalThenHorizontal обычных кнопок TButton ?
вся эта группа ведет себя примерно как вкладки при добавлении новой кнопки, возможно придется контролировать ширину и т.п.
Zak
новенький
 
Сообщения: 31
Зарегистрирован: 16.06.2013 07:24:39
Откуда: морозная Сибирь

Re: Не понятные вещи с TabControl.

Сообщение pro_berserk » 19.11.2013 16:34:31

Zak писал(а):
pro_berserk писал(а):поскольку нужны только вкладки (без страниц)

а может посмотреть в сторону RadioGroup c параметром расположения clVerticalThenHorizontal обычных кнопок TButton ?
вся эта группа ведет себя примерно как вкладки при добавлении новой кнопки, возможно придется контролировать ширину и т.п.

Большое спасибо, за разнообразные советы очень благодарен, буду думать как поступить лучше, скорее всего пока сделаю с ограниченным функционалом...
Zak - Если будет желание не могли бы посмотреть (может какие идеи появятся)
TabControl.zip
вот накидал на скорую руку не полный пример того что я хочу сделать...
У вас нет необходимых прав для просмотра вложений в этом сообщении.
pro_berserk
новенький
 
Сообщения: 21
Зарегистрирован: 05.11.2013 14:02:33

Re: Не понятные вещи с TabControl.

Сообщение Zak » 19.11.2013 20:51:06

pro_berserk писал(а):может какие идеи появятся

просто не понятно, для чего нужны табы без страниц. если например воспринимать закладки как некие параметры для всего "одной" страницы расположенной "где-то", то не лучше ли отказаться от TabControl? например создать Panel или GroupBox в качестве страницы, а для "закладок" использовать что-то другое?
посмотрите, добавил в ваш пример работу с PageControl, может и пригодиться.

из "неполного" примера не понятно что необходимо. вы бы написали что хотите получить, какова задача?
понятно только то, что вы хотите использовать загрузку/выгрузку вкладок (возможно это некие параметры)
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Zak
новенький
 
Сообщения: 31
Зарегистрирован: 16.06.2013 07:24:39
Откуда: морозная Сибирь

Re: Не понятные вещи с TabControl.

Сообщение zoltanleo » 20.11.2013 00:19:58

pro_berserk писал(а):Но я естественно проверил этот код

Приношу свои извинения за резкость, только что проверил код на Лазаре - не работает! :shock:

Похоже, где-то в исходниках серьезный баг (сравнить с CT пока не могу - Лазарь портабельный, надо будет в виртуалке развернуть и вытащить). Но это чуть позже.
Аватара пользователя
zoltanleo
постоялец
 
Сообщения: 459
Зарегистрирован: 17.10.2013 10:55:01

Re: Не понятные вещи с TabControl.

Сообщение pro_berserk » 20.11.2013 02:31:06

Zak писал(а):посмотрите, добавил в ваш пример работу с PageControl, может и пригодиться.

Огромное спасибо за пример, не знаю почему я уперся в этот TabControl, надо было изначально разбираться с PageControl'ом и не парить ни кому мозги, возможно "смутило" само наличие различных страниц или то что с типом TStrings(вкладками) проще оперировать, сейчас сделаю проще - у PageControl'а скрою страницы и оставлю только вкладки а под него положу или Panel или GroupBox "не важно"...
Zak писал(а):из "неполного" примера не понятно что необходимо. вы бы написали что хотите получить, какова задача?
понятно только то, что вы хотите использовать загрузку/выгрузку вкладок (возможно это некие параметры)

Так и есть в прямом смысле каждая вкладка будет в себе хранить Параметры для SQL запроса. Примерно в таком виде:
Код: Выделить всё
SqlParamTab: array[0..30] of TStringList; //Хранит параметры, для разных вкладок обращаемся по Index'у вкладки...
SqlTab: TStringList; //Хранит Params для SQLQuery

Идея такова, на форме есть 1 BDGrid ну и наши вкладки :) конечно же, пользователь совершает различные операции с БД на уровне "Select'а..." (Фильтрацию, выборку, открытие различных таблиц ну т.д.) и для удобства для каждой новой задачи он может создать новую вкладку с разными параметрами и переключаясь между вкладками он по сути выполняет запросы с разными параметрами...
А загрузка/выгрузка вкладок нужна так сказать для реализации последней сессии или что то в этом роде...

zoltanleo писал(а):Приношу свои извинения за резкость, только что проверил код на Лазаре - не работает! :shock:

От части я и сам виноват, нужно более четко формулировать свои мысли :) А за помощь еще раз спасибо...
pro_berserk
новенький
 
Сообщения: 21
Зарегистрирован: 05.11.2013 14:02:33

Re: Не понятные вещи с TabControl.

Сообщение Zak » 20.11.2013 04:22:54

pro_berserk писал(а):скрою страницы и оставлю только вкладки
pro_berserk писал(а):создать новую вкладку с разными параметрами и переключаясь между вкладками он по сути выполняет запросы с разными параметрами...

тогда какой смысл скрывать страницы вкладок, когда можно прямо там организовать memo поле в котором будет возможность редактировать параметры запроса
и кнопочку "выполнить запрос" и т.п., наверное будет универсальней. тогда и панели не нужны, а просто полноценная работа с pagecontrol
Zak
новенький
 
Сообщения: 31
Зарегистрирован: 16.06.2013 07:24:39
Откуда: морозная Сибирь

Re: Не понятные вещи с TabControl.

Сообщение pro_berserk » 20.11.2013 05:19:46

Zak писал(а):тогда какой смысл скрывать страницы вкладок, когда можно прямо там организовать memo поле в котором будет возможность редактировать параметры запроса
и кнопочку "выполнить запрос" и т.п., наверное будет универсальней. тогда и панели не нужны, а просто полноценная работа с pagecontrol

Универсальность и не требуется, программой будут пользоваться простые пользователи на предприятии...
Смысл в том что пользователь не сам вводит параметры запроса, а при помощи интерфейса программы выбирает необходимые ему значения...
Предположим в БД есть таблица с "закупками на предприятии" пользователю необходимо узнать какие закупки были совершены в 1,2 и 4 квартале 2013 года если выполнить один такой запрос то в результате мы можем получить кучу информации с которой не очень удобно разбираться поэтому лучше её разбить, пользователь создает вкладку предположим с именем "1-Квартал" и при помощи не хитрых операций допустим в каком нибудь ComboBox выбирает нужный ему параметр(1,2,3,4 квартал) или при помощи DateEdit'ов выставляет временной интервал по которому сделать выборку из БД. Дальше создает последующие вкладки(2 квартал, Товары закупленные в бухгалтерию и т.д. и т.п.)...
Теперь у нас много вкладок с разными данными(параметрами), и информация на выходе в BDGrid'е более читаема и понятна для восприятия...
Но это уже совершенно другая история и ни как к моему вопросу не относится, еще раз большое спасибо за помощь, я узнал для себя много нового и полезного, вот только есть еще один вопрос, последний:
Как можно в PageControl допустим на 1 страницу закинуть Memo и в последующем этот же Memo при переключении вкладок был на всех страницах?
pro_berserk
новенький
 
Сообщения: 21
Зарегистрирован: 05.11.2013 14:02:33

Re: Не понятные вещи с TabControl.

Сообщение Zak » 22.11.2013 07:43:39

pro_berserk писал(а):Как можно в PageControl допустим на 1 страницу закинуть Memo и в последующем этот же Memo при переключении вкладок был на всех страницах?

наверное менять родителя у memo, например у PageControl в событии OnChange пишем:
Код: Выделить всё
memo1.Parent := (Sender as TPageControl).ActivePage;


не знаю насколько это будет для вас правильней, но мне кажется, что лучше всё-же использовать разные memo, т.е. для каждой страницы PageControl свой memo(запрос), наверное так логичней, хотя я целиком картины может и не понимаю

Добавлено спустя 3 минуты 25 секунд:
pro_berserk писал(а):SqlParamTab: array[0..30] of TStringList; //Хранит параметры, для разных вкладок обращаемся по Index'у вкладки...

и может лучше заюзать динамический список, чем ограниченный? :)
Zak
новенький
 
Сообщения: 31
Зарегистрирован: 16.06.2013 07:24:39
Откуда: морозная Сибирь

След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 229

Рейтинг@Mail.ru