Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 5/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Edit Hızlı Barkod Girişi
#1
Mrb;

   Hızlı satış ekranı uygulaması geliştirdim. Olabildiğince ürün giriş hızını arttırmaya çalışıyorum. En büyük engel ve tek engel şuan da Edit e girilen barkod kodu. Barkod okurken normal barkod numarasını tek tek yazıyor ve sonra stoğu aktarıyor fakat edite bilgi giriş anında bir şekilde barkodunu tek tek yazdırmadan okutabilirsem çok daha hızlı olacak. Tıpkı veritabanı döngüsünde hızlı olması için disablecontrols yaptığımız gibi. Bu konuda bilgisi olan ve önerisi olan olursa sevinirim.
Cevapla
#2
Sanırım edit in onchange olayından bahsediyorsunuz? doğrumu anladım. eğer öyle ise onkeypress olayına basılan tuş enter ise şunu yap diyebilirsiniz.
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
WWW
Cevapla
#3
Merhaba,
Barkodların tümünü ListBox veya benzeri bir veri kümesine alıp, daha sonra toplu işlem yapabilirsiniz.
Bu durumda, işlem hızınızı; barkodları geçici olarak sakladığınız veri kümesinin tipi ve Stok tablosuna kaydetme tekniğiniz belirleyecektir.
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
Cevapla
#4
Sorgu hızında problem yok ekrandaki tek yavaşlık barkod okuma anında barkod kodunun ekrana yazma işlemi. Ekrana yazmayı harf harf değilde toplu yazdırabilsem çok hızlı olur
Cevapla
#5
Barkod okuyucular verileri klavye girişi gibi yolluyorlar. Yani kod kaç karakterliyse tek tek yazdırıp srdından enter basıyor. Muhtemelen her karakterin arasına bir bekleme süresi koyuyor. Bıda yavaş giriliyor izlenimi veriyor. En azından benim görüşüm böyle.
Okuma sonucunu formun keypress olayında okumayı ve her birinin okunduğu andaki sürelerine bakın aralarındaki süre farkı ne kadar?
Ağlarsa kablosuz ağlar, gerisi yerel ağlar...
Cevapla
#6
Ona baktım bekleme süresi olmadığında değerler düzgün girilmiyor. Veri aktarım olayından dolayı süre girmek zorunda imiş. Benim derdim aslında edite bilgi girildiği anı fark edip disable yapıp enterden sonra geri açabilmek. Key down olduğunda disable yapabilirim ama kullanıcı manuel olarak miktar ve ağırlık girdiğinden bunada izin vermem gerekiyor. Yani sadece barkod cihazından gelen veriyi yakalamalıyım
Cevapla
#7
Hocam sana bir kod örneği gönderiyorum, bu kod gelen verinin mouse, klavye veya hid cihazdanmı geldiğini veriyor. Ben baya bi uğraştım becerememiştim kodlamayı. Amacım şuydu;

barkod cihazından bir veri geldiğinde program masaüstünde aktif değilken dahi gelen veriyi alıp programın işlemesini sağlamaktı, örneğin programı çalıştıdım, barkod.text te cursor bekliyor, okutuyorum barkodu sorunsuz barkod.text e yazıyor, fakat mesela program açıkken excel i açtım işlem yapıyorum, barkod cihazdan bir veri gelince excel e değil de programın bunu algılayıp işlemesi gerekiyor gibi.

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, AppEvnts, ExtCtrls, Mask, RXSpin, ComCtrls, Buttons, Menus,
  DB, RxMemDS, IDHTTP;


////////////////////////////////////////////////////////////////////////////////
type
 USHORT = Word;
const
 RI_NUM_DEVICE = 2;
 WM_INPUT  = $00FF;
 RIDEV_REMOVE                = $00000001;
//  RIDEV_EXCLUDE               = $00000010;
//  RIDEV_PAGEONLY              = $00000020;
//  RIDEV_NOLEGACY              = $00000030;
 RIDEV_INPUTSINK             = $00000100;
//  RIDEV_CAPTUREMOUSE          = $00000200;
//  RIDEV_NOHOTKEYS             = $00000200;
//  RIDEV_APPKEYS               = $00000400;

 RIM_TYPEMOUSE               = $00000000;
 RIM_TYPEKEYBOARD            = $00000001;
 RIM_TYPEHID                 = $00000002;

 RID_INPUT                   = $10000003;
 RID_HEADER                  = $10000005;

 RIDI_PREPARSEDDATA          = $20000005;
 RIDI_DEVICENAME             = $20000007;
 RIDI_DEVICEINFO             = $2000000b;
////////////////////////////////////////////////////////////////////////////////
type
 TRAWINPUTDEVICE = packed record
   usUsagePage : WORD;
   usUsage     : WORD;
   dwFlags     : DWORD;
   hwndTarget  : HWND;
 end;
 PRAWINPUTDEVICE = ^TRAWINPUTDEVICE;

 TRAWINPUTHEADER = packed record
   dwType    : DWORD;
   dwSize    : DWORD;
   hDevice   : THANDLE;
   wParam    : WPARAM;
 end;
 PRAWINPUTHEADER = ^TRAWINPUTHEADER;

 TRMBUTTONS = packed record
   case Integer of
       0: (ulButtons: ULONG);
       1: (
          usButtonFlags : SHORT;
          usButtonData  : SHORT;
         );
   end;

 TRAWMOUSE = packed record
   usFlags            : SHORT;
   RMButtons          : TRMBUTTONS;
   ulRawButtons       : ULONG;
   lLastX             : LongInt;
   lLastY             : LongInt;
   ulExtraInformation : ULONG;
 end;
 PRAWMOUSE = ^TRAWMOUSE;
 
 TRAWKEYBOARD = packed record
   MakeCode         : SHORT;
   Flags            : SHORT;
   Reserved         : SHORT;
   VKey             : SHORT;
   Mess             : UINT;
   ExtraInformation : ULONG;
 end;
 PRAWKEYBOARD = ^TRAWKEYBOARD;

 TRAWHID = packed record
   dwSizeHid : DWORD;
   dwCount   : DWORD;
   bRawData  : BYTE;
 end;
 PTRAWHID = ^TRAWHID;

 TRAWINPUTDATA = packed record
   case Integer of
     0: (mouse    : TRAWMOUSE   );
     1: (keyboard : TRAWKEYBOARD);
     2: (hid      : TRAWHID     );
   end;

 TRAWINPUT = packed record
     header  : TRAWINPUTHEADER;
     data    : TRAWINPUTDATA;
 end;
 PRAWINPUT = ^TRAWINPUT;

 TRID_DEVICE_INFO_MOUSE = packed record
    dwId               : DWORD;
    dwNumberOfButtons  : DWORD;
    dwSampleRate       : DWORD;
 end;
 PRID_DEVICE_INFO_MOUSE = ^TRID_DEVICE_INFO_MOUSE;

 TRID_DEVICE_INFO_KEYBOARD = packed record
    dwType : DWORD;
    dwSubType              : DWORD;
    dwKeyboardMode         : DWORD;
    dwNumberOfFunctionKeys : DWORD;
    dwNumberOfIndicators   : DWORD;
    dwNumberOfKeysTotal    : DWORD;
 end;
 PRID_DEVICE_INFO_KEYBOARD = ^TRID_DEVICE_INFO_KEYBOARD;

 TRID_DEVICE_INFO_HID  = packed record
    dwVendorId       : DWORD;
    dwProductId      : DWORD;
    dwVersionNumber  : DWORD;
    usUsagePage      : USHORT;
    usUsage          : USHORT;
    end;
 PRID_DEVICE_INFO_HID = ^TRID_DEVICE_INFO_HID;

 TRID_DEVICE_INFO = packed record
     cbSize : DWORD;
     dwType : DWORD;
     case Integer of
       0: (mouse    : TRID_DEVICE_INFO_MOUSE   );
       1: (keyboard : TRID_DEVICE_INFO_KEYBOARD);
       2: (hid      : TRID_DEVICE_INFO_HID     );
 end;
 PRID_DEVICE_INFO = ^TRID_DEVICE_INFO;
