Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 14.12.2015, 23:12
pivovaroffroman pivovaroffroman вне форума
Прохожий
 
Регистрация: 09.12.2015
Сообщения: 7
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Изменение цвета кнопки

Всем привет! Вновь обращаюсь к вам =) Объясните пожалуйста как сменить цвет кнопки Button или BitBin на чёрный, чтоб она всегда была черная
Ответить с цитированием
  #2  
Старый 14.12.2015, 23:59
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,051
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Если темы винды поддерживаются - то, по большому счету, никак. В этом случае отрисовка выполняется, условно говоря, виндой. Если темы отключить, то стандартное св-во Color.
Ответить с цитированием
  #3  
Старый 15.12.2015, 00:00
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Самое простое в случае BitBtn, это установить чёрный рисунок в глиф, с обычным баттоном намного сложнее, проще внедрить в среду самописный компонент, типа как из drkb
Код:
unit ColorButton; 
interface 

uses 
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, 
StdCtrls, Buttons, ExtCtrls; 

type 
TDrawButtonEvent = procedure(Control: TWinControl; 
   Rect: TRect; State: TOwnerDrawState) of object; 

TColorButton = class(TButton) 

private 
   FCanvas: TCanvas; 
   IsFocused: Boolean; 
   FOnDrawButton: TDrawButtonEvent; 

protected 
   procedure CreateParams(var Params: TCreateParams); override; 
   procedure SetButtonStyle(ADefault: Boolean); override; 
   procedure CMEnabledChanged(var Message: TMessage); message CM_ENABLEDCHANGED; 
   procedure CMFontChanged(var Message: TMessage); message CM_FONTCHANGED; 
   procedure CNMeasureItem(var Message: TWMMeasureItem); message CN_MEASUREITEM; 
   procedure CNDrawItem(var Message: TWMDrawItem); message CN_DRAWITEM; 
   procedure WMLButtonDblClk(var Message: TWMLButtonDblClk); message WM_LBUTTONDBLCLK; 
   procedure DrawButton(Rect: TRect; State: UINT); 

public 
   constructor Create(AOwner: TComponent); override; 
   destructor Destroy; override; 
   property Canvas: TCanvas read FCanvas; 

published 
   property OnDrawButton: TDrawButtonEvent read FOnDrawButton write FOnDrawButton; 
   property Color; 
end; 

procedure Register; 

implementation 

procedure Register; 
begin 
RegisterComponents('Samples', [TColorButton]); 
end; 

constructor TColorButton.Create(AOwner: TComponent); 
begin 
inherited Create(AOwner); 
FCanvas := TCanvas.Create; 
end; 

destructor TColorButton.Destroy; 
begin 
inherited Destroy; 
FCanvas.Free; 
end; 

procedure TColorButton.CreateParams(var Params: TCreateParams); 
begin 
inherited CreateParams(Params); 
with Params do Style := Style or BS_OWNERDRAW; 
end; 

procedure TColorButton.SetButtonStyle(ADefault: Boolean); 
begin 
if ADefault <> IsFocused then 
begin 
   IsFocused := ADefault; 
   Refresh; 
end; 
end; 

procedure TColorButton.CNMeasureItem(var Message: TWMMeasureItem); 
begin 
with Message.MeasureItemStruct^ do 
begin 
   itemWidth  := Width; 
   itemHeight := Height; 
end; 
end; 

procedure TColorButton.CNDrawItem(var Message: TWMDrawItem); 
var 
SaveIndex: Integer; 
begin 
with Message.DrawItemStruct^ do 
begin 
   SaveIndex := SaveDC(hDC); 
   FCanvas.Lock; 
   try 
     FCanvas.Handle := hDC; 
     FCanvas.Font := Font; 
     FCanvas.Brush := Brush; 
     DrawButton(rcItem, itemState); 
   finally 
     FCanvas.Handle := 0; 
     FCanvas.Unlock; 
     RestoreDC(hDC, SaveIndex); 
   end; 
end; 

Message.Result := 1; 
end; 

procedure TColorButton.CMEnabledChanged(var Message: TMessage); 
begin 
inherited; 
Invalidate; 
end; 

procedure TColorButton.CMFontChanged(var Message: TMessage); 
begin 
inherited; 
Invalidate; 
end; 

procedure TColorButton.WMLButtonDblClk(var Message: TWMLButtonDblClk); 
begin 
Perform(WM_LBUTTONDOWN, Message.Keys, Longint(Message.Pos)); 
end; 

procedure TColorButton.DrawButton(Rect: TRect; State: UINT); 
var 
Flags, OldMode: Longint; 
IsDown, IsDefault, IsDisabled: Boolean; 
OldColor: TColor; 
OrgRect: TRect; 
begin 
OrgRect := Rect; 
Flags := DFCS_BUTTONPUSH or DFCS_ADJUSTRECT; 
IsDown := State and ODS_SELECTED <> 0; 
IsDefault := State and ODS_FOCUS <> 0; 
IsDisabled := State and ODS_DISABLED <> 0; 
if IsDown then Flags := Flags or DFCS_PUSHED; 
if IsDisabled then Flags := Flags or DFCS_INACTIVE; 
if IsFocused or IsDefault then 
begin 
   FCanvas.Pen.Color := clWindowFrame; 
   FCanvas.Pen.Width := 1; 
   FCanvas.Brush.Style := bsClear; 
   FCanvas.Rectangle(Rect.Left, Rect.Top, Rect.Right, Rect.Bottom); 
   InflateRect(Rect, - 1, - 1); 
end; 

if IsDown then 
begin 
   FCanvas.Pen.Color := clBtnShadow; 
   FCanvas.Pen.Width := 1; 
   FCanvas.Brush.Color := clBtnFace; 
   FCanvas.Rectangle(Rect.Left, Rect.Top, Rect.Right, Rect.Bottom); 
   InflateRect(Rect, - 1, - 1); 
end else DrawFrameControl(FCanvas.Handle, Rect, DFC_BUTTON, Flags); 

if IsDown then OffsetRect(Rect, 1, 1); 
OldColor := FCanvas.Brush.Color; 
FCanvas.Brush.Color := Color; 
FCanvas.FillRect(Rect); 
FCanvas.Brush.Color := OldColor; 
OldMode := SetBkMode(FCanvas.Handle, TRANSPARENT); 
FCanvas.Font.Color := clBtnText; 

if IsDisabled then 
   DrawState(FCanvas.Handle, FCanvas.Brush.Handle, nil, Integer(Caption), 0, 
   ((Rect.Right - Rect.Left) - FCanvas.TextWidth(Caption)) div 2, 
   ((Rect.Bottom - Rect.Top) - FCanvas.TextHeight(Caption)) div 2, 
     0, 0, DST_TEXT or DSS_DISABLED) 
else 
   DrawText(FCanvas.Handle, PChar(Caption), - 1, Rect, 
     DT_SINGLELINE or DT_CENTER or DT_VCENTER); 
SetBkMode(FCanvas.Handle, OldMode); 
if Assigned(FOnDrawButton) then 
   FOnDrawButton(Self, Rect, TOwnerDrawState(LongRec(State).Lo)); 

if IsFocused and IsDefault then 
begin 
   Rect := OrgRect; 
   InflateRect(Rect, - 4, - 4); 
   FCanvas.Pen.Color := clWindowFrame; 
   FCanvas.Brush.Color := clBtnFace; 
   DrawFocusRect(FCanvas.Handle, Rect); 
end; 
end; 
end.
Ответить с цитированием
  #4  
Старый 15.12.2015, 00:18
pivovaroffroman pivovaroffroman вне форума
Прохожий
 
Регистрация: 09.12.2015
Сообщения: 7
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Спасибо большое! Еще вопрос не по теме намного, у меня разрешение на экране 1920х1080, а на компах на учебе 1024х768. Как сделать чтоб окна, картинки и кнопки в делфи при запуске программы настраивались под разрешение рабочего стола?

Последний раз редактировалось pivovaroffroman, 15.12.2015 в 00:20.
Ответить с цитированием
  #5  
Старый 15.12.2015, 08:36
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Цитата:
Сообщение от pivovaroffroman
Спасибо большое! Еще вопрос не по теме намного, у меня разрешение на экране 1920х1080, а на компах на учебе 1024х768. Как сделать чтоб окна, картинки и кнопки в делфи при запуске программы настраивались под разрешение рабочего стола?
надо делать программу под размеры экрана 1024*768, а не масштабировать. ведь Microsoft Office работает на любых разрешениях. 1920*1080 это 16:9, а 1024*768 это 4:3. жаль не все телеканалы еще об этом знают.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 11:58.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter