On-line: MIKHAIL, гостей 0. Всего: 1 [подробнее..]
АвторСообщение



Пост N: 2
Зарегистрирован: 19.10.05
ссылка на сообщение  Отправлено: 30.10.07 21:02. Заголовок: разрушение экрана при многократном определении/закрытии внутренних окон


Использование DRAW TEXT в процедуре ON POINT пр определении окна приводит к тому, что прb дальнейшем многократном определении окон на каком-то этапе происходит разрушение экрана Windows(цвета, шрифты и т.п.)
Пример (просто для иллюстрации):


#include "minigui.ch"

Function Main
DEFINE WINDOW Form_1 ;
AT 0,0 ;
WIDTH 800 HEIGHT 600 ;
TITLE 'Demo for Gradient Background' ;
MAIN ICON 'MAIN' NOMAXIMIZE NOSIZE ;
ON PAINT ( FillBlue(_HMG_MainHandle), TextPaint() )
@ 60,60 BUTTON Btn_Start CAPTION "Start!" ACTION NonStop100() DEFAULT

DRAW TEXT IN WINDOW Form_1 AT 10, 14 ;
VALUE "Program Setup" ;
FONT "Verdana" SIZE 24 BOLD ITALIC ;
FONTCOLOR WHITE TRANSPARENT

DRAW TEXT IN WINDOW Form_1 AT Form_1.Height - 54, Form_1.Width - 230 ;
VALUE "Copyright (c) 2003 by Grigory Filatov" ;
FONT "Tahoma" SIZE 10 ITALIC ;
FONTCOLOR WHITE TRANSPARENT

END WINDOW

CENTER WINDOW Form_1

ACTIVATE WINDOW Form_1

Return Nil

function TextPaint()



/*
DRAW TEXT IN WINDOW Form_1 AT 10, 14 ;
VALUE "Program Setup" ;
FONT "Verdana" SIZE 24 BOLD ITALIC ;
FONTCOLOR WHITE TRANSPARENT

DRAW TEXT IN WINDOW Form_1 AT Form_1.Height - 54, Form_1.Width - 230 ;
VALUE "Copyright (c) 2003 by Grigory Filatov" ;
FONT "Tahoma" SIZE 10 ITALIC ;
FONTCOLOR WHITE TRANSPARENT
*/
Return Nil

func NonStop100
local i
for i=1 to 500
NonStop()
next
retu

#define MsgInfo( c ) MsgInfo( c, , , .f. )

PROCEDURE NonStop()
LOCAL nSeconds := 0, nCount := 1, lLoop := .T.

DEFINE WINDOW NonStop ;
AT 0,0 ;
WIDTH 190 HEIGHT 90 ;
TITLE "Working..." ;
MODAL NOSYSMENU NOSIZE ;
ON RELEASE IF( lLoop, ( lLoop := .F., MsgInfo( "Aborted by user request!" ) ), )

@ 10,10 LABEL Lbl_Title VALUE "This window will be closed in" AUTOSIZE

@ 30,60 LABEL Lbl_Progress VALUE "" AUTOSIZE

ON KEY ESCAPE ACTION NonStop.Release()

END WINDOW

CENTER WINDOW NonStop
ACTIVATE WINDOW NonStop NOWAIT

DO WHILE nCount > 0 .AND. lLoop
IF ABS( SECONDS() - nSeconds ) >= 1
nCount--
NonStop.Lbl_Progress.Value := LTRIM( STR( nCount ) ) + " second" + IF(nCount > 1, "s", "")
nSeconds := SECONDS()
ENDIF
DO EVENTS
ENDDO

IF lLoop
NonStop.Hide()

lLoop := .F.
NonStop.Release()
DO MESSAGE LOOP
ENDIF

RETURN





#pragma BEGINDUMP

#include <windows.h>
#include "hbapi.h"

