Форум программистов
 
О проблемах с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы
Старый 15.02.2011, 17:39   #1
aalleexxaa
 
Регистрация: 10.10.2008
Сообщений: 4
По умолчанию stringgrid+колесо мыши=>stringgrid.onclick

Здравствуйте!
На форме имеется Stringgrid. Stringgrid имеет, к примеру 10 строк (сумма высот строк больше высоты компонента, таким образом, чтобы можно было использовать колесо мыши для прокрутки). Заметил такую фигню, что при фокусе на stringgrid, и прокручивании колесиком мыши каждый раз выполняется процедура Stringgrid1.Onclick. Как мне предотвратить выполнение этой процедуры, но оставить прокручивание списка?.

Раз правила обязывают код прикрепить, прикреплю, но здесь он к моему вопросу абсолютно бесполезен. Поясню еще раз: при пролистывании колесом мыши по Stringgrid каждый раз появляется сообщение "1". Оно мне не нужно.

Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    procedure StringGrid1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.StringGrid1Click(Sender: TObject);
begin
	showmessage('1');
end;

end.
может Options есть какой, отключающий?

Последний раз редактировалось aalleexxaa; 15.02.2011 в 17:41.
aalleexxaa вне форума Ответить с цитированием
Старый 15.02.2011, 19:08   #2
asmodey1
Подтвердите свой е-майл
 
Регистрация: 19.12.2010
Сообщений: 808
По умолчанию

Не стоит мучаться. Просто перенесите вашу строку showmessage('1') в обработчик StringGrid1MouseUp.
asmodey1 вне форума Ответить с цитированием
Старый 16.02.2011, 12:11   #3
aalleexxaa
 
Регистрация: 10.10.2008
Сообщений: 4
По умолчанию

если перенести обработчик в StringGrid1MouseUp, то надо тогда отслеживать, rlf была нажата кнопка (в какую область поля) - попало по ячейкам или нет. Я конечно уже так и сделал, но мне кажется, есть простое решение.
aalleexxaa вне форума Ответить с цитированием
Старый 16.02.2011, 12:36   #4
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

Цитата:
но мне кажется, есть простое решение.
конешно есть
Код:
var
  Form1: TForm1;
  a: boolean = false;
  b: boolean = false;

procedure TForm1.StringGrid1Click(Sender: TObject);
begin
  if not(a) and not(b) then showmessage('1');
  a := false;
  b := false;
end;

procedure TForm1.StringGrid1MouseWheelDown(Sender: TObject;
  Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
begin
a := true;
end;

procedure TForm1.StringGrid1MouseWheelUp(Sender: TObject;
  Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
begin
b := true;
end;
VirusN13
ArtGrek вне форума Ответить с цитированием
Старый 16.02.2011, 16:36   #5
aalleexxaa
 
Регистрация: 10.10.2008
Сообщений: 4
По умолчанию

спасибо, подумаю над Вашей идеей как ее дальше преобразовать
aalleexxaa вне форума Ответить с цитированием
Старый 16.02.2011, 16:58   #6
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

Код:
if not(a) and not(b) then
begin
  showmessage('1');
  // все что было в OnClick, а сеичас в MouseUp
end;
а если есть что то и в прокрутке, то пишите ето поле А и В

другого варианта думаю нет
потому что прокрутка в StringGrid осушествляеца за счет перемешения выделенои ячеики
Код:
function TCustomGrid.DoMouseWheelDown(Shift: TShiftState; MousePos: TPoint): Boolean;
begin
  Result := inherited DoMouseWheelDown(Shift, MousePos);
  if not Result then
  begin
    if Row < RowCount - 1 then Row := Row + 1;
    Result := True;
  end;
end;

function TCustomGrid.DoMouseWheelUp(Shift: TShiftState; MousePos: TPoint): Boolean;
begin
  Result := inherited DoMouseWheelUp(Shift, MousePos);
  if not Result then
  begin
    if Row > FixedRows then Row := Row - 1;
    Result := True;
  end;
end;
если не ошибаюсь
VirusN13

Последний раз редактировалось ArtGrek; 16.02.2011 в 17:17.
ArtGrek вне форума Ответить с цитированием
Ответ
Купить рекламу на форуме от 7000 рублей в месяц



Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
StringGrid Waqq Помощь студентам 1 05.12.2010 21:31
Ограничить движение мыши в StringGrid??? Dersou Помощь студентам 4 10.08.2010 14:53
stringgrid Johny91 Помощь студентам 3 26.12.2009 21:01
OnClick - правая или левая кнопка мыши Vadim_S Общие вопросы Delphi 8 16.09.2009 17:15


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS
Скидки на курсы GeekBrains 40%, выбирайте программу для себя