Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.11.13;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.088 c
14-1129810870
wHammer
2005-10-20 16:21
2005.11.13
Как перевести исходники с версии 6 на версию 5


5-1108464410
sau
2005-02-15 13:46
2005.11.13
TreeView и ActiveX


2-1129442715
serg128
2005-10-16 10:05
2005.11.13
Как заменить первую маленькую букву на большую?


2-1130083068
~SaM~
2005-10-23 19:57
2005.11.13
Треугольник


2-1129911328
Volf_555
2005-10-21 20:15
2005.11.13
Выделение подстроки из строки