Jump to content

Recommended Posts

Posted

Hi, 

I try to do a incremental search using onchange on a uniedit field. but if I typing fast, dont work. 

how can I solve this ?

 

Tnx advanced.

Luciano 

 

 

///// FORM 

 

object MainForm: TMainForm
  Left = 0
  Top = 0
  Caption = 'MainForm'
  ClientHeight = 495
  ClientWidth = 773
  Color = clBtnFace
  OldCreateOrder = False
  OnCreate = UniFormCreate
  MonitoredKeys.Keys = <>
  PixelsPerInch = 96
  TextHeight = 13
  object UniDBGrid1: TUniDBGrid
    Left = 0
    Top = 74
    Width = 769
    Height = 418
    Hint = ''
    DataSource = DataSource1
    Options = [dgEditing, dgTitles, dgIndicator, dgColumnResize, dgColLines, dgRowLines, dgTabs, dgConfirmDelete, dgCancelOnExit, dgTitleClick, dgTitleHotTrack]
    WebOptions.LoadMaskMsg = 'Please wait...'
    OnAjaxEvent = UniDBGrid1AjaxEvent
    StripeRows = False
    TabOrder = 0
  end
  object UniEdit1: TUniEdit
    Left = 24
    Top = 46
    Width = 345
    Height = 22
    Hint = ''
    PasswordChar = #0
    CharCase = ecNormal
    MaxLength = 0
    CharEOL = #0
    Text = ''
    TabOrder = 1
    Color = clWindow
    OnChange = UniEdit1Change
    OnAjaxEvent = UniEdit1AjaxEvent
  end
  object ADOConnection1: TADOConnection
    Connected = True
    ConnectionString = 
      'Provider=SQLOLEDB.1;Password=xxxx;Persist Security Info=True' +
      ';User ID=sa;Initial Catalog=l_dep_brasil;Data Source=192.168.0.1' +
      '60'
    LoginPrompt = False
    Provider = 'SQLOLEDB.1'
    Left = 720
    Top = 8
  end
  object ADOQuery1: TADOQuery
    Connection = ADOConnection1
    CursorType = ctStatic
    Parameters = <>
    SQL.Strings = (
      'Select Codigo_cli, Nome_cli from clientes_tb ')
    Left = 624
  end
  object DataSource1: TDataSource
    DataSet = ADOQuery1
    Left = 528
  end
end
 
 
 
///// UNIT 
 
unit Main;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics,
  Controls, Forms, Dialogs, uniGUITypes, uniGUIAbstractClasses,
  uniGUIClasses, uniGUIForm, uniGUIBaseClasses, uniButton, uniEdit, Data.DB,
  uniBasicGrid, uniDBGrid, Data.Win.ADODB;
 
type
  TMainForm = class(TUniForm)
    ADOConnection1: TADOConnection;
    ADOQuery1: TADOQuery;
    UniDBGrid1: TUniDBGrid;
    DataSource1: TDataSource;
    UniEdit1: TUniEdit;
    procedure UniEdit1Change(Sender: TObject);
    procedure UniFormCreate(Sender: TObject);
    procedure UniEdit1AjaxEvent(Sender: TComponent; EventName: string;
      Params: TStrings);
    procedure UniDBGrid1AjaxEvent(Sender: TComponent; EventName: string;
      Params: TStrings);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
function MainForm: TMainForm;
 
implementation
 
{$R *.dfm}
 
uses
  uniGUIVars, MainModule, uniGUIApplication;
 
function MainForm: TMainForm;
begin
  Result := TMainForm(UniMainModule.GetFormInstance(TMainForm));
end;
 
procedure TMainForm.UniDBGrid1AjaxEvent(Sender: TComponent; EventName: string;
  Params: TStrings);
begin
      UniEdit1.SetFocus;
end;
 
procedure TMainForm.UniEdit1AjaxEvent(Sender: TComponent; EventName: string;
  Params: TStrings);
begin
     UniEdit1.SetFocus;
end;
 
procedure TMainForm.UniEdit1Change(Sender: TObject);
begin
    ADOQuery1.Locate('Nome_cli',UniEdit1.Text,[loPartialKey]);
end;
 
procedure TMainForm.UniFormCreate(Sender: TObject);
begin
    ADOQuery1.Open;
end;
 
initialization
  RegisterMainFormClass(TMainForm);
 
end.
 
 
 
 
Posted
In web application refresh/locate on every key-press/change of an Edit is Avoidable.
 
Try refresh/locate when user types a complete word!
I mean to say when user finish typing a word, or a complete sentence start locate or re-query.
 
 
Set
1 > Timer interval := 250                  // design Time
2 > TimerRefresh.Enabled:=False;   // design Time
 
procedure TMainForm.UniEdit1Change(Sender: TObject);
begin
      TimerRefresh.Enabled:=False;
      TimerRefresh.Tag:=0;
      TimerRefresh.Enabled:=True;
end;
 
 
procedure TMainForm.TimerRefreshTimer(Sender: TObject);
begin
   if WebMode then begin    //    http://forums.unigui.com/index.php?/topic/2864-unitimer-and-the-ontimer-event/
      if TimerRefresh.Tag=1 then begin
         TimerRefresh.Enabled:=False;
         ADOQuery1.Locate('Nome_cli',UniEdit1.Text,[loPartialKey]);
      end else begin
         TimerRefresh.Tag:=1
      end;
   end else begin
      TimerRefresh.Enabled:=False;     
      ADOQuery1.Locate('Nome_cli',UniEdit1.Text,[loPartialKey]);

  end;

end;
 
Regards

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...