Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Как wm_char в в datawindow / 19 сообщений из 19, страница 1 из 1
15.09.2004, 16:37
    #32696103
NewOne
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как wm_char в в datawindow
Привет!

Проблема следующая - есть datawindow где ни одно из полей не принимает фокус ввода (taborder = 0), а в pbm_dwnkey производятся некоторые действия, типа if keyflag = 2 and key = KeyA! then of_selectall() .

При этом, мне не совсем понятно как отреагировать на нажатие клавиши, приведшее к "вводу", скажем, буквы 'ы'?

Замапил wm_keyup и wm_keydown. Смотрю на message.wordparm по совету Филиппа. Он принимает одинаковое значение при нажатии ':' и 'ж' (virtual key code ?). Замапить pbm_char что-то не получилось.

Буду благодарен за каждый дельный совет.
Версия билдера - 10.4500
...
Рейтинг: 0 / 0
15.09.2004, 16:42
    #32696122
NewOne
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как wm_char в в datawindow
subj следует читать:
как в datawindow эмулировать wm_key
...
Рейтинг: 0 / 0
15.09.2004, 17:55
    #32696319
NewOne
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как wm_char в в datawindow
Ни за что не поверю, что никто подобного не преодолевал! Если это FAQ или RTFM, то так и скажите, желательно с direction sign.

На самом деле нужна навигация по нередактируемому dw. Нажали 'Ж' - спозиционировались на 'Жмеринка'. Отвечаю на вопрос: "А что вы хотели на самом деле". ;-))
...
Рейтинг: 0 / 0
15.09.2004, 18:52
    #32696432
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как wm_char в в datawindow
Надо просто подумать :-)

1) wm_keydown не нужен вообще
2) Вот мой скрипт в подобном случае:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
 /*------------------------------------------------------------------------------
 Object:	dw_domain_select
 Event   :			ue_Keyup (pbm_keyup)
 Parameters:      keycode key
                  unsignedlong keyflags
 Returns:         long

 Copyright © 1999 BSR - Philip Salgannik
 Date Created: 03/22/99

 Description:		Key Search: Scrolls to row based on key pressed by searching the column
						Searches for following key presses (A-Z, 0-9)

--------------------------------------------------------------------------------
 Modifications:
 Date            Author              Comments


------------------------------------------------------------------------------*/ 

long ll_row
integer li_key, li_temp, li_pos
string ls_column, ls_temp
boolean lb_same


// Get ASCII Value of Key Pressed
li_key = Message.WordParm


// Make sure letter is A-Z, a-z,  0 - 9 
IF ((li_key >  64 ) AND (li_key <  91 )) OR ((li_key >  47 ) AND (li_key <  58 )) THEN 

		
	// If user already hit this key 
	// move to next row with same letter
	lb_same = (li_key = ii_last_key)
	IF lb_same THEN
		ll_row=this.GetRow() +  1  
	ELSE 
		ll_row= 1  
	END IF 
	
	ls_temp="ASC(UPPER(LEFT(list,1)))= " + String(li_key)
	ll_row = this.Find(ls_temp, ll_row, this.RowCount())
	
	IF ll_row >  0  THEN 
		this.ScrollToRow(ll_row)
		this.SetRow(ll_row)
	ELSE
		IF lb_same THEN //cycle thru entries starting with the key user pressed
			ll_row = this.Find(ls_temp,  1 , this.RowCount())
			IF ll_row >  0  THEN 
				this.ScrollToRow(ll_row)
				this.SetRow(ll_row)
			END IF
		END IF
	END IF
	
	ii_last_key = li_key

END IF

list - название колонки в которой поиск
ii_last_key (instance variable) - ASCII Value последней нажатой клавиши (после ретрива datawindow он приравнивается к ASCII Value первой буквы колонки list в первом ряду)

Это было с PFC, поэтому rowselection кода здесь нет...
...
Рейтинг: 0 / 0
15.09.2004, 19:19
    #32696510
NewOne
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как wm_char в в datawindow
ФилиппНадо просто подумать :-)

1) wm_keydown не нужен вообще

Про pbm_keydown это понятно, и было упомянуто в смысле "пробовал и то и это".

Насчёт "подумать"- не совсем понятно. Вопрос был не в том что делать с символом после его получения, а в том, как его правильно получить. Ответа не вижу. Как я уже говорил, pbm_keyup->message.wordparm не меняется при переключении imput language. Он одинаков для S и Ы, например (на русской клавиатуре). Если wm_keydown = pbm_keycode, то это virtual key code. Может надо применить MapVirtualKey?
...
Рейтинг: 0 / 0
15.09.2004, 19:55
    #32696558
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как wm_char в в datawindow
авторМожет надо применить MapVirtualKey?
Хрен его знает, т-рищ начальник, я только с английским языком работаю :-)
Но судя по всему, про Message.WordParm и ASC можно забыть ...
Может вообще GetKeyNameText пробовать? Тогда Message.LongParm пригодится...
...
Рейтинг: 0 / 0
15.09.2004, 20:01
    #32696566
NewOne
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как wm_char в в datawindow
Шутить изволите, батоно Филипп?
MSDNGetKeyNameText Function

--------------------------------------------------------------------------------

The GetKeyNameText function retrieves a string that represents the name of a key.

Syntax

int GetKeyNameText( LONG lParam,
LPTSTR lpString,
int nSize
);
Parameters

lParam
[in] Specifies the second parameter of the keyboard message (such as WM_KEYDOWN) to be processed. The function interprets the following bit positions in the lParam.
16—23
Scan code.
24
Extended-key flag. Distinguishes some keys on an enhanced keyboard.
25
"Don't care" bit. The application calling this function sets this bit to indicate that the function should not distinguish between left and right CTRL and SHIFT keys, for example.
lpString
[out] Pointer to a buffer that will receive the key name.
nSize
[in] Specifies the maximum length, in TCHAR, of the key name, including the terminating null character. (This parameter should be equal to the size of the buffer pointed to by the lpString parameter.)
Return Value

If the function succeeds, a null-terminated string is copied into the specified buffer, and the return value is the length of the string, in TCHAR, not counting the terminating null character.

If the function fails, the return value is zero. To get extended error information, call GetLastError.




Remarks

The format of the key-name string depends on the current keyboard layout. The keyboard driver maintains a list of names in the form of character strings for keys with names longer than a single character. The key name is translated according to the layout of the currently installed keyboard, thus the function may give different results for different input locales. The name of a character key is the character itself. The names of dead keys are spelled out in full.

Windows 95/98/Me: GetKeyNameTextW is supported by the Microsoft Layer for Unicode. To use this, you must add certain files to your application, as outlined in Microsoft Layer for Unicode on Windows 95/98/Me Systems.
...
Рейтинг: 0 / 0
15.09.2004, 20:53
    #32696605
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как wm_char в в datawindow
Никаких шуток

The format of the key-name string depends on the current keyboard layout. The keyboard driver maintains a list of names in the form of character strings for keys with names longer than a single character. The key name is translated according to the layout of the currently installed keyboard, thus the function may give different results for different input locales . The name of a c-h-a-r-a-c-t-e-r key is the c-h-a-r-a-c-t-e-r ITSELF .
...
Рейтинг: 0 / 0
16.09.2004, 11:42
    #32697247
Локшин Марк
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как wm_char в в datawindow
На моем сайте (о котором все уже давно знают :) ) lokshinmark.narod.ru есть библиотека VELM zip. http://lokshinmark.narod.ru/files/velm.zip
В ней есть User Object uo_dw_select_list. Посмотрите как там это обрабатываетсям.

PS. Что-то я с прошым постом натворил :)
To ASCRUS: можно его и удалить...
...
Рейтинг: 0 / 0
16.09.2004, 12:10
    #32697368
Ikar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как wm_char в в datawindow
Локшин МаркPS. Что-то я с прошым постом натворил :)
To ASCRUS: можно его и удалить...
Хоть я и не ASCRUS, но ... Удалено, в общем.
---
С уважением, IKAR

ikarhomecenter@narod.ru
IkarHomeCenter
...
Рейтинг: 0 / 0
16.09.2004, 12:43
    #32697481
NewOne
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как wm_char в в datawindow
Локшин МаркНа моем сайте (о котором все уже давно знают :) ) lokshinmark.narod.ru есть библиотека VELM zip. http://lokshinmark.narod.ru/files/velm.zip
В ней есть User Object uo_dw_select_list. Посмотрите как там это обрабатываетсям.

PS. Что-то я с прошым постом натворил :)
To ASCRUS: можно его и удалить...

Исходя из На моем сайте (о котором все уже давно знают :) ) всё-таки RTFM ... :-))
BTW, а что за сообщение 1349 (0x545) WM_USER+0x145 вы обрабатываете other?
...
Рейтинг: 0 / 0
16.09.2004, 17:14
    #32698401
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как wm_char в в datawindow
А может пойти типа "умный в гору не пойдёт" и засандалить SLE?
/topic/51539&hl=

http://www.justpbinfo.com/pbtips/dwscrollsearch.asp

http://www.justpbinfo.com/pbtips/dwscrollsearch2.asp
...
Рейтинг: 0 / 0
16.09.2004, 17:53
    #32698510
NewOne
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как wm_char в в datawindow
Muchas gracias, estimado Don Филипп!
Про гору вы абсолютно правы.
...
Рейтинг: 0 / 0
17.09.2004, 11:32
    #32699426
Локшин Марк
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как wm_char в в datawindow
NewOneПро гору вы абсолютно правы.
Ну не знаю, не знаю. Первоначально у меня поиск был примерно как в database painter'е при выборе таблиц устроен, но пользователи путались, и пришлось поиск переписывать. Так был добавлен вывод того, что печатается. Потом еще добавились кнопки для задания направления поиска. Мне кажется, что у меня, как минимум, не хуже. Но, наверное, кому как нравится.
...
Рейтинг: 0 / 0
17.09.2004, 15:19
    #32700046
NewOne
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как wm_char в в datawindow
2Марк
Про гору, это в более общем сысле Марк, не принимайте на свой счёт.