HB_FUNC( FILLBLUE )
{
HWND hwnd;
HBRUSH brush;
RECT rect;
HDC hdc;
int cx;
int cy;
int blue = 200;
int steps;
int i;

hwnd = (HWND) hb_parnl (1);
hdc = GetDC(hwnd);

GetClientRect(hwnd, &rect);

cx = rect.top;
cy = rect.bottom;
steps = (cy - cx) / 3;
rect.bottom = 0;

for( i = 0 ; i < steps ; i++ )
{
rect.bottom += 3;
brush = CreateSolidBrush( RGB(0, 0, blue) );
FillRect(hdc, &rect, brush);
DeleteObject(brush);
rect.top += 3;
blue -= 1;
}

ReleaseDC(hwnd, hdc);
hb_ret();
}

#pragma ENDDUMP


Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 7 [только новые]


постоянный участник


Пост N: 304
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 30.10.07 21:46. Заголовок: Не могу подтвердить ..


Не могу подтвердить - запускал подряд трижды - никакого разрушения экрана Windows не увидел. Может у вас проблемы с железом?

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 3
Зарегистрирован: 19.10.05
ссылка на сообщение  Отправлено: 30.10.07 23:06. Заголовок: забыл убрать коммент..


забыл убрать комментарий


/*
DRAW TEXT IN WINDOW Form_1 AT 10, 14 ;
VALUE "Program Setup" ;
FONT "Verdana" SIZE 24 BOLD ITALIC ;
FONTCOLOR WHITE TRANSPARENT

DRAW TEXT IN WINDOW Form_1 AT Form_1.Height - 54, Form_1.Width - 230 ;
VALUE "Copyright (c) 2003 by Grigory Filatov" ;
FONT "Tahoma" SIZE 10 ITALIC ;
FONTCOLOR WHITE TRANSPARENT
*/


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 305
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 31.10.07 09:31. Заголовок: Так - все правильно,..


Так - все правильно, все довольно миленько разрушается, понравилось .

Но это пример - как не надо использовать библиотеку.
Смотрите SetThemes и обработку события WM_PAINT


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 4
Зарегистрирован: 19.10.05
ссылка на сообщение  Отправлено: 01.11.07 01:45. Заголовок: В SetThemes перерисо..


В SetThemes перерисовываются только кнопки или рисунки, текста на экране нет.
Разрушение не зависит от типа определяемого внутреннего окна ( NO WAIT просто для примера - чтобы не нажимать клавиши )

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 309
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 01.11.07 09:54. Заголовок: Avf пишет: В SetThe..


Avf пишет:

 цитата:
В SetThemes перерисовываются только кнопки или рисунки, текста на экране нет.



В обработчике WM_PAINT вы можете делать все, что пожелаете, в т.ч. и выводить текст.

Avf пишет:

 цитата:
Разрушение не зависит от типа определяемого внутреннего окна ( NO WAIT просто для примера - чтобы не нажимать клавиши )


Я и этого не писал. Вам надо решить конкретную задачу или выразить свое мнение по поводу реализации некоторых вещей в MiniGUI?


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 89
Зарегистрирован: 15.12.06
ссылка на сообщение  Отправлено: 03.03.08 11:25. Заголовок: Петр пишет: В обраб..


Петр пишет:

 цитата:
В обработчике WM_PAINT вы можете делать все, что пожелаете, в т.ч. и выводить текст.


А как там задавать шрифт (размер, жирность и проч.)? Т.е. как сделать что-то вроде:
hOldFont := SelectObject( hDC, _HMG_aControlFontHandle [ i ] )
(из C:\MiniGUI\SAMPLES\Advanced\SetThemes\demo.prg ), только с конкретными параметрами?




Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 90
Зарегистрирован: 15.12.06
ссылка на сообщение  Отправлено: 06.03.08 12:49. Заголовок: Туда же


Что-то никто не ответил - я сам нашёл: hOldFont=SelectObject(hDC,SetFontNameSize(hDC,,9,0,0,0,0))
А кто ответит вот на что: если картинка рисуется довольно долго (т.к. данные для неё берутся из файла), и пришёл запрос на рисование новой картинки - как прервать старую, есть такое средство, или нет другого выхода, кроме как ждать, когда нарисуются все старые варианты?

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 122
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет