Главная страница
    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.006 c
1-1198155538
андр
2007-12-20 15:58
2008.09.21
Передача параметров


2-1218008748
SSSs
2008-08-06 11:45
2008.09.21
RichEdit взять кусок текста.


2-1218361575
Danco
2008-08-10 13:46
2008.09.21
Отправка письма


2-1218475782
Павлик
2008-08-11 21:29
2008.09.21
Количество записей в таблице


15-1217591906
oldman
2008-08-01 15:58
2008.09.21
Завтра выходной, будут не все. Примите поздравления заранее...





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский