Форум: "Компоненты";
Текущий архив: 2005.11.13;
Скачать: [xml.tar.bz2];
ВнизReadOnly for TComboBox Найти похожие ветки
← →
Elast (2005-03-12 10:00) [0]Уважаемые мастера! При попытке реализовать сабж следующим кодом ничего не происходит, т.е. я хотел запретить выпадение списка ListBox
.....
type
TfdComboBox = class(TComboBox)
private
FReadOnly : Boolean;
procedure SetReadOnly(const Value: Boolean);
protected
public
constructor Create (AOwner : TComponent); override;
destructor Destroy; override;
property ReadOnly: Boolean read FReadOnly write SetReadOnly default False;
end;
implementation
constructor TfdComboBox.Create(AOwner: TComponent);
begin
inherited;
FReadOnly := False;
end;
destructor TfdComboBox.Destroy;
begin
inherited;
end;
procedure TfdComboBox.SetReadOnly(const Value: Boolean);
begin
if FReadOnly <> Value then begin
FReadOnly := Value;
if HandleAllocated then
SendMessage(Handle, EM_SETREADONLY, Ord(Value), 0);
end;
end;
...........
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
FfdComboBox : TfdComboBox;
public
{ Public declarations }
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
FfdComboBox := TfdComboBox.Create(Self);
with FfdComboBox do begin
Parent := Self;
Style := csDropDownList;
Items.Add("qqqqqqqqq");
Items.Add("wwwwwwwww");
Items.Add("eeeeeeeee");
Left := 10;
Top := 10;
Width := 200;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
FfdComboBox.ReadOnly := True;
end;
Возможно ли это? Или проще установить Enabled := False и перерисовать Canvas объекта, но тоже не получается.
← →
Cobalt © (2005-03-12 10:45) [1]Во-первых, поясни - как именно функционирует режим "ReadOnly" в твоём понимании?
По табу фокус должен получать?
Как зависит от стиля?
← →
Elast (2005-03-12 11:57) [2]1. ... , т.е. я хотел запретить выпадение списка ListBox
2.Style := csDropDownList
← →
Юрий Зотов © (2005-03-12 17:52) [3]> Elast
Конструктор и деструктор - выкинуть (лишние), остальное так:
TfdComboBox = class(TComboBox)
private
FReadOnly: boolean;
FSaveStyle: TComboBoxStyle;
procedure SetReadOnly(const Value: Boolean);
protected
procedure CreateWnd; override;
procedure SetStyle(Value: TComboBoxStyle); override;
published
property ReadOnly: Boolean read FReadOnly write SetReadOnly default False;
end;
procedure TfdComboBox.CreateWnd;
begin
inherited;
if FReadOnly then
SendMessage(EditHandle, EM_SETREADONLY, 1, 0)
end;
procedure TfdComboBox.SetReadOnly(const Value: Boolean);
begin
if FReadOnly <> Value then
begin
FReadOnly := Value;
SendMessage(EditHandle, EM_SETREADONLY, Integer(FReadOnly), 0);
if FReadOnly then
begin
FSaveStyle := Style;
Style := csSimple
end
else
Style := FSaveStyle
end
end;
procedure TfdComboBox.SetStyle(Value: TComboBoxStyle);
begin
if (Value = csSimple) or not FReadOnly then
begin
inherited;
if not FReadOnly then
FSaveStyle := Style
end
end;
← →
Elast (2005-03-12 18:59) [4]2 Юрий Зотов
Большое спасибо. Это то, что я хотел, но обнаружилось, что ComboBox при новом стиле можно корректировать клавишей
BackSpace - :-(
← →
Юрий Зотов © (2005-03-12 19:52) [5]Добавьте в protected:
procedure KeyPress(var Key: Char); override;
procedure TfdComboBox.KeyPress(var Key: Char);
begin
if FReadOnly then
Key := #0
else
inherited
end;
Страницы: 1 вся ветка
Форум: "Компоненты";
Текущий архив: 2005.11.13;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.041 c