Форум: "Начинающим";
Текущий архив: 2013.09.01;
Скачать: [xml.tar.bz2];
Внизподвисает прорисовка контролов Найти похожие ветки
← →
TForm (2012-12-22 15:00) [0]по нажатию на кнопку в программе, выполняется sql-запрос, который отбирает нуженые записи и выводит их. если записей много, то на этапе выполнения sql-запроса подвисает прорисовка контролов на форме. как это исправить?
← →
Юрий Зотов © (2012-12-22 15:35) [1]DisableControls?
← →
TForm (2012-12-22 15:54) [2]
> DisableControls?
не помогает
← →
antonn © (2012-12-22 16:02) [3]
> Юрий Зотов © (22.12.12 15:35) [1]
видимо речь о вынесении работы с БД в отдельный поток...
← →
TForm (2012-12-22 16:14) [4]Для примера, без БД
Модуль основной форм:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses unit2;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
Form2: TForm2;
begin
Application.CreateForm(TForm2, Form2);
try
if Form2.ShowModal = mrOK then
Form2.EmulateSlowOperation;
finally
Form2.Free;
end;
end;
end.
Модуль модальной формы:
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm2 = class(TForm)
Button1: TButton;
private
{ Private declarations }
public
{ Public declarations }
procedure EmulateSlowOperation;
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
{ TForm2 }
procedure TForm2.EmulateSlowOperation;
var
I: Integer;
begin
for I := 0 to 20 do
begin
Sleep(100);
end;
end;
end.
Ситуация:
1. Вызываем модальную форму по нажатию кнопки Button1 в основной форме
2. Перемещаем отобразившуюся модальную форму так, чтобы она частично перекрывала кнопку Button1 в основной форме
3. Нажимаем кнопку Button1 в модальной форме
Итог: На момент выполнения метода EmulateSlowOperation некорректно отрисовывается кнопка Button1 в основной форме.
← →
RWolf © (2012-12-22 16:17) [5]
procedure TForm2.EmulateSlowOperation;
var
I: Integer;
begin
for I := 0 to 20 do
begin
Sleep(100);
Application.ProcessMessages;
end;
end;
← →
TForm (2012-12-22 16:19) [6]
> for I := 0 to 20 do
> begin
> Sleep(100);
> Application.ProcessMessages;
> end;
у меня здесь вместо цикла запрос на выборку большого количества записей. вставка ProcessMessages проблему не решила.
← →
RWolf © (2012-12-22 16:21) [7]тогда в отдельный поток.
← →
TForm (2012-12-22 16:30) [8]
> в отдельный поток
помогло, спасибо
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2013.09.01;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.004 c