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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> StringGrid, Прокрутка 
V
    Опции темы
SlaUr
Дата 13.10.2009, 00:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Если прокручивать StringGrid по вертикали мышкой то после нажатия на клавишу например курсор вниз произойдет перемещение видимых ячеек stringrid на селектированную ячейку.
Как сделать так чтобы при прокрутке мышью stringrid селектировалась  например самая верхняя левая видимая ячейка.

Это сообщение отредактировал(а) SlaUr - 13.10.2009, 00:48
PM MAIL   Вверх
Romikgy
Дата 13.10.2009, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



Цитата(SlaUr @  12.10.2009,  23:46 Найти цитируемый пост)
при прокрутке мышью

это колесиком или скролл бар ?


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
SlaUr
Дата 14.10.2009, 09:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



скролл бар 
PM MAIL   Вверх
Romikgy
Дата 14.10.2009, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



перехват сообщения WM_VSCROLL или WM_HSCROLL (по вкусу) 
брать данные с TopRow и LeftCol и устанавливать selection ..... imho das ist alles smile


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

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


Опытный
**


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

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



Как перехватить сообщение
Делаю так но сообщение не ловится.
Код

unit Unit1;

interface

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

type
TMyStringGrid = class(TStringGrid)
  procedure MyScroll(var Message: TMessage); message WM_VSCROLL;
end;


  TForm1 = class(TForm)
    Button1: TButton;
    StringGrid1: TStringGrid;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
{    procedure MyScroll(var Message: TMessage); message WM_VSCROLL;}

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
StringGrid1.Row:=StringGrid1.TopRow;
end;

procedure TForm1.FormCreate(Sender: TObject);
var i1:integer;
begin
Stringgrid1.RowCount:=100;
for i1 := 0 to 99 do StringGrid1.Cells[0,i1]:=IntToStr(i1);
end;

procedure TMyStringGrid.MyScroll(var Message: TMessage);
begin
 ShowMessage('1');
   inherited;
end;
end.


PM MAIL   Вверх
Romikgy
Дата 15.10.2009, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



Цитата(SlaUr @  15.10.2009,  13:36 Найти цитируемый пост)
StringGrid1: TStringGrid;

а чего же создаешь стандартный класс ? свои  и создавай ...


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
SlaUr
Дата 16.10.2009, 05:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А как создать свой .
Пробую так
Код

type
TMyStringGrid = class(TStringGrid)
  procedure MyScroll(var Message: TMessage); message WM_VSCROLL;
end;


  TForm1 = class(TForm)
    Button1: TButton;
    StringGrid1: TMyStringGrid;

Вылезает ошибка Class tstringGred not found
PM MAIL   Вверх
THandle
Дата 16.10.2009, 08:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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



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

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



SlaUr, я так понимаю ты поменял только одну строчку в коде? У тебя же на форме дежит TStringGrid, а не TMyStringGrid.
Либо создавай динамически, либо сделай в виде отдельного компонента, либо просто у готового, лежащего на форме StringGrid'а подмени WndProc, и в нем обрабатывай нужное сообщение.
PM   Вверх
Keeper89
Дата 16.10.2009, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

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



Т.е.
Код

TStringGrid= class(Grids.TStringGrid)
  procedure MyScroll(var Message: TMessage); message WM_VSCROLL;
end;

...

procedure TStringGrid.MyScroll(var Message: TMessage);
begin
 ShowMessage('1');
   inherited;
end;



--------------------
PM MAIL WWW   Вверх
SlaUr
Дата 16.10.2009, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Нашел в инете пример для scrolboxa
В итоге вот рабочий код решения моей проблемы
Код

unit Unit1;

interface

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

type
WParameter = LongInt;
LParameter = LongInt;

  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  OldWindowProc : Pointer;

implementation

{$R *.dfm}

function NewWindowProc(WindowHandle : hWnd;
    TheMessage   : WParameter;
    ParamW : WParameter;
    ParamL : LParameter) : LongInt stdcall;
begin
    if TheMessage = WM_VSCROLL then
    begin
     Form1.StringGrid1.Row:=Form1.StringGrid1.TopRow;
    end;
    if TheMessage = WM_HSCROLL then
    begin
    end;

    NewWindowProc := CallWindowProc(OldWindowProc, WindowHandle, TheMessage,
                    ParamW, ParamL);
end;


procedure TForm1.FormCreate(Sender: TObject);
var i1:integer;
begin
Stringgrid1.RowCount:=100;
for i1 := 0 to 99 do StringGrid1.Cells[0,i1]:=IntToStr(i1);
OldWindowProc := Pointer(SetWindowLong(StringGrid1.Handle, GWL_WNDPROC,
                LongInt(@NewWindowProc)));
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
    SetWindowLong(StringGrid1.Handle, GWL_WNDPROC, LongInt(OldWindowProc));
end;

end.


Это сообщение отредактировал(а) SlaUr - 16.10.2009, 13:52
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.0647 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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