Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Компоненты";
Текущий архив: 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.046 c
2-1130311987
HEXO4YXA
2005-10-26 11:33
2005.11.13
Работа с Variant


2-1130323509
SamProf
2005-10-26 14:45
2005.11.13
Как забить THread?


14-1129729245
Pavelkq
2005-10-19 17:40
2005.11.13
Структурная схема TStringList


3-1127822146
VitGun
2005-09-27 15:55
2005.11.13
База Paradox и DOS-приложение


2-1129975111
Ugrael
2005-10-22 13:58
2005.11.13
Помогите с QuickReport 3,пожалуйста.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский