Содержание материала

Комментарии специалистов:

 

InvalidateRect на событие Resize ничего не даёт. Но даже без него

кнопка всё равно моргает при Resize формы... Надо ещё где-то убрать

 

Для рисования кнопок на заголовке окна лучше пользоваться

DrawFrameControl а не DrawEdge... Так и с не серыми настройками

интерфейса всё правильно будет. Да и проще так.

 

Названия функций, констант и т.п лучше писать так, как они в описаниях

даются, а не подряд маленькими буквами. Особенно для публикации. Так

оно и читается по большей части лучше, и в С такая привычка Вам не

помешает...

 

Сравнивать логическое значение с логической константой чтоб получить

логическое значение глупо, так как логическое значение у Вас уже есть.

тоесь вместо

if (pressed=true) and (focuslost=false)

лучше писать

if Pressed and not FocusLost

 

Для конструирования прямоугольников и точек из координат есть две

простые функции Rect и Point.

 

 

В общем Ваша процедура FormPaint может выглядеть так:

Code:

procedure TMainForm.FormPaint(Sender: TObject);

var h1:THandle;

begin

h1:=GetWindowDC(MainForm.Handle);

rec:=Rect(MainForm.Width-75,6,MainForm.Width-60,20);

if Pressed and not FocusLost then

DrawFrameControl(h1, rec, DFC_BUTTON, DFCS_BUTTONPUSH or DFCS_PUSHED)

else

DrawFrameControl(h1, rec, DFC_BUTTON, DFCS_BUTTONPUSH);

ReleaseDC(MainForm.Handle,h1);

end;

 

Но вообще-то рисовать эту кнопку надо только при WM_NCPAINT, а не

всегда... И вычислять координаты по другому... Вдруг размер элементов

заголовка у юзера в системе не стандартный? А это просто настраивается... 

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить