combobox的自动筛选功能怎么实现啊?

火猴 2004-04-27 12:07:08
就和Delphi的编译环境一样.在combobox里面我输入a,就把以a开头的都筛选出来,再输入b,就把以ab开头的都筛选出来,其他的"消失"(包括隐藏,删除,反正就是客户看不到)
...全文
534 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
jacky_shen 2004-04-28
  • 打赏
  • 举报
回复
上述代码来自网络,感谢源代码的作者(忘记了出处)。
jacky_shen 2004-04-28
  • 打赏
  • 举报
回复
STD.INC

(********************************************************)
(* *)
(* Object Modeler Class Library *)
(* *)
(* Open Source Released 2000 *)
(* *)
(* *)
(* Unit naming convetions: *)
(* *)
(* Either a descriptive name such as Buttons or Grids *)
(* or a descriptive name followed by one of these *)
(* suffixes: *)
(* *)
(* XXXCtrls *)
(* XXXIntf *)
(* XXXMgr *)
(* XXXObj *)
(* XXXReg *)
(* XXXSvr *)
(* XXXTools *)
(* XXXTypes *)
(* XXXUtils *)
(* *)
(********************************************************)

{$IFDEF VER93}
{$DEFINE C1}
{$ENDIF}

{$IFDEF VER100}
{$DEFINE C1}
{$DEFINE D3}
{$ENDIF}

{$IFDEF VER110}
{$DEFINE C1}
{$DEFINE D3}
{$DEFINE C3}
{$ENDIF}

{$IFDEF VER120}
{$DEFINE C1}
{$DEFINE D3}
{$DEFINE C3}
{$DEFINE D4}
{$ENDIF}

{$IFDEF VER125}
{$DEFINE C1}
{$DEFINE D3}
{$DEFINE C3}
{$DEFINE D4}
{$DEFINE C4}
{$ENDIF}

{$IFDEF VER130}
{$DEFINE C1}
{$DEFINE D3}
{$DEFINE C3}
{$DEFINE D4}
{$DEFINE C4}
{$DEFINE D5}
{$ENDIF}

{$B-} { Complete Boolean Evaluation }
{$R-} { Range-Checking }
{$V-} { Var-String Checking }
{$T-} { Typed @ operator }
{$X+} { Extended syntax }
{$P+} { Open string params }
{$IFDEF WIN32}
{$J+} { Writeable structured consts }
{$H+} { Use long strings by default }
{$ENDIF}


{ Remove the . to activate compile modes }

{$DEFINE COMPONENT}

{.$DEFINE DEBUGMODE}

{$IFNDEF DEBUGMODE}
{$L-}
{$D-}
{$Y-}
{$ENDIF}
jacky_shen 2004-04-28
  • 打赏
  • 举报
回复
StrTools.pas [单元]

procedure SearchAndReplace(Strings: TStrings; const SearchStr: string; ReplaceFunc: TReplaceFunc);
var
ReplaceStr: string;
Buffer: string;
Match: Integer;
I: Integer;
begin
ReplaceStr := '';
Strings.BeginUpdate;
try
for I := 0 to Strings.Count - 1 do
begin
Buffer := Strings[I];
Match := Pos(SearchStr, Buffer);
while (Match > 0) and ReplaceFunc(ReplaceStr) do
begin
Buffer := Copy(Buffer, 1, Match-1) + ReplaceStr + Copy(Buffer, Match + Length(SearchStr), Length(Buffer));
Match := Pos(SearchStr, Buffer);
end;
Strings[I] := Buffer;
end;
finally
Strings.EndUpdate;
end;
end;

procedure StrPad(const Source: string; Dest: PChar; Size: Integer; PadAlign: TPadAlign; Pad: Char);
begin
FillMemory(Dest, Size, Byte(Pad));
if PadAlign = paRight then
Inc(Dest, Size - MinIntValue([Length(Source), Size]));
CopyMemory(Dest, Pointer(Source), MinIntValue([Length(Source), Size]));
end;

