Passes the name of every predefined character set string to a callback function.
procedure GetCharsetValues(Proc: TGetStrProc);
GetCharsetValues(TGetStrProc Proc);
Graphics
Call GetCharsetValues to execute a callback for every character set name that has a corresponding constant defined in the application. The Proc parameter is the callback function that is called for every character set constant name.
C++ Examples:
/* The following example shows how to complete partial strings typed into a combo box. The code represents the OnKeyPress event handler of the combo box, which performs most of the default keystroke handling before finding a matching list item and updating the text. Note: This OnKeyPress event handler does not deal with the case when the user types the Delete key. That case must be caught in the OnKeyDown event handler instead. */ void __fastcall TForm1::ComboBox1KeyPress(TObject *Sender, char &Key) { // first, process the keystroke to obtain the current string // This code requires all items in list to be uppercase if (Key >= 'a' && Key <= 'z') Key -= 32; // Force Uppercase only! TComboBox *pCB = (TComboBox *)Sender; AnsiString TmpStr; bool BackSpace = (Key == (char)VK_BACK); if (BackSpace && pCB->SelLength) TmpStr = pCB->Text.SubString(1,pCB->SelStart)+ pCB->Text.SubString(pCB->SelLength+pCB->SelStart+1,255); else if (BackSpace) // SelLength == 0 TmpStr = pCB->Text.SubString(1,pCB->SelStart-1)+ pCB->Text.SubString(pCB->SelStart+1,255); else //Key is a visible character TmpStr = pCB->Text.SubString(1,pCB->SelStart)+ Key + pCB->Text.SubString(pCB->SelLength+pCB->SelStart+1,255); if (TmpStr.IsEmpty()) return; // set SelSt to the current insertion point int SelSt = pCB->SelStart; if (BackSpace && SelSt > 0) SelSt--; else if (!BackSpace) SelSt++; Key = 0; // indicate that key was handled if (SelSt == 0) { pCB->Text = ""; return; } // Now that TmpStr is the currently typed string, see if we can locate a match bool Found = false; for (int i = 1; i < pCB->Items->Count; i++) if (TmpStr == pCB->Items->Strings[i-1].SubString(1,TmpStr.Length())) { pCB->Text = pCB->Items->Strings[i-1]; // update to the match that was found pCB->ItemIndex = i-1; Found = true; break; } if (Found) // select the untyped end of the string { pCB->SelStart = SelSt; pCB->SelLength = pCB->Text.Length() - SelSt; } else Beep(); } //--------------------------------------------------------------------------- TStringList *CharSetList; void __fastcall TForm1::AddCharacterSet(AnsiString S) { CharSetList->Add(S); } void __fastcall TForm1::FormCreate(TObject *Sender) { CharSetList = new TStringList(); GetCharsetValues(AddCharacterSet); CharSetList->Sort(); ComboBox1->Items = CharSetList; }
Delphi Examples:
{ The following uses the GetCharsetValues procedure to fill a string list with the names of all the available character set constants. This string list can then be used to allow the user to select a character set. Here is the callback that adds the character sets to the string list: } var CharSetList : TStringList; procedure TForm1.AddCharacterSet(const S: string); begin CharSetList.Add(S); end; { Here is the code that creates the string list, fills it, and sorts the character set names. } procedure TForm1.Button1Click(Sender: TObject); begin CharSetList := TStringList.Create; Graphics.GetCharsetValues(AddCharacterSet); CharSetList.Sort; ListBox1.Items := CharSetList; CharSetList.Destroy; end;
{ The following example shows how to complete partial strings typed into a combo box. The code represents the OnKeyPress event handler of the combo box, which performs most of the default keystroke handling before finding a matching list item and updating the text. Note: This OnKeyPress event handler does not deal with the case when the user types the Delete key. That case must be caught in the OnKeyDown event handler instead. Note: Set the TComboBox AutoComplete to false to turn off default auto completion. } procedure TForm1.ComboBox1KeyPress(Sender: TObject; var Key: Char); var Found: boolean; i, ct, SelSt: Integer; TmpStr: string; begin { first, process the keystroke to obtain the current string } { This code requires all items in list to be uppercase} if Key in ['a'..'z'] then Dec(Key,32); {Force Uppercase only!} ct := (Sender as TComboBox).Items.Count; with (Sender as TComboBox) do begin SelSt := SelStart; if (Key = Chr(vk_Back)) and (SelLength <> 0) then TmpStr := Copy(Text, 1, SelStart) + Copy(Text, SelLength + SelStart + 1, 255) else if Key = Chr(vk_Back) then {SelLength = 0} TmpStr := Copy(Text, 1, SelStart-1) + Copy(Text, SelStart + 1,255) else {Key in ['A'..'Z', etc]} TmpStr := Copy(Text, 1, SelStart) + Key + Copy(Text, SelLength + SelStart + 1, 255); if TmpStr = '' then Exit; { update SelSt to the current insertion point } if (Key = Chr(vk_Back)) and (SelSt > 0) then Dec(SelSt) else if Key <> Chr(vk_Back) then Inc(SelSt); Key := #0; { indicate that key was handled } if SelSt = 0 then begin Text:= ''; Exit; end; {Now that TmpStr is the currently typed string, see if we can locate a match } Found := False; for i := 1 to ct do begin if Copy(Items[i - 1], 1, Length(TmpStr)) = TmpStr then begin Text := Items[i-1]; { update to the match that was found } ItemIndex := i-1; Found := True; Break; end; end; if Found then { select the untyped end of the string } begin SelStart := SelSt; SelLength := Length(Text) - SelSt; end else Beep; end; end; var CharSetList : TStringList; procedure TForm1.AddCharacterSet(const S: string); begin CharSetList.Add(S); end; procedure TForm1.FormCreate(Sender: TObject); begin CharSetList := TStringList.Create; Graphics.GetCharsetValues(AddCharacterSet); ComboBox1.Items := CharSetList; end;
Copyright(C) 2008 CodeGear(TM). All Rights Reserved.
|
What do you think about this topic? Send feedback!
|