Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.09.01;
Скачать: CL | DM;

Вниз

подвисает прорисовка контролов   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.008 c
15-1364240820
Дмитрий С
2013-03-25 23:47
2013.09.01
Нет ли в дельфи каких-нибудь волшебных констант?


15-1364413348
TUser
2013-03-27 23:42
2013.09.01
Пластиковые окна


15-1363938287
Pit
2013-03-22 11:44
2013.09.01
Посоветуйте базу данных! :-)


15-1364325103
TStas
2013-03-26 23:11
2013.09.01
А написал ли сам MicroSoft что-то на C#?


15-1364407192
ThreadMaster
2013-03-27 21:59
2013.09.01
Как нужно делать многопоточные приложения