Il linguaggio di programmazione Delphi
 

SendMessage

Sandra 25 Ott 2016 14:04
Uso XE7, ho necessita' di inviare ad un TDbGrid la sequenza CTRL+END per
posizionare sull'ultima riga.

Naturalmente non voglio usare TFDTable o scorrere fino alla fine TFDQuery

i parametri richiesti
SendMessage(hWnd: HWND, Msg:cardinal, wparam: nativeUInt, wparam:
lparam: NativeInt)

SendMessage(DbGrid1,'',VK_LCONTROL,VK_END);

[dcc32 Error] : E2250 There is no overloaded version of 'SendMessage'
that can be called with these arguments

SendMessage(DbGrid1,(VK_LCONTROL + VK_END), 0, 0);

F1 mi riporta per FMX
procedure SendMessage(const AMessageID: TMessageID); overload;

se dichiaro
iMessage : Integer

iMessage := VK_LCONTROL + VK_END;

SendMessage(DbGrid1 , iMessage, 0, 0);

[dcc32 Error] : E2250 There is no overloaded version of 'SendMessage'
that can be called with these arguments


Riuscite a dirmi dove sbaglio o se ci sono altre vie.
Daniele 25 Ott 2016 14:42
Ciao Sandra,

> Uso XE7, ho necessita' di inviare ad un TDbGrid la sequenza CTRL+END per
> posizionare sull'ultima riga

Se sei all'interno della griglia puoi utilizzare

dbgrd1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);

Li puoi controllare la combinazione di tasti e se e' ctrl+end

Un esempio su come usarlo e' qui, e' generico ......

http://stackoverflow.com/questions/23564300/delphi-how-to-detect-key-names-w-wo-shift-key-held

Ciao

Daniele
Giacomo Degli Esposti 25 Ott 2016 14:54
On Tuesday, October 25, 2016 at 2:04:40 PM UTC+2, Sandra wrote:
> Uso XE7, ho necessita' di inviare ad un TDbGrid la sequenza CTRL+END per
> posizionare sull'ultima riga.
>
> Naturalmente non voglio usare TFDTable o scorrere fino alla fine TFDQuery

Potresti darci qualche spiegazione in piu'? Io avrei proprio agito
sul dataset invece che sulla griglia per posizionarlo sull'ultima riga.

Ad ogni modo, anche se non mi sembra il modo piu' comodo di farlo
provo a risponderti ugualmente:

[...]
> i parametri richiesti
> SendMessage(hWnd: HWND, Msg:cardinal, wparam: nativeUInt, wparam:
> lparam: NativeInt)
[...]
> SendMessage(DbGrid1 , iMessage, 0, 0);
>
> [dcc32 Error] : E2250 There is no overloaded version of 'SendMessage'
> that can be called with these arguments

Controlla i parametri della SendMessage:
hwnd deve essere di tipo HWND ma tu passi direttamente il controllo, prova con
dbGrid1.Handle

ciao
Giacomo
Sandra 25 Ott 2016 16:45
Il 25/10/2016 14:42, Daniele ha scritto:
>>
>> Se sei all'interno della griglia puoi utilizzare
>>
>> dbgrd1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
>>
>> Li puoi controllare la combinazione di tasti e se e' ctrl+end
>>
>> Un esempio su come usarlo e' qui, e' generico ......
>>
>>
http://stackoverflow.com/questions/23564300/delphi-how-to-detect-key-names-w-wo-shift-key-held
>>

non devo verificare i tasti premuti per decidere cosa fare, OnKeyDow
mi indica 17 il Ctrl e 35 End

compila ed esegue, senza alcun effetto sulla griglia; resta sulla prima riga

DbGrid1.SetFocus;
PostMessage(DbGrid1.Handle, VK_CONTROL, VK_END, 0);
Sandra 25 Ott 2016 16:49
Il 25/10/2016 14:54, Giacomo Degli Esposti ha scritto:
>>
>> Potresti darci qualche spiegazione in piu'? Io avrei proprio agito
>> sul dataset invece che sulla griglia per posizionarlo sull'ultima riga.
>>
certo posso fare FDQuery1.Last, ma inviare sequenze di tasti e' una che
puo' tornare utile e non riuscire a farla mi rode

>> Ad ogni modo, anche se non mi sembra il modo piu' comodo di farlo
>> provo a risponderti ugualmente:
>>
>> Controlla i parametri della SendMessage:
>> hwnd deve essere di tipo HWND ma tu passi direttamente il controllo, prova
con dbGrid1.Handle
>>
era un mio errore non passare l'Handle.
Sandra 25 Ott 2016 17:13
Il 25/10/2016 14:04, Sandra ha scritto:
>> Uso XE7, ho necessita' di inviare ad un TDbGrid la sequenza CTRL+END per
>> posizionare sull'ultima riga.
>> [...]

questa soluzione ottiene lì'effetto desiderato, inviando separatamente
ed in successione Crtl e End

keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), 0, 0);
keybd_event(VK_END, MapVirtualKey(VK_END, 0), 0, 0);

Links
Giochi online
Dizionario sinonimi
Leggi e codici
Ricette
Testi
Webmatica
Hosting gratis
   
 

Il linguaggio di programmazione Delphi | Tutti i gruppi | it.comp.lang.delphi | Notizie e discussioni delphi | Delphi Mobile | Servizio di consultazione news.