Pas de problème (pb), que du PowerBuilder (PB) ^^

Le forum (ô combien francophone) des utilisateurs de Powerbuilder.

Recherche rapide

Annonce

Certaines rubriques, dont des cours, sont uniquement visibles par les membres du forum ^^.
Dans la rubrique Liens & Références, vous avez accès à un sommaire de téléchargement, profitez-en !
Il existe maintenant un nouveau TOPIC "Votre CV en Ligne" accessible uniquement par demande.

#1 11-07-2012 23:04:39

disneb  
Membre completement Geek
Lieu: Bejaia
Date d'inscription: 16-01-2008
Messages: 118
Pépites: 1,622
Banque: 0

retour vers champs precedant

Hello everybody
j'ai une datawindow (à plusieurs lignes).
En faisant un shift+tab ça me fait un retour vers le champs precedant. Comment faire un retour en arriere avec la fleche up (key up arrow) ou encore gauche? j'ai pensé au send (dw_1, #message,lowword, long) dans l'event "pbm_dwntabupout" mais j'arrive pas à trouver le # du message.
merci

Hors ligne

 

#2 12-07-2012 10:37:14

Geo  
Membre completement Geek
Lieu: Binche
Date d'inscription: 15-12-2008
Messages: 119
Pépites: 378
Banque: 0

Re: retour vers champs precedant

Bonjour,

tu définis un event branché sur 'pbm_dwnkey' sur la DW et tu codes le nécessaire dedans.
Attention,par défaut, la key UP (et DOWN) sert aussi à voyager dans tes lignes de ta DW et la key LEFT (et RIGHT) permet de voyager dans le texte de la cellule, tu risques donc d'obtenir des comportements étranges...
Pour checker la Key, tu peux utiliser l'instruction KeyDown().


Rien ne sert de courir, il faut partir à point .

Hors ligne

 

#3 12-07-2012 20:06:45

disneb  
Membre completement Geek
Lieu: Bejaia
Date d'inscription: 16-01-2008
Messages: 118
Pépites: 1,622
Banque: 0

Re: retour vers champs precedant

Justement, à la base c'est ce que j'avais fait aucun probleme avec la key entrée (pr passer d'un champs à un autre) par contre avec la key up il me renvoie tjrs vers la ligne precedente mm avec un setrow(i+1)
C'est pr ça que j'ai pensé aux msgs

Hors ligne

 

#4 13-07-2012 09:02:06

xlat  
0xc0000005
Award: bf
Lieu: Tanger (طنج)
Date d'inscription: 04-12-2010
Messages: 720
Pépites: 11,343
Banque: 100,221,387,868,884,300
Site web

Re: retour vers champs precedant

Code: pb

constant long WM_KEYDOWN = 256
constant long WM_KEYUP = 257


Sinon, j'ai utilisé ça quelque part, c'est une fonction globale sendkey.srf :

Code: pb

global type sendkey from function_object
end type

type prototypes
SUBROUTINE keybd_event( int bVk, int bScan, int dwFlags, int dwExtraInfo) LIBRARY "user32.dll"
function UINT MapVirtualKey(UINT uCode, UINT uMapType ) LIBRARY "user32.dll" ALIAS FOR "MapVirtualKeyW;unicode"
end prototypes

forward prototypes
global function integer sendkey (graphicobject ago_receiver, string as_key, boolean ab_down)
end prototypes

global function integer sendkey (graphicobject ago_receiver, string as_key, boolean ab_down);//send a key message to the given object
constant long WM_KEYDOWN = 256
constant long WM_KEYUP = 257
constant UINT MAPVK_VK_TO_CHAR = 2
constant UINT MAPVK_VK_TO_VSC = 0
constant UINT MAPVK_VSC_TO_VK = 1
constant UINT MAPVK_VSC_TO_VK_EX = 3

string ls_vk_def = "," + &
  "VK_LBUTTON=0x01{Left mouse button}," + &
  "VK_RBUTTON=0x02{Right mouse button}," + &
  "VK_CANCEL=0x03{Control-break processing}," + &
  "VK_MBUTTON=0x04{Middle mouse button (three-button mouse)}," + &
  "VK_XBUTTON1=0x05{X1 mouse button}," + &
  "VK_XBUTTON2=0x06{X2 mouse button}," + &
  "VK_BACK=0x08{BACKSPACE key}," + &
  "VK_TAB=0x09{TAB key}," + &
  "VK_CLEAR=0x0C{CLEAR key}," + &
  "VK_RETURN=0x0D{ENTER key}," + &
  "VK_SHIFT=0x10{SHIFT key}," + &
  "VK_CONTROL=0x11{CTRL key}," + &
  "VK_MENU=0x12{ALT key}," + &
  "VK_PAUSE=0x13{PAUSE key}," + &
  "VK_CAPITAL=0x14{CAPS LOCK key}," + &
  "VK_KANA=0x15{IME Kana mode}," + &
  "VK_HANGUEL=0x15{IME Hanguel mode (maintained for compatibility; use VK_HANGUL)}," + &
  "VK_HANGUL=0x15{IME Hangul mode}," + &
  "VK_JUNJA=0x17{IME Junja mode}," + &
  "VK_FINAL=0x18{IME final mode}," + &
  "VK_HANJA=0x19{IME Hanja mode}," + &
  "VK_KANJI=0x19{IME Kanji mode}," + &
  "VK_ESCAPE=0x1B{ESC key}," + &
  "VK_CONVERT=0x1C{IME convert}," + &
  "VK_NONCONVERT=0x1D{IME nonconvert}," + &
  "VK_ACCEPT=0x1E{IME accept}," + &
  "VK_MODECHANGE=0x1F{IME mode change request}," + &
  "VK_SPACE=0x20{SPACEBAR}," + &
  "VK_PRIOR=0x21{PAGE UP key}," + &
  "VK_NEXT=0x22{PAGE DOWN key}," + &
  "VK_END=0x23{END key}," + &
  "VK_HOME=0x24{HOME key}," + &
  "VK_LEFT=0x25{LEFT ARROW key}," + &
  "VK_UP=0x26{UP ARROW key}," + &
  "VK_RIGHT=0x27{RIGHT ARROW key}," + &
  "VK_DOWN=0x28{DOWN ARROW key}," + &
  "VK_SELECT=0x29{SELECT key}," + &
  "VK_PRINT=0x2A{PRINT key}," + &
  "VK_EXECUTE=0x2B{EXECUTE key}," + &
  "VK_SNAPSHOT=0x2C{PRINT SCREEN key}," + &
  "VK_INSERT=0x2D{INS key}," + &
  "VK_DELETE=0x2E{DEL key}," + &
  "VK_HELP=0x2F{HELP key}," + &
  "1=0x31{1 key}," + &
  "2=0x32{2 key}," + &
  "3=0x33{3 key}," + &
  "4=0x34{4 key}," + &
  "5=0x35{5 key}," + &
  "6=0x36{6 key}," + &
  "7=0x37{7 key}," + &
  "8=0x38{8 key}," + &
  "9=0x39{9 key}," + &
  "A=0x41{A key}," + &
  "B=0x42{B key}," + &
  "C=0x43{C key}," + &
  "D=0x44{D key}," + &
  "E=0x45{E key}," + &
  "F=0x46{F key}," + &
  "G=0x47{G key}," + &
  "H=0x48{H key}," + &
  "I=0x49{I key}," + &
  "J=0x4A{J key}," + &
  "K=0x4B{K key}," + &
  "L=0x4C{L key}," + &
  "M=0x4D{M key}," + &
  "N=0x4E{N key}," + &
  "O=0x4F{O key}," + &
  "P=0x50{P key}," + &
  "Q=0x51{Q key}," + &
  "R=0x52{R key}," + &
  "S=0x53{S key}," + &
  "T=0x54{T key}," + &
  "U=0x55{U key}," + &
  "V=0x56{V key}," + &
  "W=0x57{W key}," + &
  "X=0x58{X key}," + &
  "Y=0x59{Y key}," + &
  "Z=0x5A{Z key}," + &
  "VK_LWIN=0x5B{Left Windows key (Natural keyboard)}," + &
  "VK_RWIN=0x5C{Right Windows key (Natural keyboard)}," + &
  "VK_APPS=0x5D{Applications key (Natural keyboard)}," + &
  "VK_SLEEP=0x5F{Computer Sleep key}," + &
  "VK_NUMPAD0=0x60{Numeric keypad 0 key}," + &
  "VK_NUMPAD1=0x61{Numeric keypad 1 key}," + &
  "VK_NUMPAD2=0x62{Numeric keypad 2 key}," + &
  "VK_NUMPAD3=0x63{Numeric keypad 3 key}," + &
  "VK_NUMPAD4=0x64{Numeric keypad 4 key}," + &
  "VK_NUMPAD5=0x65{Numeric keypad 5 key}," + &
  "VK_NUMPAD6=0x66{Numeric keypad 6 key}," + &
  "VK_NUMPAD7=0x67{Numeric keypad 7 key}," + &
  "VK_NUMPAD8=0x68{Numeric keypad 8 key}," + &
  "VK_NUMPAD9=0x69{Numeric keypad 9 key}," + &
  "VK_MULTIPLY=0x6A{Multiply key}," + &
  "VK_ADD=0x6B{Add key}," + &
  "VK_SEPARATOR=0x6C{Separator key}," + &
  "VK_SUBTRACT=0x6D{Subtract key}," + &
  "VK_DECIMAL=0x6E{Decimal key}," + &
  "VK_DIVIDE=0x6F{Divide key}," + &
  "VK_F1=0x70{F1 key}," + &
  "VK_F2=0x71{F2 key}," + &
  "VK_F3=0x72{F3 key}," + &
  "VK_F4=0x73{F4 key}," + &
  "VK_F5=0x74{F5 key}," + &
  "VK_F6=0x75{F6 key}," + &
  "VK_F7=0x76{F7 key}," + &
  "VK_F8=0x77{F8 key}," + &
  "VK_F9=0x78{F9 key}," + &
  "VK_F10=0x79{F10 key}," + &
  "VK_F11=0x7A{F11 key}," + &
  "VK_F12=0x7B{F12 key}," + &
  "VK_F13=0x7C{F13 key}," + &
  "VK_F14=0x7D{F14 key}," + &
  "VK_F15=0x7E{F15 key}," + &
  "VK_F16=0x7F{F16 key}," + &
  "VK_F17=0x80{F17 key}," + &
  "VK_F18=0x81{F18 key}," + &
  "VK_F19=0x82{F19 key}," + &
  "VK_F20=0x83{F20 key}," + &
  "VK_F21=0x84{F21 key}," + &
  "VK_F22=0x85{F22 key}," + &
  "VK_F23=0x86{F23 key}," + &
  "VK_F24=0x87{F24 key}," + &
  "VK_NUMLOCK=0x90{NUM LOCK key}," + &
  "VK_SCROLL=0x91{SCROLL LOCK key}," + &
  "VK_LSHIFT=0xA0{Left SHIFT key}," + &
  "VK_RSHIFT=0xA1{Right SHIFT key}," + &
  "VK_LCONTROL=0xA2{Left CONTROL key}," + &
  "VK_RCONTROL=0xA3{Right CONTROL key}," + &
  "VK_LMENU=0xA4{Left MENU key}," + &
  "VK_RMENU=0xA5{Right MENU key}," + &
  "VK_BROWSER_BACK=0xA6{Browser Back key}," + &
  "VK_BROWSER_FORWARD=0xA7{Browser Forward key}," + &
  "VK_BROWSER_REFRESH=0xA8{Browser Refresh key}," + &
  "VK_BROWSER_STOP=0xA9{Browser Stop key}," + &
  "VK_BROWSER_SEARCH=0xAA{Browser Search key}," + &
  "VK_BROWSER_FAVORITES=0xAB{Browser Favorites key}," + &
  "VK_BROWSER_HOME=0xAC{Browser Start and Home key}," + &
  "VK_VOLUME_MUTE=0xAD{Volume Mute key}," + &
  "VK_VOLUME_DOWN=0xAE{Volume Down key}," + &
  "VK_VOLUME_UP=0xAF{Volume Up key}," + &
  "VK_MEDIA_NEXT_TRACK=0xB0{Next Track key}," + &
  "VK_MEDIA_PREV_TRACK=0xB1{Previous Track key}," + &
  "VK_MEDIA_STOP=0xB2{Stop Media key}," + &
  "VK_MEDIA_PLAY_PAUSE=0xB3{Play/Pause Media key}," + &
  "VK_LAUNCH_MAIL=0xB4{Start Mail key}," + &
  "VK_LAUNCH_MEDIA_SELECT=0xB5{Select Media key}," + &
  "VK_LAUNCH_APP1=0xB6{Start Application 1 key}," + &
  "VK_LAUNCH_APP2=0xB7{Start Application 2 key}," + &
  "VK_OEM_1=0xBA{Used for miscellaneous characters; it can vary by keyboard.}," + &
  "VK_OEM_PLUS=0xBB{For any country/region, the '+' key}," + &
  "VK_OEM_COMMA=0xBC{For any country/region, the ',' key}," + &
  "VK_OEM_MINUS=0xBD{For any country/region, the '-' key}," + &
  "VK_OEM_PERIOD=0xBE{For any country/region, the '.' key}," + &
  "VK_OEM_2=0xBF{Used for miscellaneous characters; it can vary by keyboard.}," + &
  "VK_OEM_3=0xC0{Used for miscellaneous characters; it can vary by keyboard.}," + &
  "VK_OEM_4=0xDB{Used for miscellaneous characters; it can vary by keyboard.}," + &
  "VK_OEM_5=0xDC{Used for miscellaneous characters; it can vary by keyboard.}," + &
  "VK_OEM_6=0xDD{Used for miscellaneous characters; it can vary by keyboard.}," + &
  "VK_OEM_7=0xDE{Used for miscellaneous characters; it can vary by keyboard.}," + &
  "VK_OEM_8=0xDF{Used for miscellaneous characters; it can vary by keyboard.}," + &
  "VK_OEM_102=0xE2{Either the angle bracket key or the backslash key on the RT 102-key keyboard}," + &
  "VK_PROCESSKEY=0xE5{IME PROCESS key}," + &
  "VK_PACKET=0xE7{Used to pass Unicode characters as if they were keystrokes. The VK_PACKET key is the low word of a 32-bit Virtual Key value used for non-keyboard input methods. For more information, see Remark in KEYBDINPUT, SendInput, WM_KEYDOWN, and WM_KEYUP}," + &
  "VK_ATTN=0xF6{Attn key}," + &
  "VK_CRSEL=0xF7{CrSel key}," + &
  "VK_EXSEL=0xF8{ExSel key}," + &
  "VK_EREOF=0xF9{Erase EOF key}," + &
  "VK_PLAY=0xFA{Play key}," + &
  "VK_ZOOM=0xFB{Zoom key}," + &
  "VK_NONAME=0xFC{Reserved}," + &
  "VK_PA1=0xFD{PA1 key}," + &
  "VK_OEM_CLEAR=0xFE{Clear key}"
long hwnd, ll_vk_code, ll_flag = 0, ll_pos, ll_scan_code
hwnd = Handle( ago_receiver )
as_key = upper( trim( as_key, true ) )
ll_pos = pos( ls_vk_def, ','+as_key )
if ll_pos < 1 then 
  debug_message( "global function",+ "sendkey("+ago_receiver.classname()+","+as_key+") failed to find key" )
  return -1
end if
string ls_val, ls_hextable = "0123456789ABCDEF"
ls_val = mid( ls_vk_def, ll_pos + len( as_key ) + 4 /* '=0x' */, 2 )
ll_vk_code = ( pos( ls_hextable, left( ls_val, 1) ) -1) * 16 + &
         ( pos( ls_hextable, right( ls_val, 1) ) -1)
//ll_scan_code = MapVirtualKey(ll_vk_code, MAPVK_VK_TO_VSC)
//ll_flag += ll_scan_code * 256
if ab_down then
//  debug_message( "global function",+ "sendkey("+ago_receiver.classname()+","+as_key+") DOWN (vk="+string(ll_vk_code)+" sc="+string(ll_scan_code)+")" )
//  return Send( hwnd, WM_KEYDOWN, ll_vk_code, ll_flag )
  // 0x45 => 69 : I don't understand why ( I was supposed to retrieve scancode from MapVirtualKey API but it doesn't work !)
  keybd_event( ll_vk_code, 69, 0, 0 )
else
//  debug_message( "global function",+ "sendkey("+ago_receiver.classname()+","+as_key+") UP (vk="+string(ll_vk_code)+" sc="+string(ll_scan_code)+")" )
//  return Send( hwnd, WM_KEYUP, ll_vk_code, ll_flag )
  keybd_event( ll_vk_code, 69, 2, 0)  
end if
return 0
end function


qui s'utilise :

sendkey( dw_1, "VK_TAB", true )
sendkey( dw_1, "VK_TAB", false )


https://lut.im/eJINqa9o/vAtyxD0h "Don't believe everything you read on the Internet"
    -- Abraham Lincoln

www.ngs.ma

Hors ligne

 

#5 13-07-2012 09:18:23

Geo  
Membre completement Geek
Lieu: Binche
Date d'inscription: 15-12-2008
Messages: 119
Pépites: 378
Banque: 0

Re: retour vers champs precedant

Je viens de tester le code (uniquement le cas trivial...) suivant dans l'event 'pbm_dwnkey' d'un DWC

Code:

IF KeyDown(KeyupArrow!) THEN  
  THIS.setcolumn(THIS.getcolumn( ) - 1 )  
  THIS.setfocus( )
  THIS.setrow(THIS.getrow( )+1)    
END IF

et ça passe bien à la colonne précédente au Key UP et reste sur la ligne active.
Attention, le SetColumn() ne fonctionne que si la colonne possède un TAB ORDER et n'a pas le Protect à TRUE.
Je suis en PB 11.5.1.


Rien ne sert de courir, il faut partir à point .

Hors ligne

 

#6 13-07-2012 10:09:27

disneb  
Membre completement Geek
Lieu: Bejaia
Date d'inscription: 16-01-2008
Messages: 118
Pépites: 1,622
Banque: 0

Re: retour vers champs precedant

bizarre chez moi ça passe automatiquement à la ligne precedente sauf si c'est la premiere ligne. (pb 10.5)
merci Xlat j vais essayer avec  ce que tu m'as donné

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB 1.2.22