Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.09.21;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.007 c
2-1218444544
lod
2008-08-11 12:49
2008.09.21
Компонент DateTimeParker


2-1218563419
Mozgan
2008-08-12 21:50
2008.09.21
Разработка инсталлятора


3-1205663074
Kolan
2008-03-16 13:24
2008.09.21
Как проапдейтить строку, а если её нет, то вставить?


8-1166207081
DriveR_F
2006-12-15 21:24
2008.09.21
Как конвертировать PNG в BMP?


15-1217245659
brother
2008-07-28 15:47
2008.09.21
слетел raid5 массив





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский