On-line: tnsr2, гостей 1. Всего: 2 [подробнее..]
АвторСообщение



Пост N: 1
Зарегистрирован: 12.02.08
ссылка на сообщение  Отправлено: 12.02.08 15:40. Заголовок: MiniGUI-Browse- поиск по букве


Извините меня, но очень нужна помощь. С Clipperr-ом работаю давно, в Mini - нет и года. Начальству ну очень нужно поиск в прайс-листе по протому нажатию любой русской буквы. Не долго мудрствуя,
определил все клавиши и, в частности русские _DefineHotKey ( , 0 , 192 , {|| poisk(chr(192))} ) // буква "А" и т.д. В Browse все цифры и латинские буквы проходят, а русские - никакой реакции. А начальству вынь да полож.

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 43 , стр: 1 2 3 All [только новые]





Пост N: 12
Зарегистрирован: 12.02.08
ссылка на сообщение  Отправлено: 15.02.08 16:05. Заголовок: Еще одна неприятн..


Еще одна неприятность - перестал работать ON CHANGE . Точнее, срабатывает, если только кликнуть непосредсвенно на строку, а скрул не реагирует.

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


Пост N: 432
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 15.02.08 23:24. Заголовок: valery2 пишет: Поэт..


valery2 пишет:

 цитата:
Поэтому приму ЛЮБУЮ, но достаточно внятную, помощь.



Еще раз пересмотрите примеры - в вашем коде заложена возможность достаточно серьезной ошибки.
И еще, GetGridvKey возвращает т.н. virtual-key code, для того "правильно" использовать их нужно использовать WinAPI. Но в вашем простом случае можно использовать таблицу перекодировки.

Замените процедуру ppp сл.кодом

procedure ppp(lparam)
Form_1.Title := str(GetGridvKey( lParam )) + str( GetKeyboardMode() )
return
и поймете к чему я клоню.
GetKeyboardMode() найдете в исходниках MiniGUI.

Надеюсь, внятно написал


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 13
Зарегистрирован: 12.02.08
ссылка на сообщение  Отправлено: 16.02.08 13:39. Заголовок: Уважаемый Петр. Бла..


Уважаемый Петр. Благодарю Вас за ваше внимание и участие. Применил вашу рекомендацию:

 цитата:
Form_1.Title := str(GetGridvKey( lParam )) + str( GetKeyboardMode() )

Даже начал некую перекодировку, но как Вы верно заметили, GetGridvKey возвращает т.н. virtual-key code, причем только в ограниченном диапазоне,
т.е. клавиши ",<", ".>", "[{" и т.д. ему, судя по всему, невидимы. Перекодировочка получается неполная.

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


Пост N: 434
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 16.02.08 14:38. Заголовок: valery2 пишет: т.е...


valery2 пишет:

 цитата:
т.е. клавиши ",<", ".>", "[{" и т.д. ему, судя по всему, невидимы.



А зачем Вам это нужно?

Я думал, что Вам нужно что-то вроде:

 цитата:
/*----------------------*/
Function MyEvents( hWnd, nMsg, wParam, lParam )
Local result := 0

if nMsg == 78 //WM_NOTIFY
if GetNotifyCode ( lParam ) == (-155) //LVN_KEYDOWN
// if GetKeyboardMode() == 1049 //RU
test( GetGridvKey( lparam ) )
// endif
else
result := Events ( hWnd, nMsg, wParam, lParam )
endif
else
result := Events ( hWnd, nMsg, wParam, lParam )
endif

Return result

Procedure test( lparam )
local ch := chr( ToAsciiEx(lparam) )

if ch $ "тестТЕСТ"
Form_1.Title := Form_1.Title + " " + ch
endif

return

#pragma BEGINDUMP

#include <windows.h>
#include "hbapi.h"
#include "hbapiitm.h"

HB_FUNC( TOASCIIEX )
{
HKL hkl = GetKeyboardLayout( 0 );
BYTE KeyState[256];
WORD lpChar;

GetKeyboardState( KeyState );

ToAsciiEx( hb_parnl(1), 0, KeyState, &lpChar, 0, hkl );
hb_retnl( LOBYTE( lpChar ));
}

#pragma ENDDUMP





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


Пост N: 72
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 16.02.08 20:12. Заголовок: gfilatov пишет: Под..


gfilatov пишет:

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


Да, такое впечатление есть. Но, имхо, это не потому, что всем пох... Просто люди привыкли к Клипперу, консоль им ближе,
чем GUI (тут я сужу по себе). Некоторые пробуют, задают вопросы. И, я думаю, есть уже довольно серьезные приложения.
И хочу сказать: БОЛЬШОЕ СПАСИБО за Вашу работу!!!


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 26
Зарегистрирован: 04.12.07
ссылка на сообщение  Отправлено: 18.02.08 08:14. Заголовок: Всем доброго утра! ..


Всем доброго утра!

Горячие дебаты прошли пока меня не было.
За субботу подготовил готовый пример обработки нажатия клавиш и поиска
по ним для BROWSE и GRID. С использованием SET EVENTS FUNCTION TO
получилось всё очень просто, надёжно, совместимо и наглядно. Может
служить примером, которых, как пишут, не хватает. Но я также не решил
проблему получения русских букв из виртуального кода. Так что пример
работает, но пока только с английскими буковками. Вот сейчас воспользуюсь
подсказками Петра и через пару часиков выложу.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 27
Зарегистрирован: 04.12.07
ссылка на сообщение  Отправлено: 18.02.08 09:17. Заголовок: Изменения внёс - всё..


Изменения внёс - всё работает, но вот остался маленький недостаток:
виртуальный код возвращают и все функциональные клавиши, и даже
после обработки в функии TOASCIIEX() их код попадает в рабочий диапазон
клавиш. Например, левый Shift - буква Д, правый - L. Требуется помощь
Петра, Григория или Александра. Спасибо.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 14
Зарегистрирован: 12.02.08
ссылка на сообщение  Отправлено: 18.02.08 09:22. Заголовок: :sm15: Все получил..


Все получилось!!! Я тоже поработал вчера.
Спешу принести свою благодарность всем, кто принял живое участие в этой проблемме.
Прошу принять особую плагодарность Петра, за указание верного пути и, особенно, за функцию ToAsciiEx.
Вот результат:

Function MyEvents ( hWnd, nMsg, wParam, lParam )

Local i, x

if nMsg == WM_NOTIFY

IF GetNotifyCode ( lParam ) == LVN_KEYDOWN


ppp( GetGridvKey( lparam ),hWnd, nMsg, wParam, lParam )

else
Events ( hWnd, nMsg, wParam, lParam )
endif

else
Events ( hWnd, nMsg, wParam, lParam )

endif

Return (0)

procedure ppp(vparam,hWnd, nMsg, wParam, lParam)
local ch := '', ch1:=0

if GetKeyboardMode() == 1033
if chr(vparam) $ "1234567890QWERTYUIOPASDFGHJKLZXCVBNM" //**
msginfo(chr(vparam ))
MyPoisk(chr(vparam))
else
Events ( hWnd, nMsg, wParam, lParam )
endif
elseif GetKeyboardMode() == 1049
ch := chr( ToAsciiEx(vparam) )
ch1:=ToAsciiEx(vparam)
if ch $ "1234567890йцукенгшщзхъфывапролджэчсмитьбюЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ" .or.ch1=255.and.vparam=90 //*
MyPoisk(ch)
else
Events ( hWnd, nMsg, wParam, lParam )
endif
endif

// * ch1=255.and.vparam=90 - это маленькая буква "я". С остальными значениями vparam это горячие клавиши.
//** по аналогичной причине в английской раскладке исключил маленькие буквы. Просто в MyPoisk строку поиска обрабатываю через UPPER().

return

#pragma BEGINDUMP

#include <windows.h>
#include "hbapi.h"
#include "hbapiitm.h"

HB_FUNC( GETKEYBOARDMODE )
{
HKL kbl;
HWND CurApp;
DWORD idthd;
int newmode;

CurApp=GetForegroundWindow();
idthd=GetWindowThreadProcessId(CurApp,NULL);
kbl=GetKeyboardLayout(idthd);
newmode=(int)LOWORD(kbl);
hb_retnl(newmode);
}

HB_FUNC( TOASCIIEX )
{
HKL hkl = GetKeyboardLayout( 0 );
BYTE KeyState[256];
WORD lpChar;
GetKeyboardState( KeyState );

ToAsciiEx( hb_parnl(1), 0, KeyState, &lpChar, 0, hkl );
hb_retnl( LOBYTE( lpChar ));
}