function TrimSeparator(const S: string; Separator: Char): string;
var
P: PChar;
begin
Result := '';
if S <> '' then
begin
P := PChar(S);
while (P^ <> #0) and (P^ <> Separator) do
Inc(P);
if P^ <> #0 then
Inc(P);
Result := P;
end;
end;

{ TComplexField }

const
ComplexCharacters = AlphaNumeric;
ComplexSeperators = [#1..#255] - ComplexCharacters;

function TComplexField.GetCount: Integer;
var
P: PChar;
begin
Result := 0;
if FData <> '' then
begin
P := PChar(FData);
while P^ <> #0 do
begin
while P^ in ComplexSeperators do
Inc(P);
if P^ in ComplexCharacters then
Inc(Result);
while P^ in ComplexCharacters do
Inc(P);
end;
end;
end;

function TComplexField.IndexOf(const S: string): Integer;
var
TempStr: string;
I: Integer;
begin
Result := -1;
TempStr := UpperCase(S);
for I := 0 to Count - 1 do
if TempStr = UpperCase(Item[I]) then
begin
Result := I;
Break;
end;
end;

function TComplexField.GetItem(Index: Integer): string;
var
StartPos: PChar;
P: PChar;
I: Integer;
begin
Result := '';
if (Index < 0) or (Index > Count - 1) then
raise EComplexFieldError.Create(SRangeIndexError);
P := PChar(FData);
I := 0;
while P^ <> #0 do
begin
while P^ in ComplexSeperators do
Inc(P);
StartPos := P;
if P^ in ComplexCharacters then
begin
while P^ in ComplexCharacters do
Inc(P);
if I = Index then
begin
SetString(Result, StartPos, P - StartPos);
Break;
end;
Inc(I);
end;
end;
end;

procedure TComplexField.SetItem(Index: Integer; const Value: string);
var
P: PChar;
StartPos: PChar;
I: Integer;
begin
if (Index < 0) or (Index > Count - 1) then
raise EComplexFieldError.Create(SRangeIndexError);
P := PChar(FData);
StartPos := P;
I := -1;
while P^ <> #0 do
begin
while P^ in ComplexSeperators do
Inc(P);
StartPos := P;
while P^ in ComplexCharacters do
Inc(P);
Inc(I);
if I = Index then
Break;
end;
FData := Copy(FData, 1, StartPos - PChar(FData)) + Value +
Copy(FData, P - PChar(FData) + 1, Length(FData));
end;

{ TEnumString }

constructor TEnumString.Create(Strings: TStrings);
begin
inherited Create;
FStrings := Strings;
end;

{ TEnumString.IEnumString }

function TEnumString.Next(celt: Longint;
out elt; pceltFetched: PLongint): HResult;
var
I: Integer;
begin
I := 0;
while (I < celt) and (FIndex < FStrings.Count) do
begin
TPointerList(elt)[I] := PWideChar(WideString(FStrings[FIndex]));
Inc(I);
Inc(FIndex);
end;
if pceltFetched <> nil then pceltFetched^ := I;
if I = celt then Result := S_OK else Result := S_FALSE;
end;


function TEnumString.Skip(celt: Longint): HResult;
begin
if (FIndex + celt) <= FStrings.Count then
begin
Inc(FIndex, celt);
Result := S_OK;
end
else
begin
FIndex := FStrings.Count;
Result := S_FALSE;
end;
end;

function TEnumString.Reset: HResult;
begin
FIndex := 0;
Result := S_OK;
end;

function TEnumString.Clone(out enm: IEnumString): HResult;
begin
try
enm := TEnumString.Create(FStrings);
Result := S_OK;
except
Result := E_UNEXPECTED;
end;
end;

end.
jacky_shen 2004-04-28
  • 打赏
  • 举报
回复
StrTools.pas [单元]

(********************************************************)
(* *)
(* Object Modeler Class Library *)
(* *)
(* Open Source Released 2000 *)
(* *)
(********************************************************)

unit StrTools;

interface

{$I STD.INC}

uses
Windows, SysUtils, Classes, Math, TypInfo, ActiveX;

const
Alpha = ['A'..'Z', 'a'..'z'];
Numeric = ['0'..'9'];
AlphaNumeric = Alpha + Numeric;

{ The AdvanceToken function does a case insensitive search of Buffer for
SearchStr, and returns True if a match is found. Buffer is modified to
point to the character after the match. }

function AdvanceToken(var Buffer: PChar; const SearchStr: string): Boolean;

{ The GetComponentName function returns the name of the Component parameter. If
the component has no name, the function creates a unique name. }

function GetComponentName(Component: TComponent): string;

{ The GetComponentPath function returns a string that represents the ownership
of the Component parameter. }

function GetComponentPath(Component: TComponent): string;

{ The MaskConvert function returns a formated string from Source as defined by
Mask. Any characters in Source that don't match the Mask string are replaced
with DefaultChar. Mask can contain the following special characters:

'C' Filters source string for the first occurance of an Alpha character
'D' Filters source string for the first occurance of an Numeric character
'?' Accepts any character

For example:
MaskConvert('1235551212', '(DDD) DDD-DDDDD', '0') returns '(123) 555-1212'
MaskConvert('(123) 555-1212', 'DDDDDDDDDDD', '0') returns '1235551212' }

function MaskConvert(const Source: string; const Mask: string; DefaultChar: Char): string;

{ The SearchAndReplace procedure performs a case-sensitive search for SearchStr
and calls ReplaceFunc for each a match found. If ReplaceFunc returns True then
SearchStr is replaced with S. }

type
TReplaceFunc = function (var S: string): Boolean;

procedure SearchAndReplace(Strings: TStrings; const SearchStr: string; ReplaceFunc: TReplaceFunc);

{ The StrPad procedure copies Source string into the Dest buffer, aligning it
left or right and filling any extra bytes with the Pad character. }

type
TPadAlign = (paLeft, paRight);

procedure StrPad(const Source: string; Dest: PChar; Size: Integer;
PadAlign: TPadAlign; Pad: Char);

{ The TrimSeparator function returns a copy of S from the character after the
Separator parameter to the end of the string. }

function TrimSeparator(const S: string; Separator: Char): string;

{ TComplexField class }

type
EComplexFieldError = class(Exception);

TComplexField = class
private
FData: string;
function GetCount: Integer;
function GetItem(Index: Integer): string;
procedure SetItem(Index: Integer; const Value: string);
public
function IndexOf(const S: string): Integer;
property Count: Integer read GetCount;
property Data: string read FData write FData;
property Item[index: Integer]: string read GetItem write SetItem; default;
end;

{ TEnumString class }

TEnumString = class(TInterfacedObject, IEnumString)
private
FStrings: TStrings;
FIndex: Integer;
protected
{ IEnumString }
function Next(celt: Longint; out elt;
pceltFetched: PLongint): HResult; stdcall;
function Skip(celt: Longint): HResult; stdcall;
function Reset: HResult; stdcall;
function Clone(out enm: IEnumString): HResult; stdcall;
public
constructor Create(Strings: TStrings);
end;

implementation

uses
StrConst;

function AdvanceToken(var Buffer: PChar; const SearchStr: string): Boolean;
var
Token: PChar;
begin
Token := PChar(SearchStr);
while Buffer^ <> #0 do
begin
if UpCase(Buffer^) = Token^ then
Inc(Token)
else if Token <> PChar(SearchStr) then
begin
Token := PChar(SearchStr);
if UpCase(Buffer^) = Token^ then
Inc(Token);
end;
Inc(Buffer);
if Token^ = #0 then
Break;
end;
Result := Token^ = #0;
end;

function GetComponentName(Component: TComponent): string;
var
S: string;
I: Integer;
begin
Result := Component.Name;
if Result = '' then
begin
S := Component.ClassName;
I := 1;
if Component.Owner <> nil then
while Component.Owner.FindComponent(PChar(@S[2]) + IntToStr(I)) <> nil do
Inc(I);
Result := PChar(@S[2]) + IntToStr(I);
end;
end;

function GetComponentPath(Component: TComponent): string;
var
S: string;
begin
if Component <> nil then
begin
S := GetComponentPath(Component.Owner);
if S <> '' then
Result := S + DotSep + GetComponentName(Component)
else
Result := S + GetComponentName(Component);
end
else
Result := '';
end;

function MaskConvert(const Source: string; const Mask: string; DefaultChar: Char): string;
var
P: PChar;
I: Integer;

procedure DefaultAction;
begin
if UpCase(Mask[I]) in ['C', 'D', '?'] then
Result := Result + DefaultChar
else
Result := Result + Mask[I];
end;

begin
P := PChar(Source);
Result := '';
for I := 1 to Length(Mask) do
if P^ <> #0 then
begin
case UpCase(Mask[I]) of
'C':
begin
while (P^ <> #0) and (not (P^ in Alpha)) do
Inc(P);
if P^ <> #0 then
Result := Result + P^
else
begin
DefaultAction;
Continue;
end;
end;
'D':
begin
while (P^ <> #0) and (not (P^ in Numeric)) do
Inc(P);
if P^ <> #0 then
Result := Result + P^
else
begin
DefaultAction;
Continue;
end;
end;
'?':
Result := Result + P^
else
begin
Result := Result + Mask[I];
Continue;
end;
end;
Inc(P);
end
else
DefaultAction;
end;
jacky_shen 2004-04-28
  • 打赏
  • 举报
回复
StrConst.pas [单元]

(********************************************************)
(* *)
(* Object Modeler Class Library *)
(* *)
(* Open Source Released 2000 *)
(* *)
(********************************************************)

unit StrConst;

{$I STD.INC}

interface

resourcestring
SRangeIndexError = 'Index outside of range bounds';
SLauncherFileError = 'Cannot launch specified filename';
SLauncherTerminateError = 'Cannot terminate application';
SInvalidMode = 'Pipe does not support this operation';
SNoStorageSpecified = 'No storage specified in call to open stream';
SNotConnected = 'Pipe not connected';
SStorageNotOpen = 'Storage not open';
SStreamNotOpen = 'Stream not open';
SMutexCreateError = 'Unable to create mutex';
SMapppingCreateError = 'Unable to create file mapping';
SViewMapError = 'Cannot map view of file';
SFileOpenError = 'Cannot open file';
SNotLocked = 'Data not locked';
SElapsedTime = 'Cannot get elapsed time';
STimerError = 'Cannot %s timer';
SCannotFocusSprite = 'Cannot focus a disabled or invisible sprite';
SNameNotUnique = 'Name "%s" is not unique';
SSocketCreateError = 'Error creating socket';
SWinSocketError = 'Windows socket error: %s (%d), on API ''%s''';
SInvalidPropertyKind = 'Invalid property kind';
SInvalidPropertyValue = 'Invalid property value';
SUnexpectedToken = 'Unexpected token at position %d';
SOpenFailed = 'Unable to open com port';
SWriteFailed = 'WriteFile function failed';
SReadFailed = 'ReadFile function failed';
SInvalidAsync = 'Invalid Async parameter';
SPurgeFailed = 'PurgeComm function failed';
SAsyncCheck = 'Unable to get async status';
SSetStateFailed = 'SetCommState function failed';
STimeoutsFailed = 'SetCommTimeouts failed';
SSetupComFailed = 'SetupComm function failed';
SClearComFailed = 'ClearCommError function failed';
SModemStatFailed = 'GetCommModemStatus function failed';
SEscapeComFailed = 'EscapeCommFunction function failed';
STransmitFailed = 'TransmitCommChar function failed';
SSyncMeth = 'Cannot set SyncMethod while connected';
SEnumPortsFailed = 'EnumPorts function failed';
SStoreFailed = 'Failed to store settings';
SLoadFailed = 'Failed to load settings';
SRegFailed = 'Terminal link (un)registration failed';
SLedStateFailed = 'Cannot change led state if com port is selected';
SNoParentStructure = 'No parent structure available';
SInvalidStructureName = '"%s" is not a valid structure name';
SDuplicateName = 'Duplicate names not allowed';
SNoOpenStructure = 'Cannot open structure';
SCannotPerformOperation = 'Cannot perform operation';

implementation

end.
jacky_shen 2004-04-28
  • 打赏
  • 举报
回复
ShlIntf.pas [单元]

(********************************************************)
(* *)
(* Object Modeler Class Library *)
(* *)
(* Open Source Released 2000 *)
(* *)
(********************************************************)

unit ShlIntf;

interface

{$I STD.INC}

uses
Windows;

const
// Class IDs
{$EXTERNALSYM CLSID_AutoComplete}
CLSID_AutoComplete: TGUID = (
D1:$00BB2763; D2:$6A77; D3:$11D0; D4:($A5,$35,$00,$C0,$4F,$D7,$D0,$62));
{$EXTERNALSYM CLSID_ACLHistory}
CLSID_ACLHistory: TGUID = (
D1:$00BB2764; D2:$6A77; D3:$11D0; D4:($A5,$35,$00,$C0,$4F,$D7,$D0,$62));
{$EXTERNALSYM CLSID_ACListISF}
CLSID_ACListISF: TGUID = (
D1:$03C036F1; D2:$A186; D3:$11D0; D4:($82,$4A,$00,$AA,$00,$5B,$43,$83));
{$EXTERNALSYM CLSID_ACLMRU}
CLSID_ACLMRU: TGUID = (
D1:$6756A641; D2:$DE71; D3:$11D0; D4:($83,$1B,$00,$AA,$00,$5B,$43,$83));
{$EXTERNALSYM CLSID_ACLMulti}
CLSID_ACLMulti: TGUID = (
D1:$00BB2765; D2:$6A77; D3:$11D0; D4:($A5,$35,$00,$C0,$4F,$D7,$D0,$62));

// Interface IDs
{$EXTERNALSYM IID_IAutoComplete}
IID_IAutoComplete: TGUID = (
D1:$00BB2762; D2:$6A77; D3:$11D0; D4:($A5,$35,$00,$C0,$4F,$D7,$D0,$62));
{$EXTERNALSYM IID_IAutoComplete2}
IID_IAutoComplete2: TGUID = (
D1:$EAC04BC0; D2:$3791; D3:$11D2; D4:($BB,$95,$00,$60,$97,$7B,$46,$4C));
{$EXTERNALSYM IID_IAutoCompList}
IID_IAutoCompList: TGUID = (
D1:$00BB2760; D2:$6A77; D3:$11D0; D4:($A5,$35,$00,$C0,$4F,$D7,$D0,$62));
{$EXTERNALSYM IID_IACList}
IID_IACList: TGUID = (
D1:$77A130B0; D2:$94FD; D3:$11D0; D4:($A5,$44,$00,$C0,$4F,$D7,$d0,$62));
{$EXTERNALSYM IID_IACList2}
IID_IACList2: TGUID = (
D1:$470141A0; D2:$5186; D3:$11D2; D4:($BB,$B6,$00,$60,$97,$7B,$46,$4C));
{$EXTERNALSYM IID_ICurrentWorkingDirectory}
IID_ICurrentWorkingDirectory: TGUID = (
D1:$91956D21; D2:$9276; D3:$11D1; D4:($92,$1A,$00,$60,$97,$DF,$5B,$D4));
{$EXTERNALSYM IID_IObjMgr}
IID_IObjMgr: TGUID = (
D1:$00BB2761; D2:$6A77; D3:$11D0; D4:($A5,$35,$00,$C0,$4F,$D7,$D0,$62));

// String constants for Interface IDs
SID_IAutoComplete = '{00BB2762-6A77-11D0-A535-00C04FD7D062}';
SID_IAutoComplete2 = '{EAC04BC0-3791-11D2-BB95-0060977B464C}';
SID_IACList = '{77A130B0-94FD-11D0-A544-00C04FD7d062}';
SID_IACList2 = '{470141A0-5186-11D2-BBB6-0060977B464C}';
SID_ICurrentWorkingDirectory = '{91956D21-9276-11D1-921A-006097DF5BD4}';
SID_IObjMgr = '{00BB2761-6A77-11D0-A535-00C04FD7D062}';

type
{$EXTERNALSYM IAutoComplete}
IAutoComplete = interface(IUnknown)
[SID_IAutoComplete]
function Init(hwndEdit: HWND; punkACL: IUnknown; pwszRegKeyPath: PWideChar;
pwszQuickComplete: PWideChar): HResult; stdcall;
function Enable(fEnable: Boolean): HResult; stdcall;
end;

const
{$EXTERNALSYM ACO_NONE}
ACO_NONE = $0000;
{$EXTERNALSYM ACO_AUTOSUGGEST}
ACO_AUTOSUGGEST = $0001;
{$EXTERNALSYM ACO_AUTOAPPEND}
ACO_AUTOAPPEND = $0002;
{$EXTERNALSYM ACO_SEARCH}
ACO_SEARCH = $0004;
{$EXTERNALSYM ACO_FILTERPREFIXES}
ACO_FILTERPREFIXES = $0008;
{$EXTERNALSYM ACO_USETAB}
ACO_USETAB = $0010;
{$EXTERNALSYM ACO_UPDOWNKEYDROPSLIST}
ACO_UPDOWNKEYDROPSLIST = $0020;
{$EXTERNALSYM ACO_RTLREADING}
ACO_RTLREADING = $0040;

type
{$EXTERNALSYM IAutoComplete2}
IAutoComplete2 = interface(IAutoComplete)
[SID_IAutoComplete2]
function SetOptions(dwFlag: DWORD): HResult; stdcall;
function GetOptions(out dwFlag: DWORD): HResult; stdcall;
end;

{$EXTERNALSYM IACList}
IACList = interface(IUnknown)
[SID_IACList]
function Expand(pszExpand: PWideChar): HResult; stdcall;
end;

const
ACLO_NONE = 0; // don't enumerate anything
ACLO_CURRENTDIR = 1; // enumerate current directory
ACLO_MYCOMPUTER = 2; // enumerate MyComputer
ACLO_DESKTOP = 4; // enumerate Desktop Folder
ACLO_FAVORITES = 8; // enumerate Favorites Folder
ACLO_FILESYSONLY = 16; // enumerate only the file system

type
{$EXTERNALSYM IACList2}
IACList2 = interface(IACList)
[SID_IACList2]
function SetOptions(dwFlag: DWORD): HResult; stdcall;
function GetOptions(out pdwFlag: DWORD): HResult; stdcall;
end;

{$EXTERNALSYM IID_ICurrentWorkingDirectory}
ICurrentWorkingDirectory = interface(IUnknown)
[SID_ICurrentWorkingDirectory]
function GetDirectory(pwzPath: PWideChar; cchSize: DWORD): HResult; stdcall;
function SetDirectory(pwzPath: PWideChar): HResult; stdcall;
end;

{$EXTERNALSYM IObjMgr}
IObjMgr = interface(IUnknown)
[SID_IObjMgr]
function Append(punk: IUnknown): HResult; stdcall;
function Remove(punk: IUnknown): HResult; stdcall;
end;

implementation

end.
sandyboy 2004-04-28
  • 打赏
  • 举报
回复
哦?这么多不用吧?研究研究!
你不是要在把选中的记录添加到COMBOBOX里么?
把你like 的记录都添加到表里等到下一次change事件时先clear
然后再进行添加!

duhailee 2004-04-27
  • 打赏
  • 举报
回复
不用这么麻烦吧, D7的COMBOBOX都带有这样的功能了,何必自己写了。如果非要写,参考源码吧。
kaershaw 2004-04-27
  • 打赏
  • 举报
回复
在onchange里写事件!
火猴 2004-04-27
  • 打赏
  • 举报
回复
其实我已经实现一半了,就是当用户输入Back Space键时候没发处理.比如用户输入了abc了,然后把c删除了,ab就匹配不回来了
guge 2004-04-27
  • 打赏
  • 举报
回复
学习!
jacky_shen 2004-04-27
  • 打赏
  • 举报
回复
unit Main;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ShlIntf, ActiveX, ComObj, StdCtrls, StrTools;

type
TAutoCompleteForm = class(TForm)
CompletionEdit: TEdit;
CompletionLabel: TLabel;
SourceGroupBox: TGroupBox;
SourceMemo: TMemo;
procedure FormCreate(Sender: TObject);
private
FAutoComplete: IAutoComplete2;
FStrings: IUnknown;
end;

var
AutoCompleteForm: TAutoCompleteForm;

implementation

{$R *.DFM}

{ TAutoCompleteForm }

procedure TAutoCompleteForm.FormCreate(Sender: TObject);
begin
FAutoComplete := CreateComObject(CLSID_AutoComplete) as IAutoComplete2;
FStrings := TEnumString.Create(SourceMemo.Lines) as IUnknown;
OleCheck(FAutoComplete.SetOptions(ACO_AUTOSUGGEST or ACO_UPDOWNKEYDROPSLIST));
OleCheck(FAutoComplete.Init(CompletionEdit.Handle, FStrings, nil, nil));
end;

end.

----------------------------------------------------------

object AutoCompleteForm: TAutoCompleteForm
Left = 338
Top = 206
BorderStyle = bsDialog
Caption = 'Auto Completion Demo'
ClientHeight = 258
ClientWidth = 369
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
OnCreate = FormCreate
PixelsPerInch = 96
TextHeight = 13
object CompletionLabel: TLabel
Left = 8
Top = 12
Width = 24
Height = 13
Caption = 'Text:'
end
object CompletionEdit: TEdit
Left = 40
Top = 8
Width = 321
Height = 21
TabOrder = 0
end
object SourceGroupBox: TGroupBox
Left = 8
Top = 40
Width = 353
Height = 209
Caption = 'Source:'
TabOrder = 1
object SourceMemo: TMemo
Left = 8
Top = 16
Width = 337
Height = 185
Lines.Strings = (
'and'
'array'
'as'
'asm'
'begin'
'case'
'class'
'const'
'constructor'
'destructor'
'dispinterface'
'div'
'do'
'downto'
'else'
'end'
'except'
'exports'
'file'
'finalization'
'finally'
'for'
'function'
'goto'
'if'
'implementation'
'in'
'inherited'
'initialization'
'inline'
'interface'
'is'
'label'
'library'
'mod'
'nil'
'not'
'object'
'of'
'or'
'out'
'packed'
'procedure'
'program'
'property'
'raise'
'record'
'repeat'
'resourcestring'
'set'
'shl'
'shr'
'string'
'then'
'threadvar'
'to'
'try'
'type'
'unit'
'until'
'uses'
'var'
'while'
'with'
'xor')
ScrollBars = ssVertical
TabOrder = 0
end
end
end
火猴 2004-04-27
  • 打赏
  • 举报
回复
kaershaw(一苇渡江&&欲出江湖)
我知道啊,可是怎么具体实现?
_________________________
duhailee(阿牛)
"其他的"消失"(包括隐藏,删除,反正就是客户看不到)"这个在D7里面也实现不了啊~~
……………………………………
sandyboy(雨霆)
不明白啊
sandyboy 2004-04-27
  • 打赏
  • 举报
回复
用键盘DEL到是可以实现楼主的功能,但是Back Space好象不好用啊!

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