BTW, Вы ничего не ответили про сообщение, которое обрабатываете в other. Его десятичный номер 1349.
...
Рейтинг: 0 / 0
17.09.2004, 15:41
    #32700102
Локшин Марк
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как wm_char в в datawindow
NewOneBTW, Вы ничего не ответили про сообщение, которое обрабатываете в other. Его десятичный номер 1349.
Нашел экспериментально :)
...
Рейтинг: 0 / 0
17.09.2004, 20:29
    #32700571
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как wm_char в в datawindow
У меня например, даже не SLE, а datawindow userobject сделано, оно совмещает фильтрацию с поиском и просто шлепается на окна/таб страницы, где надо, выглядит так
...
Рейтинг: 0 / 0
17.09.2004, 20:45
    #32700580
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как wm_char в в datawindow
Сделано с datawindow в основном ради "подсказки" а-ля Windows - "Type to search by description...".
Dataobject имеет колонку description, её intial value - "Type to search by description...", и ещё 2 (или более) колонки - ="from_date", ="to_date"...
Instance variables:
Код: plaintext
1.
2.
3.
4.
CONSTANT string FROM_DATE ="from_date"
CONSTANT string TO_DATE ="to_date"
CONSTANT string SEARCH_AS_TYPE ="description"
protected:
boolean ib_description_modified
constructor:
Код: plaintext
InsertRow( 0 )
editchanged:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
 /*------------------------------------------------------------------------------

 Event   :			public u_cm_hierarchies_filter.Editchanged

 Returns:         Long

 Parameters:      value Long row
                  value DWObject dwo
                  value String data

 Copyright © 2002 DTI - Philip Salgannik

 Date Created: 7/2/2002

 Description:	Send UPPERED data entered to the parent
 
--------------------------------------------------------------------------------
 Modifications:
 Date            Author              Comments
------------------------------------------------------------------------------*/ 
string ls_data

IF row <  1  THEN RETURN

IF dwo.name = SEARCH_AS_TYPE THEN
	ls_data = Upper(Trim(data))
	IF IsNull(ls_data) THEN RETURN
	IF Len(ls_data) <  1  THEN RETURN
	parent.event dynamic ue_find_typed(ls_data)
END IF
itemchanged:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
 /*------------------------------------------------------------------------------

 Event   :			public u_cm_hierarchies_filter.Itemchanged

 Returns:         Long

 Parameters:      value Long row
                  value DWObject dwo
                  value String data

 Copyright © 2002 DTI - Philip Salgannik

 Date Created: 7/2/2002

 Description:	
 
--------------------------------------------------------------------------------
 Modifications:
 Date            Author              Comments
------------------------------------------------------------------------------*/ 
IF row <  1  THEN RETURN

IF dwo.name = SEARCH_AS_TYPE THEN RETURN //no filtering on this column

parent.event dynamic post ue_filter()
itemfocuschanged:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
 /*------------------------------------------------------------------------------

 Event   :			public u_cm_hierarchies_filter.Itemfocuschanged

 Returns:         Long

 Parameters:      value Long row
                  value DWObject dwo

 Copyright © 2002 DTI - Philip Salgannik

 Date Created: 7/3/2002

 Description:	remove the hint and change the color to black
 
--------------------------------------------------------------------------------
 Modifications:
 Date            Author              Comments
------------------------------------------------------------------------------*/ 

IF row <  1  THEN RETURN
IF dwo.name <> SEARCH_AS_TYPE THEN RETURN

IF NOT ib_description_modified THEN
	ib_description_modified  = NOT ib_description_modified 
	SetRedraw(FALSE)
	SetItem( row, SEARCH_AS_TYPE, '')
	SetItemStatus( row, SEARCH_AS_TYPE, Primary!, NotModified!)
	modify( SEARCH_AS_TYPE+ ".color=" + Describe(TO_DATE + ".color"))
	SetRedraw(TRUE)
END IF
Overwritten function:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
 /*------------------------------------------------------------------------------

 Function:			public u_cm_hierarchies_filter.Reset

 Returns:         Integer

 Parameters:      

 Copyright © 2002 DTI - Philip Salgannik

 Date Created: 7/2/2002

 Description:	
 
--------------------------------------------------------------------------------
 Modifications:
 Date            Author              Comments
------------------------------------------------------------------------------*/ 
integer li_rtn
SetRedraw(FALSE)
li_rtn = super::reset()
ib_description_modified = FALSE
modify( SEARCH_AS_TYPE+ ".color=" + "134217747")
InsertRow( 0 )
SetRedraw(TRUE)
RETURN li_rtn
...
Рейтинг: 0 / 0
17.09.2004, 21:57
    #32700623
Локшин Марк
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как wm_char в в datawindow
У меня этот поиск используется только для DataWindow специального типа - для множественного выбора из списка. Весь функционал сосредоточен внутри одного объекта, шлепнул его на форму, связал между собой (при необходимости зависимого выбора) и прописал скрипт на Retrieve. Сделано, так, чтобы было покомпактнее.
...
Рейтинг: 0 / 0
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Как wm_char в в datawindow / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]