Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.11.2011, 01:17   #1
xrob
Форумчанин
 
Регистрация: 18.10.2010
Сообщений: 419
По умолчанию FormResize 1 раз

как мы изменяем размер формы?
берем мышку, хватаем форму за край, тащим, отпускаем.
при этом событие OnFormResize вызывалось на каждый пиксел движения мышки...
можно как-нибудь сделать чтобы это событие вызывалось только 1 раз, когда отпускаешь мышку?
может есть на этот случай другое событие?
xrob вне форума Ответить с цитированием
Старый 27.11.2011, 02:24   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Цитата:
при этом событие OnFormResize вызывалось на каждый пиксел движения мышки...
Так и должно быть...

Цитата:
можно как-нибудь сделать чтобы это событие вызывалось только 1 раз, когда отпускаешь мышку?
может есть на этот случай другое событие?
1. А какая перед вами задача?
2. Врятли.
Человек_Борща вне форума Ответить с цитированием
Старый 27.11.2011, 10:00   #3
Johnson
кривокодер ;)
Форумчанин
 
Аватар для Johnson
 
Регистрация: 20.06.2008
Сообщений: 707
По умолчанию

На сколько я помню, есть состояние формы, которое указывает, что она находится в режиме изменения размера... Точнее не скажу, под рукой компилятора нет.
"А как написать праграму?, "ришыти задачьку очинь нада" ©с форума. Жить становится интереснее, жить становится веселее...
{Быть или не быть} {Неуспешный суицид}
Johnson вне форума Ответить с цитированием
Старый 27.11.2011, 12:39   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
2. Врятли.
Да?

Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    procedure rez(var m:TMessage); message WM_EXITSIZEMOVE;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.rez(var m: TMessage);
begin
 ShowMessage('Закончили перемещать или изменять размер');
end;

end.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.11.2011, 14:26   #5
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Stilet, я не писал, что нету такого. Написал, что не знают. Теперь буду знать=)
Человек_Борща вне форума Ответить с цитированием
Старый 27.11.2011, 14:39   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ок. Теперь знай
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.11.2011, 00:55   #7
xrob
Форумчанин
 
Регистрация: 18.10.2010
Сообщений: 419
По умолчанию

Stilet, спасибо, работает! =)

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

ну так вот, при изменении размера формы пересчитывается и ширина ячеек.
в целях оптимизации, не хотелось бы делать это на каждый пиксел изменения размера.
в таблице может быть и 100 и 500 строк, да вобщем дохрена.

так что лучше б это было пересчитывать один раз =)

кстати еще такой вопрос.
WM_EXITSIZEMOVE не срабатывает при разворачивании формы на весь экран с помощью кнопки "разверуть".
есть какой-нибудь аналог WM_EXITSIZEMOVE для такого действия?
xrob вне форума Ответить с цитированием
Старый 28.11.2011, 01:43   #8
kettanaito
Веб-дизайнер
Форумчанин
 
Аватар для kettanaito
 
Регистрация: 11.08.2011
Сообщений: 305
По умолчанию

xrob, можно описать событие отдельно при нажатии на кнопку "Развернуть" (вроде бы есть из стандартных).
kettanaito вне форума Ответить с цитированием
Старый 28.11.2011, 09:30   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
в ней текст переносится по ширине,
это делается с помощью TMemo (другого способа не знаю).
Ищи примеры по DrawText или вот мое: http://www.programmersforum.ru/showthread.php?t=104536
Цитата:
в целях оптимизации, не хотелось бы делать это на каждый пиксел изменения размера
Ерунда. Никакой оптимизации не получишь, даже если твой мегамонитор вмещает все 100 строк таблицы. Отрисовка идет только тех данных которые считаются видимые. Остальные не трогаются пока не прокрутишь.
Хозяин конечно барин, но ты лишнюю работу делаешь.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.11.2011, 15:46   #10
xrob
Форумчанин
 
Регистрация: 18.10.2010
Сообщений: 419
По умолчанию

kettanaito, была такая идея, но в инспекторе свойств я не нашел такого события.
но помню что где-то видел что-то типа OnMinimize или OnMaximize...

Stilet, данные ячейки хранятся у меня в строке,
но чтобы отрисовать с помощью TCanvas текст, вписаный в определенную область, надо эту строку сначала разбить на строки, сколько бы их было, если б текст переносился.
для этих целей я использую TMemo.
TextWrap в true, вставляю строку в Memo, она автоматически в нем выстраивается, переносится как надо,
а потом уже из Memo беру уже не текст, а строки, которые потом по очереди отрисовываются на канвасе.

ну и соответственно такую операцию нужно проводить каждый раз при изменении размера формы.
и лучше все-таки делать это один раз, чем на каждый пиксел.
я исхожу из того что знаю я.
но если есть и другие классы, которые умеют вписывать текст в ширину,
то они тоже таки или иначе просчитывают как это сделать.

так что я считаю что оптимизация здесь будет существенная =)

а по поводу отрисовки, я проводил эксперимент - рисовал что-то за пределами канвы...
рисуется быстрее чем на канве, но все-равно не мгновенно.
и как тогда объяснить тот факт что когда в моей таблице 100 строк, она отрисовывается живенько и спокойно прокручивается, а когда строк 1000, а в видимой области, например, 50, то начинается слайд-шоу?

по мне так лучше бинарным поиском найти строки, которые попадают в область видимости и отрисовывать только их...

кстати, Stilet, что вы скажете по поводу кнопок "Развернуть" ?

p.s.
кстати, я никогда не выполняю лишнюю работу.
даже если что-то из того что я делаю, потом не пригодится - я получаю бесценный опыт! =)
xrob вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
CustomComponent и FormResize xrob Компоненты Delphi 3 14.09.2011 15:46
Склеить скрипт Время суток+Вы были тут N раз+склонение *РАЗ*_*РАЗА* vkontakte JavaScript, Ajax 4 12.09.2011 14:41
Еще раз массив Divoha Общие вопросы C/C++ 3 27.06.2009 17:49
Событие один раз Михаил Юрьевич Общие вопросы Delphi 4 01.04.2008 20:40
В Memo ввёл раз!!! в Memo ввёл два!!! а где Memo ввёл раз??? Хs-You Компоненты Delphi 6 19.08.2007 19:48