Советы по Delphi


Ошибка в TDBComboBox или особенность работы?


Форма предназначена для ввода новой информации и работает с двумя таблицами – master и detail. Необходимо, чтобы все компоненты формы (DBEdit, DBComboBox) при открытии отображали пустые строки. Информация из таблицы детализации содержится в DBComboBox. Список создается стандартным способом - DBComboBox.Items.Add(Fields[1].AsString. Если DBComboBox.ItemIndex := -1, то должна отображаться пустая строка. При открытии формы в DBComboBox отображается информация последней записи таблицы детализации. Почему последняя строка– надеюсь понятно. Если заменить в процедуре инициализации списка DBComboBox.ItemIndex := -1 на DBComboBox.Text := ''; то появляется другая странность: Пользователь раскрывает список и, ничего не выбрав, переходит на другой компонент – в DBComboBox вновь появляется информация последней записи таблицы детализации. Исправить это поведение DBComboBox можно так - если в модуле DBCTRLS.PAS изменить SetComboText:

    procedure TDBComboBox.SetComboText(const Value: string);
var
I: Integer; Redraw: Boolean; begin
if
Value <> GetComboText then begin

if
Style <> csDropDown then begin Redraw := (Style <> csSimple) and HandleAllocated; if Redraw then SendMessage(Handle, WM_SETREDRAW, 0, 0); try //------ ADD --------------------------------------------------------------------------------
if ItemIndex = -1 then begin Text := ''; Exit; end; //----------------------------------------------------------------------------------------------
if Value = '' then I := -1 else I := Items.IndexOf(Value); ItemIndex := I; finally if Redraw then begin SendMessage(Handle, WM_SETREDRAW, 1, 0); Invalidate; end; end; if I >= 0 then Exit; end; if Style in [csDropDown, csSimple] then Text := Value; end; end;

После этого откомпилировать модуль DBCTRLS.PAS и заменить старый. Но может быть есть другие варианты.

С уважением, VS. [000911]



Содержание раздела