…попробуйте сохранять в переменной в методе формы OnEnter или OnCreate значение Index. Затем, чтобы отменить выбор пользователя, сделайте:
ComboBox1.ItemIndex := var1;
DBEdit
Исправление DBEdit MaxLength
Delphi 1
Я, кажется, не могу получить свойство MaxLength, чтобы работать с компонентами TDBEdit. В TEdit это работает
как положено, но при попытке задать максимальную длину текста в TDBEdit это не срабатывает, и я все еще могу набрать текст сверх установленного ограничения.
По-моему, это является следствием этого кода в TDBEdit.DataChange (DBCTRLS.PAS):
if FDataLink.Field <> nil then begin
…
if FDataLink.Field.DataType = ftString then MaxLength := FDataLink.Field.Size
else MaxLength := 0;
…
end else begin
…
MaxLength := 0;
…
end;
т.к. иногда значение устанавливается на ноль…
Похоже все будет работать, если вы измените строку
MaxLength := 0;
на
MaxLength := inherited MaxLength;
Для того, чтобы изменения вступили в силу, вам необходимо перекомпилировать ваш complib с измененным DBCTRLS.PAS, находящимся в пути lib.
Если вы хотите использовать MaxLength с StringField, изменений необходимо сделать немного больше:
…
if (FDataLink.Field.DataType = ftString) and (inherited MaxLength = 0) then
MaxLength := FDataLink.Field.Size
else MaxLength := inherited MaxLength;
…
Или использовать что-то типа EditMask…
– Reinhard Kalinke
Поиск и управление TEdit/TField
Я хотел бы менять цвет компонентов TDBEdit и TEdit, расположенных на форме, на другой, "отчетливый" цвет, в том случае, если с помощью них требуется ввести какие-либо данные.
Как насчет этого? Представляю вашему вниманию два метода. Первый метод задает цвет каждому DBEdit, имеющему требуемое поле. Второй метод (более сложный) задает цвет каждому БД-компоненту, имеющему необходимое поле.
procedure TForm3.Button3Click(Sender: TObject);
Var Control : Integer;
begin
For Control := 0 To ControlCount-1 Do
If Controls[Control] Is TDBEdit Then
With TDBEdit(Controls[Control]) Do
If DataSource.DataSet.FieldByName(DataField).Required Then Color := clRed;
end;
{
Данный метод будет работать только в случае, если БД-компонент обладает тремя полями: DataSource, типа TDataSource, DataField, типа String, и Color, типа TColor (это не должно быть проблемой). Также вам необходимо включить TypInfo в список используемых модулей }
procedure TForm3.Button4Click(Sender: TObject);
Var
Control : Integer;
DataSource : TDataSource;
DataField : String;
Function GetDataSource(Instance: TComponent) : Boolean;