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

Вниз

Мерцание окна при изменение размеров   Найти похожие ветки 

 
demon ©   (2008-08-07 01:12) [0]

Окно сильно мерцает при изменении размеров, на окне listbox, его размеры изменял так:

function WindowProc( .....
......
     WM_SIZE :
       MoveWindow(HListBox, 0, 0, LOWORD(lparam)-16,  HIWORD(lparam)-50, true);

Из-за чего это может быть?


 
{RASkov} ©   (2008-08-07 01:20) [1]

> [0] demon ©   (07.08.08 01:12)

WM_SIZE приходит после изменения размеров, а затем опять смена.... Есть WM_SIZING...


 
demon ©   (2008-08-07 01:28) [2]


> Есть WM_SIZING...

Тогда вообще listbox закрашиваеться цветом фона.


 
{RASkov} ©   (2008-08-07 11:32) [3]

Попробуй вопрос более менее попонятнее сформулировать...
Я что-то не совсем верно понял, поэтому в [1] возможно бред написал...


 
demon ©   (2008-08-07 12:04) [4]

Вроде сделал нормально сам.
Переформулирую: есть окно, на этом окне компонент ListBox, всё саздано через API. Нужно чтобы при изменении размеров окна, ListBox тоже менял свои размеры, поэтому при событии от окна WM_SIZE я менял размеры ListBox.
Но при изменении размеров ListBox мерцает. Вот и хотел узнать как от этого избавиться.


 
Darkmoon   (2008-08-07 12:24) [5]

поставь параметр doublebuffed:=true в листбоксе и не мудись)


 
DVM ©   (2008-08-07 12:43) [6]


> Darkmoon


> есть окно, на этом окне компонент ListBox, всё саздано через
> API


 
Slym ©   (2008-08-07 12:50) [7]

2Darkmoon   (07.08.08 12:24) [5]
demon ©   (07.08.08 12:04) [4]всё саздано через API
а через SetWindowPos не пробывал?
SetWindowPos(HListBox,0,0,0,LOWORD(lparam)-16,  HIWORD(lparam)-50,SWP_NOZORDER or SWP_NOACTIVATE or SWP_NOMOVE);


 
DVM ©   (2008-08-07 13:06) [8]


> demon ©   (07.08.08 01:12)  


> Из-за чего это может быть?

Из двойного стирания фона сначала для родительского окна потом для дочернего. Возможно поможет WS_CLIPCHILDREN


 
DVM ©   (2008-08-07 13:22) [9]

Вот на скорую руку набросал (нет проверки возвращаемых значений и проч.), не мерцает ничего:


program test;

uses
 windows, messages;

var
 wc: TWndClassEx;
 MainWnd: HWND;
 ListBoxWnd: HWND;
 Mesg: TMsg;

//------------------------------------------------------------------------------

function WindowProc(Wnd: HWND; Msg: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
begin
 case msg of
   wm_create:
     begin
       ListBoxWnd :=  CreateWindow("LISTBOX", "",
                                 WS_VISIBLE or WS_CHILD,
                                 0, 0, 0, 0, Wnd, 0, 0, nil);
     end;
   wm_destroy :
     begin
       PostQuitMessage(0);
       Result := 0;
       exit;
     end;
   WM_SIZE :
     begin
       MoveWindow(ListBoxWnd, 0, 0, LOWORD(lparam)-10,  HIWORD(lparam)-10, true);
       Result := 0;
     end;
 else
   Result := DefWindowProc(Wnd, Msg, wParam, lParam);
 end;
end;

//------------------------------------------------------------------------------

var
 xPos, yPos, nWidth, nHeight: integer;

begin
 wc.cbSize:=sizeof(wc);
 wc.style:=cs_hredraw or cs_vredraw;
 wc.lpfnWndProc:=@WindowProc;
 wc.cbClsExtra:=0;
 wc.cbWndExtra:=0;
 wc.hInstance:=HInstance;
 wc.hIcon:=LoadIcon(0,idi_application);
 wc.hCursor:=LoadCursor(0,idc_arrow);
 wc.hbrBackground:=COLOR_BTNFACE+1;
 wc.lpszMenuName:=nil;
 wc.lpszClassName:="WndClass1";

 RegisterClassEx(wc);

 xPos := 100;
 yPos := 150;
 nWidth := 400;
 nHeight := 250;

 MainWnd := CreateWindowEx(0, "WndClass1", "Caption", ws_overlappedwindow or WS_CLIPCHILDREN,
                           xPos, yPos, nWidth, nHeight, 0, 0, Hinstance, nil);

 ShowWindow(MainWnd,CmdShow);
 while GetMessage(Mesg,0,0,0) do
   begin
     TranslateMessage(Mesg);
     DispatchMessage(Mesg);
   end;
end.



Страницы: 1 вся ветка

Текущий архив: 2008.09.21;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.011 c
2-1218008748
SSSs
2008-08-06 11:45
2008.09.21
RichEdit взять кусок текста.


3-1206130189
Леонид
2008-03-21 23:09
2008.09.21
база данных Delphi 7 в формате MS Access


15-1217264142
Gooler
2008-07-28 20:55
2008.09.21
Как отследить копирование экрана?


2-1218437805
fulkon
2008-08-11 10:56
2008.09.21
Диалог выбора директории


2-1218125685
Дамир
2008-08-07 20:14
2008.09.21
Окно