Главная страница
    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.041 c
1-1130165850
Katya2100000000
2005-10-24 18:57
2005.11.13
Светящийся Label


1-1130150894
Nait
2005-10-24 14:48
2005.11.13
Как клонировать кнопку?


14-1130103424
asavkin
2005-10-24 01:37
2005.11.13
[работа] удаленная работа для программиста, Delphi


14-1130171214
Fl@sh
2005-10-24 20:26
2005.11.13
Тайксер &amp; Пачеко


4-1126680818
Molchanov
2005-09-14 10:53
2005.11.13
MouseWheel





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский