On-line: гостей 1. Всего: 1 [подробнее..]
АвторСообщение
постоянный участник




Пост N: 284
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 27.06.07 23:57. Заголовок: Работа мышки с GET'от


Всем привет.
Подскажите пожалуйста код для реализации простого GETa с мышкой, типа
ввести кол-во метров и 2 кнопок "Ок" и "Отмена", чтоб если мышкой нажимаешь на кнопке "Ок" - это значит нажата клавиша "ENTER", а если "отмена" - то клавиша "ESC".
Можно было бы написать свою функцию обработки этой реализации, но хочется сделать проще, тем более в Клипере 5.3 такие вещи делались с помощью генератора форм.
Извиняюсь за ламерский вопрос, но может кто подскажет более правильное решение, чем я знаю.
Заранее спасибо.

Спасибо: 0 
Профиль
Ответов - 12 [только новые]


постоянный участник




Пост N: 286
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 12.07.07 23:28. Заголовок: Re:


Ну народ, вообще ...
На простой вопрос ответить не могут.
Делать свой обработчик или есть стандартный ?

Спасибо: 0 
Профиль
Администратор




Пост N: 536
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 14.07.07 11:37. Заголовок: Re:


Дык так же как и в 5.3

#include "inkey.ch"

func main
Local cc := space(20), lCancel := .f., lOk := .f.

SET( _SET_EVENTMASK, INKEY_ALL )

cls
@ 3, 10 say '' get cc
@ 5, 10 GET lOk PUSHBUTTON ;
CAPTION "&Ok" ;
STATE { || ReadKill( .T. ) }
@ 5, 20 GET lCancel PUSHBUTTON ;
CAPTION "&Cancel" ;
STATE { || ReadKill( .T. ) }
read
return nil


Спасибо: 0 
Профиль
постоянный участник




Пост N: 287
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 15.07.07 10:37. Заголовок: Re:


Паша, спасибо большое.
Чувствуется рука мастера.

Спасибо: 0 
Профиль
постоянный участник




Пост N: 288
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 17.07.07 23:06. Заголовок: Re:


Паша, фигня получается.
Если клавишами пользоваться, то все нормально завершается.
А если мышкой, то вылетает с какой-то системной ошибкой:

+++++++++++++++++ Internal Error Handling Information +++++++++++++++++

Subsystem Call ..: BASE
System Code .....: 1604
Default Status ..: False
Description .....: Argument error
Operation .......: SWITCH
Arguments .......: [ 1] = Type: U
Involved File ...:
Dos Error Code ..: 0

Trace Through:
----------------
HBGETLIST:SETTLE : 778 in Module: tgetlist.prg
READMODAL : 144 in Module: getsys.prg
MAIN : 19 in Module: mouse-get.prg

-------------------------------------------------------------------------------------------------
Operating System : Windows XP Professional 5.01.2600 Service Pack 2
Compiler : Borland C++ 5.5.1
xHarbour Version : xHarbour build 0.99.70 Intl. (SimpLex)
Build Date : Dec 15 2006 09:38:44


Что делать ?

Спасибо: 0 
Профиль
Администратор




Пост N: 547
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 18.07.07 08:07. Заголовок: Re:


Перейти на текущую версию xHb с CVS
Сейчас этой ошибки нет, она была в релизе

Спасибо: 0 
Профиль
постоянный участник




Пост N: 289
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 21.07.07 00:43. Заголовок: Re:


Скачал xHarbour build 0.99.71 и заработало.

Теперь другая непонятка, после READ запрашиваем
? lCancel, lOk

и они обе возвращают всегда .F.

а как тогда определить какая кнопка была нажата ?



Спасибо: 0 
Профиль
постоянный участник




Пост N: 299
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 25.07.07 22:22. Заголовок: Re:


Паша помоги, а то юзера не знают какую кнопку нажимать....

Спасибо: 0 
Профиль
постоянный участник


Пост N: 186
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 26.07.07 08:28. Заголовок: Re:


Andrey пишет:

 цитата:
а то юзера не знают какую кнопку нажимать....




У тебя какие-то исключительные юзера.
Они сами, наверное, обработку событий пишут, ну правильно, а зачем программера мучить.
Я б на твоем месте заставил их еще доку читать - почти целый месяц ( 28.06.07 ) разобраться не могут на какую кнопку нажимать..

#include "inkey.ch"
#include "getexit.ch"

func main
Local cc := space(20), lCancel := .t., lOk := .t.

SET( _SET_EVENTMASK, INKEY_ALL )

cls
@ 3, 10 say '' get cc
@ 5, 10 GET lOk PUSHBUTTON ;
CAPTION "&Ok" ;
STATE { || GetActive():exitState := GE_WRITE }

@ 5, 20 GET lCancel PUSHBUTTON ;
CAPTION "&Cancel" ;
STATE { || GetActive():exitState := GE_ESCAPE }
read

? lCancel, lOk

return nil






Спасибо: 0 
Профиль
постоянный участник




Пост N: 302
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 26.07.07 23:08. Заголовок: Re:


Да, Петр, юзвера у меня действительно странныеееее...

Кнопки на экране есть, они тыкают туды - и не фига не происходит.
Я сказал им что мышка не работает, ждите , поменяю.

Теперь можно будет и подключить кнопочки.

Спасибо большое и от себя и от них !


Спасибо: 0 
Профиль
постоянный участник


Пост N: 190
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 27.07.07 00:21. Заголовок: Re:


Andrey,

Лично я слепо не ориентировался б на значения lCancel, lOk.
Указанный код не всегда будет возвращать корректные результаты ( с точки зрения юзера конечно ).
Не вникая в подробности:
Случай первый.
Пользователь выбирает мышкой кнопку lCancel. Потом, что-то подумав, производит двойной щелчок по lOk (или наоборот).
Случай второй
тот же пользователь жмет одну из клавиш Esc, Down-Up (ReadExit() == .T. ), Return, Page Down, Page Up или Ctrl+W

Mожно поступить, к примеру, так

#include "inkey.ch"
#include "getexit.ch"

func main
Local cc := space(20), lCancel := .t., lOk := .t.
Local nExitState := GE_ESCAPE

SET( _SET_EVENTMASK, INKEY_ALL )

cls
@ 3, 10 say '' get cc
@ 5, 10 GET lOk PUSHBUTTON ;
CAPTION "&Ok" ;
STATE { || GetActive():exitState := GE_WRITE } ;
WHEN { || nExitState := GE_WRITE, .t. }

@ 5, 20 GET lCancel PUSHBUTTON ;
CAPTION "&Cancel" ;
STATE { || GetActive():exitState := GE_ESCAPE } ;
WHEN { || nExitState := GE_ESCAPE, .t. }

read

? lCancel, lOk, nExitState, LastKey()

return nil

и плясать исходя из значения nExitState и значения возвращаемого функцией LastKey().


Спасибо: 0 
Профиль
постоянный участник




Пост N: 324
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.08.07 12:08. Заголовок: Re:


Пишу теперь по схожему вопросу.
В исходнике(внизу) не могу определить какая кнопка нажата.
Подправте исходник пожалуйста !!!
Заранее спасибо.

/***************************************************************************
* Модуль : проба
* Автор/Дата : Верченко А.Г. 20-08-07 30195@mail.ru
* Назначение : радиокнопка и радиогруппа
****************************************************************************/
#include 'inkey.ch'
#include "getexit.ch"
//
FUNCTION MAIN ()
LOCAL nVar := 1, lButton0, lButton1, lButton2, lButton3, lQuit := .T.
LOCAL aGroup := { } , GetList := { }
LOCAL cButtonClr := "15/3,0/12,4/15,12/3"
LOCAL nExitState := GE_ESCAPE

CLEAR SCREEN
//подключаем мышку
SET( _SET_EVENTMASK, INKEY_ALL )
SETCOLOR( "1/15,0/15,1/15,4/15,5/15,3/1,10/1,1/2" )
@ 0,0 SAY " ESC-выход "

AADD( aGroup, RADIOBUTTON( 11, 11, '&Выбор1', '1111' ) )
AADD( aGroup, RADIOBUTTON( 12, 11, 'В&ыбор2', '2222' ) )
AADD( aGroup, RADIOBUTTON( 13, 11, 'Вы&бор3', '3222' ) )
AADD( aGroup, RADIOBUTTON( 14, 11, 'Выб&ор4', '4444' ) )

DO WHILE lQuit

@ 10, 10, 15, 30 GET nVar RADIOGROUP aGroup MESSAGE 'Ваш выбор'

@ 21, 12 GET lButton0 PUSHBUTTON CAPTION ' &Просмотр ' ;
MESSAGE 'Просмотреть форму' ;
STATE { || GetActive():exitState := GE_WRITE } ;
WHEN { || nExitState := GE_WRITE, .t. } ;
COLOR cButtonClr

@ 21, 29 GET lButton1 PUSHBUTTON CAPTION ' &Печать ' ;
MESSAGE 'Приступить к формированию отчета' ;
STATE { || GetActive():exitState := GE_WRITE } ;
WHEN { || nExitState := GE_WRITE, .t. } ;
COLOR cButtonClr

@ 21, 44 GET lButton2 PUSHBUTTON CAPTION ' &Шаблон ' ;
MESSAGE 'Редактирование шаблона отчета' ;
STATE { || GetActive():exitState := GE_WRITE } ;
WHEN { || nExitState := GE_WRITE, .t. } ;
COLOR cButtonClr

@ 21, 59 GET lButton3 PUSHBUTTON CAPTION ' &Выход ' ;
MESSAGE 'Выход' ;
STATE { || GetActive():exitState := GE_ESCAPE } ;
WHEN { || nExitState := GE_ESCAPE, .t. } ;
COLOR cButtonClr

READ MSG At 23, 10, 70 MSG COLOR '4/15'

//возвращается номер элемента массива на котором был сделан
@ MAXROW()-2, 0 SAY ""
? nVar, lButton0, lButton1, lButton2, lButton3
? nExitState, LastKey()

IF LASTKEY() == K_ESC
lQuit := .F.
ENDIF

ENDDO

RETURN NIL
// End of Function



Спасибо: 0 
Профиль
постоянный участник


Пост N: 203
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 25.08.07 22:28. Заголовок: Re:


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

#define GE_PRINT
#define GE_PREVIEW
..
@ 21, 12 GET lButton0 PUSHBUTTON CAPTION ' &Просмотр ' ;
MESSAGE 'Просмотреть форму' ;
STATE { || GetActive():exitState := GE_WRITE } ;
WHEN { || nExitState := GE_PREVIEW, .t. }




Спасибо: 0 
Профиль
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 105
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет