Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ComboBox1Click не работает... 
:(
    Опции темы
Лиходей
Дата 8.8.2008, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 25.5.2008

Репутация: нет
Всего: нет



Не срабатывает событие по щелчку на Комбобокс 
Проверял в Delphi 5,6 нижеприведенный код не работает
Код

procedure TForm1.ComboBox1Click(Sender: TObject);
begin
  caption:='Ой, по мне кто-то щелкает!!!';
end;


По гуглил, поискал по форуму ничего не нашел. Скажите как с этим бороться?

PM MAIL   Вверх
Rodman
Дата 8.8.2008, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 7
Всего: 122



а в Events эта процедура выбрана?
PM MAIL WWW Skype GTalk YIM MSN   Вверх
Лиходей
Дата 8.8.2008, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 25.5.2008

Репутация: нет
Всего: нет



Цитата

а в Events эта процедура выбрана? 

Да. Сами попробуйте у вас работает?
PM MAIL   Вверх
Exai1e
Дата 8.8.2008, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 908
Регистрация: 3.12.2006
Где: Moscow

Репутация: 2
Всего: 30



Цитата(Лиходей @  8.8.2008,  19:12 Найти цитируемый пост)
код не работает

RAD 2007, таже ситуация...  smile  хм


--------------------
"Решение зависит от выбранного геморроя" © Snowy
"у нас как в армии - либо работает, либо так и задумано"
PM MAIL ICQ   Вверх
THandle
Дата 8.8.2008, 20:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 65
Всего: 372



Цитата

Use the OnClick event handler to respond when the user clicks the control. If the control has an associated action, and that action has an OnExecute method, the action's OnExecute method responds to click events unless it is superseded by an OnClick event handler. 

Usually OnClick occurs when the user presses and releases the left mouse button with the mouse pointer over the control. This event can also occur when:

The user selects an item in a grid, outline, list, or combo box by pressing an arrow key. 
The user presses Spacebar while a button or check box has focus. 
The user presses Enter when the active form has a default button (specified by the Default property). 
The user presses Esc when the active form has a cancel button (specified by the Cancel property). 
The user presses the accelerator key for a button or check box. For example, if the value of the Caption property of a check box is '&Bold', the B is underlined at runtime and the OnClick event of the check box is triggered when the user presses Alt+B. However, focus does not move to the control in these instances. 
The Checked property of a radio button is set to true. 
The value of the Checked property of a check box is changed. 
The Click method of a menu item is called. 
For a form, an OnClick event occurs when the user clicks a blank area of the form or on a disabled component.



Видимо это... Сейчас поковыряю реализацию комбобокса...
PM   Вверх
Rodman
Дата 8.8.2008, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 7
Всего: 122



молодежь.. а так?
Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    ComboBox1: TComboBox;
    procedure ComboBox1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ComboBox1Click(Sender: TObject);
begin
  caption:='Ой, по мне кто-то щелкает!!!';
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  ComboBox1.Items.Add('1');
  ComboBox1.Items.Add('2');
end;

end.


Добавлено через 43 секунды
если не заполнено, то как срабатывать будет?!
PM MAIL WWW Skype GTalk YIM MSN   Вверх
Rodman
Дата 8.8.2008, 21:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 7
Всего: 122



или OnChange используйте
PM MAIL WWW Skype GTalk YIM MSN   Вверх
Лиходей
Дата 8.8.2008, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 25.5.2008

Репутация: нет
Всего: нет



Цитата

если не заполнено, то как срабатывать будет?! 


Вся проблема в том, что В комбобоксе OnClick срабатывает только при выборе строки из выпадающего списка, а при просто клике ничего не происходит. 

Цитата

или OnChange используйте 

OnChange срабатывает также только при выборе строки из выпадающего списка

Дело в том, что лдя удобства интерфейса в проге, нужно обработать именно щелчок, так как в Combobox.Text содержит значение которое редко бывает ошибочным и только иногда нужно выбрать другое значение из списка.

Это сообщение отредактировал(а) Лиходей - 8.8.2008, 21:28
PM MAIL   Вверх
THandle
Дата 8.8.2008, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 65
Всего: 372



Лиходей, Click выполняется при получении сообщения CBN_SELCHANGE, а это и есть выбор определенного пункта КомбоБокса.
PM   Вверх
Exai1e
Дата 8.8.2008, 23:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 908
Регистрация: 3.12.2006
Где: Moscow

Репутация: 2
Всего: 30



Цитата(THandle @  8.8.2008,  22:37 Найти цитируемый пост)
Лиходей, Click выполняется при получении сообщения CBN_SELCHANGE, а это и есть выбор определенного пункта КомбоБокса. 

Хм, тогда понятно. Но логически (ИМХО) должен срабатывать при клике на контроле.

Добавлено @ 23:04
Цитата(Rodman @  8.8.2008,  22:00 Найти цитируемый пост)
если не заполнено, то как срабатывать будет?! 

Ну если не заполнено - это же не "итем селект" или что нить в этом роде. Помоему не очень правильно построено. Клик и есть клик - что должен срабатывать при нажатии на контроле. Хотя мб я и не прав, не спорю. Вам виднее smile

Добавлено @ 23:06
на контроле == на области в которой он рисуется smile

Это сообщение отредактировал(а) Exai1e - 8.8.2008, 23:06


--------------------
"Решение зависит от выбранного геморроя" © Snowy
"у нас как в армии - либо работает, либо так и задумано"
PM MAIL ICQ   Вверх
THandle
Дата 8.8.2008, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 65
Всего: 372



Можно было бы перекрыть WindowProc, отлавливая WM_LBUTTONDOWN, но ComboBox - это еще и скрытый Edit, поэтому нужно писать наследник...

Вот пример, он естественно просто показывает отлов сообщений и список выводить не будет. Можно перекрыть только EditWndProc, тогда список будет открываться по нажатию стрелочки, а при нажатии на поле будет 'Click'. Вот в общем пример:

Код

unit TMouseDounComboBox;

interface

uses
  SysUtils, Classes, Controls, StdCtrls, Messages;

type
  TMouseDowmComboBox = class(TComboBox)
  private
    FMouseDown : TMouseEvent;
    procedure EditWndProc(var Message : TMessage); override;
    procedure WndProc(var Message : TMessage); override;
    procedure WMLBTNDON(Sender : TObject; Button : TMouseButton; X, Y : integer);
    { Private declarations }
  protected
    { Protected declarations }
  public
    { Public declarations }
  published
    property OnMouseDown : TMouseEvent read FMouseDown write FMouseDown;
    { Published declarations }
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Samples', [TMouseDowmComboBox]);
end;

{ TMouseDowmComboBox }

procedure TMouseDowmComboBox.EditWndProc(var Message: TMessage);
begin
  if Message.Msg = WM_LBUTTONDOWN then
    WMLBTNDON(Self, mbLeft, TWMLBUTTONDOWN(Message).XPos, TWMLBUTTONDOWN(Message).YPos)
  else
    inherited;
end;


procedure TMouseDowmComboBox.WMLBTNDON(Sender: TObject; Button: TMouseButton;
  X, Y: integer);
begin
  if Assigned(FMouseDown) then
    FMouseDown(Sender, Button, [], X, Y);
end;

procedure TMouseDowmComboBox.WndProc(var Message: TMessage);
begin
  if Message.Msg = WM_LBUTTONDOWN then
    WMLBTNDON(Self, mbLeft, TWMLBUTTONDOWN(Message).XPos, TWMLBUTTONDOWN(Message).YPos)
  else
    inherited;
end;

end.


Это сообщение отредактировал(а) THandle - 8.8.2008, 23:14
PM   Вверх
Лиходей
Дата 9.8.2008, 08:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 25.5.2008

Репутация: нет
Всего: нет



Цитата

Можно перекрыть только EditWndProc, тогда список будет открываться 

При установке компонента выпадает ошибка - "метод EditWndProc не найден в базовом классе"




Это сообщение отредактировал(а) Лиходей - 9.8.2008, 13:09
PM MAIL   Вверх
THandle
Дата 9.8.2008, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 65
Всего: 372



Лиходей, на 2007 все работало отлично.... На семерке уже нет, так как там по-другому объявлены EditWndProc, WndProc...

Можно глянуть на StdCtrls.pas от пятерки?

Тут надо думать... Сейчас что-нибудь попробую сделать smile 
PM   Вверх
Лиходей
Дата 9.8.2008, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 25.5.2008

Репутация: нет
Всего: нет



Цитата

Можно глянуть на StdCtrls.pas от пятерки?

Здесь  StdCtrls.pas для D5 и D6.

Благодарю за внимание к моей проблеме...

Присоединённый файл ( Кол-во скачиваний: 4 )
Присоединённый файл  stdctrls.rar 39,18 Kb
PM MAIL   Вверх
VICTAR
Дата 9.8.2008, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1108
Регистрация: 6.10.2006

Репутация: 37
Всего: 80



Код

type
  TComboBox = class(StdCtrls.TComboBox)
  protected
    procedure NewEditWndProc(var Message: TMessage);
  public
    constructor Create(AOwner: TComponent); override;
  end;

  TForm1 = class(TForm)
    ComboBox1: TComboBox;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

constructor TComboBox.Create(AOwner: TComponent);
begin
  inherited;
 {$IFDEF MSWINDOWS}
  FEditInstance := Classes.MakeObjectInstance(NewEditWndProc);
  {$ENDIF}
  {$IFDEF LINUX}
  FEditInstance := WinUtils.MakeObjectInstance(NewEditWndProc);
  {$ENDIF}
end;

procedure TComboBox.NewEditWndProc(var Message: TMessage);
begin
  if Message.Msg = WM_LBUTTONDOWN then
    тра-та-та;
  EditWndProc(Message);
end;


PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0586 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.