#pragma ENDDUMP



Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 28
Зарегистрирован: 04.12.07
ссылка на сообщение  Отправлено: 18.02.08 10:07. Заголовок: Рад за Valery2, толь..


Рад за Valery2, только хочу предостеречь от ошибки - в его процедуре MyEvents
события LVN_KEYDOWN перехватываются для всех форм и контролов программы,
что чревато последствиями. Обратите внимание, как у меня сделано многократное
вложение IF - это как раз для того, чтобы "вырезать" из стандартного обработчика
событий только определённые для определённых форм и контролов.
Григорий Филатов пишет:

 цитата:

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


Думаю он не прав, многие из нас заинтересованы в проекте. Я лично, не надоедаю
ему с указанием обнаруженных ошибок только из уважения к его работе для нас
Вот например:
1) Событие ONSIZE окна при активном XP стиле не срабатывает при открытии окна,
а в классическом стиле срабатывает сразу при открытии, до каких-либо интерактивных
изменений размеров. Событие окна ON RESTORE не работает при восстановлении из
свернутого состояния;
2) При изменении заголовка BROWSE после активации окна выравнивание прыгает как
ему заблагорассудится.
Ещё раз спасибо всем разработчикам - MiniGUI-Ext на удивление получается простым
и очень гибким продуктом.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 29
Зарегистрирован: 04.12.07
ссылка на сообщение  Отправлено: 18.02.08 10:12. Заголовок: Выкладываю пример ав..


Выкладываю пример автопоиска для BROWSE и GRID. Всё оптимизировано на многократное
использование в большом проекте. Осталась проблема с функциональными клавишами. Но
на готовом примере проще будет найти красивае решение. Вот первый файл:

//#include "MiniGui.ch"

#define WM_NOTIFY 78
#define LVN_KEYDOWN ( - 155 )

//------------------------------------------------------------------------------
FUNCTION MyEvents( hWnd, nMsg, wParam, lParam )
//------------------------------------------------------------------------------
LOCAL i, Result := 0, cFormName := "", cControlName := ""

if nMsg = WM_NOTIFY
if GetNotifyCode( lParam ) = LVN_KEYDOWN

i := Ascan( _HMG_aFormHandles , hWnd )
cFormName := if( i > 0, _HMG_aFormNames[ i ], "" )
i := Ascan( _HMG_aControlHandles, GetHwndFrom( lParam ) )
cControlName := if( i > 0, _HMG_aControlNames[ i ], "" )

if cFormName == "Form_1" .and. cControlName == "Browse_1"
Result := Form1Event1( i, lParam )
elseif cFormName == "Form_1" .and. cControlName == "Grid_1"
Result := Form1Event2( i, lParam )
elseif cFormName == "Form2" .and. cControlName == "Browse_1"
//
elseif cFormName == "winPreparChild" .and. cControlName == "Browse_1"
//
elseif cFormName == "winUsersRights" .and. cControlName == "Grid_1"
//
else
Result := Events( hWnd, nMsg, wParam, lParam )
endif

else
Result := Events( hWnd, nMsg, wParam, lParam )
endif
else
Result := Events( hWnd, nMsg, wParam, lParam )
endif

RETURN Result

//------------------------------------------------------------------------------
#pragma BEGINDUMP

#include <windows.h>
#include "hbapi.h"
#include "hbapiitm.h"

HB_FUNC( TOASCIIEX )
{
HKL hkl = GetKeyboardLayout( 0 );
BYTE KeyState[256];
WORD lpChar;

GetKeyboardState( KeyState );

ToAsciiEx( hb_parnl(1), 0, KeyState, &lpChar, 0, hkl );
hb_retnl( LOBYTE( lpChar ));
}

#pragma ENDDUMP
//------------------------------------------------------------------------------


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 15
Зарегистрирован: 12.02.08
ссылка на сообщение  Отправлено: 18.02.08 10:14. Заголовок: КСС Спасибо за зам..


КСС Спасибо за замечание, только я это уже заметил, внес у себя ранее. Все отрабатывает без сбоев. Только реализовано это у меня как-то горбато и не краиво. Поэтому пока убрал из примера. А где можно посмотреть Ваш пример?

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 30
Зарегистрирован: 04.12.07
ссылка на сообщение  Отправлено: 18.02.08 10:14. Заголовок: А вот и второй. /* ..


А вот и второй.

/*
* MINIGUI - Harbour Win32 GUI library Demo
*
* Copyright 2002 Roberto Lopez <harbourminigui@gmail.com>
* http://harbourminigui.googlepages.com/
*/

#include "minigui.ch"
#include "Dbstruct.ch"

Function Main
Private aRows [20] [3]
Private nSortColBrowse := 1, nSortColGrid := 1, cSearchText := "", cPressedKeys := ""

REQUEST DBFCDX , DBFFPT
SET CENTURY ON
SET DELETED ON
//------------------------------------------------------------------------------
SET CODEPAGE TO RUSSIAN // Very important for UPPER()
SET EVENTS FUNCTION TO MYEVENTS
//------------------------------------------------------------------------------

DEFINE WINDOW Form_1 ;
AT 0,0 ;
WIDTH 640 HEIGHT 480 ;
TITLE "MiniGUI Browse/Grid ColumnSearch Demo" ;
MAIN NOMAXIMIZE ;
ON INIT OpenTables() ;
ON RELEASE CloseTables()

DEFINE MAIN MENU
POPUP 'File'
ITEM 'Exit' ACTION Form_1.Release
END POPUP
POPUP 'Help'
ITEM 'About' ACTION MsgInfo ("MiniGUI Browse/Grid ColumnSearch Demo")
END POPUP
END MENU

DEFINE STATUSBAR
STATUSITEM 'HMG Power Ready'
END STATUSBAR


@ 10,10 BROWSE Browse_1 ;
WIDTH 610 ;
HEIGHT 200 ;
HEADERS { 'Code' , 'First Name' , 'Last Name', 'Birth Date', 'Married' , 'Biography' } ;
WIDTHS { 100 , 150 , 150 , 150 , 150 } ;
WORKAREA Test ;
FIELDS { 'Test->Code' , 'Test->First' , 'Test->Last' , 'Test->Birth' , 'Test->Married' } ;
VALUE 1 ;
JUSTIFY { BROWSE_JTFY_RIGHT, BROWSE_JTFY_CENTER, BROWSE_JTFY_CENTER, ;
BROWSE_JTFY_CENTER, BROWSE_JTFY_CENTER } ;
ON HEADCLICK { {|| BrowseHeadClick(1)}, {|| BrowseHeadClick(2)}, , , } ;
ON GOTFOCUS {|| BrowseHeadClick( nSortColBrowse ) }


aRows [1] := {'Simpson','Homer','555-5555'}
aRows [2] := {'Петров','Иван','324-6432'}
aRows [3] := {'Smart','Max','432-5892'}
aRows [4] := {'Иванов','Андрей','894-2332'}
aRows [5] := {'Русский','James','346-9873'}
aRows [6] := {'Сидоров','Сергей','394-9654'}
aRows [7] := {'Flanders','Ned','435-3211'}
aRows [8] := {'Калугина','Анна','123-1234'}
aRows [9] := {'Pedemonti','Flavio','000-0000'}
aRows [10] := {'Gomez','Juan','583-4832'}
aRows [11] := {'Попова','Ирина','321-4332'}
aRows [12] := {'Borges','Javier','326-9430'}
aRows [13] := {'Альварес','Alberto','543-7898'}
aRows [14] := {'Гонсалес','Ольга','437-8473'}
aRows [15] := {'Batistuta','Gol','485-2843'}
aRows [16] := {'Vinazzi','Amigo','394-5983'}
aRows [17] := {'Котлов','Flavio','534-7984'}
aRows [18] := {'Ладыко','Геннадий','854-7873'}
aRows [19] := {'Теплицын','Alejandra','???-????'}
aRows [20] := {'Reyes','Monica','432-5836'}

@ 220,10 GRID Grid_1 ;
WIDTH 610 ;
HEIGHT 170 ;
HEADERS {'Column 1','Column 2','Column 3'} ;
WIDTHS {140,140,140} ;
ITEMS aRows ;
ON HEADCLICK { {|| GridHeadClick(1)}, {|| GridHeadClick(2)}, } ;
ON GOTFOCUS {|| GridHeadClick( nSortColGrid ) }

END WINDOW

CENTER WINDOW Form_1
ACTIVATE WINDOW Form_1

Return Nil

Function BrowseHeadClick( nCol )

if nCol = 1
set order to tag "Code"
nSortColBrowse := 1
cPressedKeys := ""
cSearchText := "Sort&Search by < " + "Code" + " >: "
Form_1.Browse_1.Header( 1 ) := 'Code ' +chr(94)
Form_1.Browse_1.Header( 2 ) := 'First Name ' +chr(45)
elseif nCol = 2
set order to tag "First"
nSortColBrowse := 2
cPressedKeys := ""
cSearchText := "Sort&Search by < " + "First Name" + " >: "
Form_1.Browse_1.Header( 1 ) := 'Code ' +chr(45)
Form_1.Browse_1.Header( 2 ) := 'First Name ' +chr(94)
endif
Form_1.Browse_1.Refresh
Form_1.StatusBar.Item(1) := cSearchText

Return Nil

Function GridHeadClick( nCol )
Local i

if nCol = 1
aRows := asort( aRows,,, { |x, y| x[1] < y[1] } )
// Must be Refresh
for i = 1 to len( aRows )
Form_1.Grid_1.Item( i ) := aRows[ i ]
next
nSortColGrid := 1
cPressedKeys := ""
cSearchText := "Sort&Search by < " + "Column 1" + " >: "
Form_1.Grid_1.Header( 1 ) := 'Column 1 ' +chr(94)
Form_1.Grid_1.Header( 2 ) := 'Column 2 ' +chr(45)
elseif nCol = 2
aRows := asort( aRows,,, { |x, y| x[2] < y[2] } )
// Must be Refresh
for i = 1 to len( aRows )
Form_1.Grid_1.Item( i ) := aRows[ i ]
next
nSortColGrid := 2
cPressedKeys := ""
cSearchText := "Sort&Search by < " + "Column 2" + " >: "
Form_1.Grid_1.Header( 1 ) := 'Column 1 ' +chr(45)
Form_1.Grid_1.Header( 2 ) := 'Column 2 ' +chr(94)
endif
Form_1.Grid_1.Value := if( Form_1.Grid_1.Value = 0, 1, Form_1.Grid_1.Value )
Form_1.StatusBar.Item(1) := cSearchText

Return Nil

Procedure OpenTables()

if !file("test.dbf")
CreateTable()
endif

Use Test index Test Via "DBFCDX"
set order to tag "Code"
Go Top

Form_1.Browse_1.Value := RecNo()
BrowseHeadClick( 1 )

Return

Procedure CloseTables()
Use
Return

Procedure CreateTable
LOCAL aDbf[5][4]

aDbf[1][ DBS_NAME ] := "Code"
aDbf[1][ DBS_TYPE ] := "Numeric"
aDbf[1][ DBS_LEN ] := 10
aDbf[1][ DBS_DEC ] := 0
//
aDbf[2][ DBS_NAME ] := "First"
aDbf[2][ DBS_TYPE ] := "Character"
aDbf[2][ DBS_LEN ] := 25
aDbf[2][ DBS_DEC ] := 0
//
aDbf[3][ DBS_NAME ] := "Last"
aDbf[3][ DBS_TYPE ] := "Character"
aDbf[3][ DBS_LEN ] := 25
aDbf[3][ DBS_DEC ] := 0
//
aDbf[4][ DBS_NAME ] := "Married"
aDbf[4][ DBS_TYPE ] := "Logical"
aDbf[4][ DBS_LEN ] := 1
aDbf[4][ DBS_DEC ] := 0
//
aDbf[5][ DBS_NAME ] := "Birth"
aDbf[5][ DBS_TYPE ] := "Date"
aDbf[5][ DBS_LEN ] := 8
aDbf[5][ DBS_DEC ] := 0
//

DBCREATE("Test", aDbf, "DBFCDX")

Use test Via "DBFCDX"
zap

For i:= 1 To 100
append blank
Replace code with i
Replace First With aRows[Random(20)][1]
Replace Last With 'Last Name '+ Str(i)
Replace Married With .t.
replace birth with date()+i-10000
Next i

Index on str(Code,10) Tag "Code" To "Test"
Index on upper(First) Tag "First" To "Test"

Use

Return