////////////////////////////////////////////////////////////////////////////////
function RegisterRawInputDevices(pRawInputDevices: Pointer;uiNumDevices,cbSize: UINT): Boolean; stdcall; external 'user32.dll';
function GetRawInputData(hRawInput: Pointer; uiCommand:UINT; pData: Pointer; pcbSize: Pointer; cbSizeHeader: UINT): UINT; stdcall; external 'user32.dll';
function GetRawInputDeviceInfoA(hDevice: THandle; uiCommand:UINT; pData: Pointer; pcbSize: Pointer): UINT; stdcall; external 'user32.dll';
////////////////////////////////////////////////////////////////////////////////

//// private kısmı
  private
    { Private }
    Rid: packed array [0..RI_NUM_DEVICE-1] of TRAWInputDevice;
    procedure WmInput(var Mess: TMessage); message WM_INPUT;

//// ana variant kısmı
const
  MY_MESSAGE = WM_USER + 4242;
  WH_KEYBOARD_LL       =  $000D;

implementation

{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.Title:='Tus Yakalama';

  Rid[0].usUsagePage := $0001;
  Rid[0].usUsage     := $02;
  Rid[0].dwFlags     := RIDEV_INPUTSINK;  //0;
  Rid[0].hwndTarget  := Self.Handle;

  Rid[1].usUsagePage := $0001;
  Rid[1].usUsage     := $06;
  Rid[1].dwFlags     := RIDEV_INPUTSINK;
  Rid[1].hwndTarget  := Self.Handle;
  RegisterRawInputDevices(@Rid, RI_NUM_DEVICE, SizeOf(TRAWInputDevice));
end;

procedure TForm1.WmInput(var Mess: TMessage);
var
  RI: PRAWINPUT;
  dwSize: UINT;
  lpb: PBYTE;
  DataSize: DWORD;
begin
  GetRawInputData(PRAWINPUT(Mess.LParam), RID_INPUT, nil, @dwSize,SizeOf(TRAWINPUTHEADER));
  if dwSize = 0 then Exit;
  DataSize := SizeOf(BYTE) * dwSize;
  GetMem(lpb,DataSize);
  try
    GetRawInputData(PRAWINPUT(Mess.LParam), RID_INPUT, lpb, @dwSize, SizeOf(TRAWINPUTHEADER));
    RI := PRAWINPUT(lpb);
    case RI.header.dwType of
      RIM_TYPEKEYBOARD: // keyboard dan geldi
            begin
if (RI.Data.keyboard.Mess = 257) then  begin // KEYUP
if (RI.Data.keyboard.VKey = 114) then begin // F3

                                       end; // F3
                                       end; // KEYUP
            end;// keyboard dan geldi
      RIM_TYPEHID: // HID cihazdan geldi
            begin
if (RI.Data.keyboard.Mess = 257) then  begin // KEYUP
if (RI.Data.keyboard.VKey = 114) then begin // F3

                                       end; // F3
                                       end; // KEYUP
            end;// HID cihazdan geldi

    end;
  finally
    FreeMem(lpb,DataSize);
  end;

end;
////////////////////////////////////////////////////////////////////////////////


Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
WWW
Cevapla

Konuyu Paylaş : facebook gplus twitter



Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  buton yardımı ile url açmak ve kullanıcı girişi sahin4169 1 111 07-12-2017, Saat: 15:19
Son Yorum: SimaWB
  Media player hızlı ileri alma Lord_Ares 2 185 29-11-2017, Saat: 01:26
Son Yorum: Lord_Ares
  Rad Studio Neden Bu Kadar Hızlı? savasabd 14 924 27-09-2017, Saat: 19:21
Son Yorum: ismailkocacan
  Edit boş geçilmesin Mericx 10 925 24-09-2017, Saat: 05:55
Son Yorum: hyperxman
  Hızlı satır okuma bu fonksiyonu çalıştıramadım satır okuma fonksiyonu Delphiseven 21 977 10-07-2017, Saat: 17:16
Son Yorum: ismailkocacan



Konuyu Okuyanlar: 1 Ziyaretçi