lucksjb Posted March 6, 2013 Share Posted March 6, 2013 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. Quote Link to comment Share on other sites More sharing options...
Ronak Posted March 8, 2013 Share Posted March 8, 2013 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 Quote Link to comment Share on other sites More sharing options...
Administrators Farshad Mohajeri Posted March 8, 2013 Administrators Share Posted March 8, 2013 - 0001449: New feature for editable Controls: CheckChangeDelay property. (see "Delayed Search" demo) 1 Quote Link to comment Share on other sites More sharing options...
lucksjb Posted March 11, 2013 Author Share Posted March 11, 2013 tnx a lot. I update my uniGUI and now have CheckChangeDelay property and working Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.