//------------------------------------------------------------------------------
#DEFINE NATION_CHARS ;
"`1234567890-=\~!@#$%^&*()_+/.,|QWERTYUIOPASDFGHJKLZXCVBNMЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮЁ"
//------------------------------------------------------------------------------
Function Form1Event1( i, lParam )
//------------------------------------------------------------------------------
Local nLastRec := 1
Local nVirtKey := GetGridvKey( lParam )

Do Case
/*
Case nVirtKey == 65 // A
if GetAltState() == -127 .or. GetAltState() == -128 // ALT
if _HMG_acontrolmiscdata1 [2] == .T.
_BrowseEdit ( _hmg_acontrolhandles , _HMG_acontrolmiscdata1 [4] ,;
_HMG_acontrolmiscdata1 [5] , _HMG_acontrolmiscdata1 [3] ,;
_HMG_aControlInputMask , .t. , _HMG_aControlFontColor )
EndIf
EndIf
*/
Case nVirtKey == 46 // DEL
*If _HMG_aControlPicture == .t.
If MsgYesNo( _HMG_BRWLangMessage [1] , _HMG_BRWLangMessage [2] ) == .t.
_BrowseDelete('','',i)
EndIf
*EndIf

Case nVirtKey == 36 // HOME
_BrowseHome('','',i)
cPressedKeys := ""
Form_1.StatusBar.Item(1) := cSearchText
Return 1

Case nVirtKey == 35 // END
_BrowseEnd('','',i)
cPressedKeys := ""
Form_1.StatusBar.Item(1) := cSearchText
Return 1

Case nVirtKey == 33 // PGUP
_BrowsePrior('','',i)
cPressedKeys := ""
Form_1.StatusBar.Item(1) := cSearchText
Return 1

Case nVirtKey == 34 // PGDN
_BrowseNext('','',i)
cPressedKeys := ""
Form_1.StatusBar.Item(1) := cSearchText
Return 1

Case nVirtKey == 38 // UP
_BrowseUp('','',i)
cPressedKeys := ""
Form_1.StatusBar.Item(1) := cSearchText
Return 1

Case nVirtKey == 40 // DOWN
_BrowseDown('','',i)
cPressedKeys := ""
Form_1.StatusBar.Item(1) := cSearchText
Return 1

Case ( Upper( chr( ToAsciiEx(nVirtKey) ) ) $ NATION_CHARS ) .or. nVirtKey = 8

if nVirtKey = 8 // BackSpace
cPressedKeys := left( cPressedKeys, len(cPressedKeys)-1 )
else
cPressedKeys := cPressedKeys + Upper( chr( ToAsciiEx(nVirtKey) ) )
endif
Form_1.StatusBar.Item(1) := cSearchText + cPressedKeys

nLastRec := recno()
*if lSearchFromTop
go top
*endif
if nSortColBrowse = 1
if ! dbseek( str(val(cPressedKeys), 10) )
go nLastRec
endif
elseif nSortColBrowse = 2
if ! dbseek( cPressedKeys )
go nLastRec
endif
endif
Form_1.Browse_1.Value := recno()
Return 1

Otherwise
cPressedKeys := ""
Form_1.StatusBar.Item(1) := cSearchText

EndCase

RETURN 0

//------------------------------------------------------------------------------
Function Form1Event2( i, lParam )
//------------------------------------------------------------------------------
Local nLastRec := 1, nFindElem := 0
Local nVirtKey := GetGridvKey( lParam )

Do Case
Case nVirtKey == 36 // HOME
_GridHome('','',i)
cPressedKeys := ""
Form_1.StatusBar.Item(1) := cSearchText
Return 1

Case nVirtKey == 35 // END
_GridEnd('','',i)
cPressedKeys := ""
Form_1.StatusBar.Item(1) := cSearchText
Return 1

Case nVirtKey == 33 // PGUP
_GridPgUp('','',i)
cPressedKeys := ""
Form_1.StatusBar.Item(1) := cSearchText
Return 1

Case nVirtKey == 34 // PGDN
_GridPgDn('','',i)
cPressedKeys := ""
Form_1.StatusBar.Item(1) := cSearchText
Return 1

Case nVirtKey == 38 // UP
_GridPrior('','',i)
cPressedKeys := ""
Form_1.StatusBar.Item(1) := cSearchText
Return 1

