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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как запретить прокрутку в TMemo? 
:(
    Опции темы
Vet
Дата 12.10.2005, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Здравствуйте. В программе имеется компонент Memo с текстом. Нужно временно запрещать в нем прокрутку (Я программно рисую на нем линии при перемещении мыши и при прокрутке компонента получается ерунда smile )
PM MAIL   Вверх
_hunter
Дата 12.10.2005, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



может его проще Enabled = false? или весть текст стереть, нарисовать линии, вернуть текст?


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Vet
Дата 12.10.2005, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Нет, Enabled = false не подходит, думал уже об этом smile . А текст мне не мешает, прокрутка мешает правильной прорисовке линий, которые я рисую
PM MAIL   Вверх
_hunter
Дата 12.10.2005, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



в смысле прокрутка? полосы прокрутки или сам процесс прокрутки мешает?


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Quadr0
Дата 12.10.2005, 16:57 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











...

Это сообщение отредактировал(а) Quadr0 - 15.7.2011, 01:38
  Вверх
Vet
Дата 13.10.2005, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



_hunter, когда нажата левая кнопка мыши и курсор перемещается, рисуется линия. Но если курсор двигать в сторону и вниз, то Memo прокручивается. Мне же надо, чтоб не прокручивался. От наличия полос прокрутки это не зависит

Quadr0, видимо, не на этом форуме. Нашел одну тему, кроме моей, со словом "сабклассинг" smile
PM MAIL   Вверх
_hunter
Дата 13.10.2005, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



проблемы всеравно не понял...
в сабклассинге нет ничего сложного:
описываеш где-нить функцию типа не опмню какого ( нет у меня справки делфийской ) и присваиваеш ее свойству WindowProc своего memo ( предварительно запомнив старую )
и в этой новой для всех сообщений кроме приведенных вызываеш старую процедуру...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Girder
Дата 13.10.2005, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


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

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



Цитата(Vet @ 13.10.2005, 12:58)
Quadr0, видимо, не на этом форуме. Нашел одну тему, кроме моей, со словом "сабклассинг"
Просто лень... smile Тем более твоя задача на столько много имеет вариантов решения... smile

Не буду бросаться умными словами... ну... например самое простое:
1. SendMessage(Memo1.Handle,WM_LBUTTONUP,0,0);
2. SetCapture(...), ReleaseCapture...

вот с первого приближение реализация для ReleaseCapture(ставим точки smile ):
Код
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    procedure Memo1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Memo1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Memo1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  fSb:boolean=false;

implementation

{$R *.dfm}

procedure TForm1.Memo1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var DC:HDC;
begin
 if fSb then
  begin
   DC:=GetDC(Memo1.Handle);
   SetPixel(DC,X,Y,clRed);
   ReleaseDC(Memo1.Handle,DC);
  end;
end;

procedure TForm1.Memo1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 if Button=mbLeft then
  begin
   fSb:=true;
   ReleaseCapture;
  end;
end;

procedure TForm1.Memo1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 if Button=mbLeft then fSb:=false;
end;

end.
(Рисуем линии)
Код
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    procedure Memo1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Memo1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Memo1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  DC:DWord=0;

implementation

{$R *.dfm}

procedure TForm1.Memo1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
 if DC<>0 then LineTo(DC,X,Y);
end;

procedure TForm1.Memo1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 if Button=mbLeft then
  begin
   ReleaseCapture;
   if DC<>0 then ReleaseDC(Memo1.Handle,DC);
   DC:=GetDC(Memo1.Handle);
  end;
end;

procedure TForm1.Memo1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 if Button=mbLeft then
  begin
   if DC<>0 then ReleaseDC(Memo1.Handle,DC);
   DC:=0;
  end;
end;

end.


Это сообщение отредактировал(а) Girder - 13.10.2005, 13:08


--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
Vet
Дата 13.10.2005, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Girder @ 13.10.2005, 12:39)
Просто лень...

Да нет, почему, здесь не нашел, зато в гугле нашел smile
Вообщем, всем спасибо за участие, сделал без всяких сабклассингов
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.0466 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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