Case nVirtKey == 40 // DOWN
_GridNext('','',i)
cPressedKeys := ""
Form_1.StatusBar.Item(1) := cSearchText
Return 1

Case ( Upper( chr( ToAsciiEx(nVirtKey) ) ) $ NATION_CHARS ) .or. nVirtKey = 8

if nVirtKey = 8 // BackSpace
cPressedKeys := left( cPressedKeys, len(cPressedKeys)-1 )
else
cPressedKeys := cPressedKeys + Upper( chr( ToAsciiEx(nVirtKey) ) )
endif
Form_1.StatusBar.Item(1) := cSearchText + cPressedKeys

nLastRec := Form_1.Grid_1.Value
nFindElem := ascan( aRows, { | x | left( upper( x[nSortColGrid] ), len(cPressedKeys) ) == cPressedKeys } )
if nFindElem > 0
Form_1.Grid_1.Value := nFindElem
else
Form_1.Grid_1.Value := nLastRec
endif
Return 1 // Must be 1 to disable standard search procedure

Otherwise
cPressedKeys := ""
Form_1.StatusBar.Item(1) := cSearchText

EndCase

RETURN 0

//------------------------------------------------------------------------------
#include "MyEvents.prg"
//------------------------------------------------------------------------------

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 16
Зарегистрирован: 12.02.08
ссылка на сообщение  Отправлено: 18.02.08 10:15. Заголовок: КСС Спасибо за зам..


КСС Спасибо за замечание, только я это уже заметил, внес у себя ранее. Все отрабатывает без сбоев. Только реализовано это у меня как-то горбато и некрасиво. Поэтому пока убрал из примера. А где можно посмотреть Ваш пример?

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 17
Зарегистрирован: 12.02.08
ссылка на сообщение  Отправлено: 18.02.08 10:21. Заголовок: Извините, нечаянно ..


Извините, нечаянно кликнул дважды.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 31
Зарегистрирован: 04.12.07
ссылка на сообщение  Отправлено: 18.02.08 11:00. Заголовок: На всякий случай, дл..


На всякий случай, для новичков:
первый файл обзываем MyEvents.prg, второй - как хотите.
Копируете оба файла в новый каталог каталога SAMPLES\BASIC.
Берём любой файл Compile.bat из примеров, копируем себе и
меняем там имя файла на своё, которое вы дали второму модулю.

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




Пост N: 488
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 18.02.08 11:39. Заголовок: Спасибо КСС за приме..


Спасибо КСС за пример, их всегда нехватает !

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 116
Зарегистрирован: 11.07.05
ссылка на сообщение  Отправлено: 18.02.08 12:39. Заголовок: добрый день. Решил п..


добрый день. Решил попробовать пример KCC, скачал minigui+harbour с http://harbourminigui.googlepages.com/, сохранил файлы КСС, запустил компиляцию, получил ошибку:

Harbour Beta build 0.99-3 Intl. 
Copyright 1999-2007, http://www.harbour-project.org/
HMG build 2.0.031 - http://harbourminigui.googlepages.com/
Compiling 'main2.prg'...
main2.prg(20) Error E0030 Syntax error: "syntax error at 'EVENTS'"
1 error


что я сделал не так? может вы используете xharbour?

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 32
Зарегистрирован: 04.12.07
ссылка на сообщение  Отправлено: 18.02.08 12:52. Заголовок: Мы используем (больш..


Мы используем (большинство) MiniGUI-Ext
[url=http://hmgextended.com/files/CONTRIB/hmg-1.4-48-setup.zip ]click here[/url]

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 33
Зарегистрирован: 04.12.07
ссылка на сообщение  Отправлено: 18.02.08 12:53. Заголовок: Чё-то не так показыв..


Чё-то не так показывает
http://hmgextended.com/files/CONTRIB/hmg-1.4-48-setup.zip

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 118
Зарегистрирован: 11.07.05
ссылка на сообщение  Отправлено: 18.02.08 13:13. Заголовок: однако, сколько верс..


однако, сколько версий minigui в интернете!
1) Roberto Lopez http://harbourminigui.googlepages.com
2) Григорий Филатов http://minigui.mylivepage.ru
3) ещё и http://hmgextended.com

!

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 43 , стр: 1 2 3 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

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