Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.01.22;
Скачать: CL | DM;

Вниз

Как програмно закрасить кнопку (TButton) красным ?   Найти похожие ветки 

 
Officeman   (2006-01-03 14:28) [0]

С Наступившим !
Как програмно закрасить кнопку (TButton) красным ?


 
Плохиш ©   (2006-01-03 15:15) [1]

Никак


 
Leonid Troyanovsky ©   (2006-01-03 16:22) [2]


> Officeman   (03.01.06 14:28)  

> Как програмно закрасить кнопку (TButton) красным ?


1. Почему именно TButton? См. также [1].
2. И что сие должно означать? Т.е., а на зачем.

--
Regards, LVT.


 
Officeman   (2006-01-03 16:31) [3]

к чему ваши вопросы?! надо значит надо. =))

Влом заново на форме рисовать вместо 200 кнопок, 200 панелек (TPanel)
а по ходу разработки расчётной программы, потребовалось закрашивать кнопки (КРАСНЫМ) при определённом итоге расчётов. может возможно както с помочью CANVAS  ??????????????????????????

с Уважением, Officeman


 
Desdechado ©   (2006-01-03 16:41) [4]

воспользуйся гридом
для 200 кнопок самое оно


 
Leonid Troyanovsky ©   (2006-01-03 16:49) [5]


> Officeman   (03.01.06 16:31) [3]
> к чему ваши вопросы?! надо значит надо. =))


Кому надо?
Будь любезен изъясняться внятно.

--
Regards, LVT.


 
Наиль ©   (2006-01-03 17:33) [6]

200 кнопок не так уж и много.
Для начала тебе нужен соотвествующий компонент вместо TButton,
допустим это будет TBitBtn.
1. Открываем форму c кнопками TButton
2. Alt+F12
3. Ctrl+R. Заменяем TButton на TBitBtn
4. Alt+F12
5. F3
6. Открываем следующую форму, Alt+F12, F3.
7. переходим к пункту 4.

Замена всех TButton на TBitBtn занимает не больше 10 минут.


 
Officeman   (2006-01-05 13:27) [7]

to Наиль © види мо так и придётся делать.


 
Revan   (2006-01-06 16:25) [8]

РАбОТАЕТ!!!!!!!!!!!!!
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.



Страницы: 1 вся ветка

Текущий архив: 2006.01.22;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.089 c
2-1136536500
TBeginner
2006-01-06 11:35
2006.01.22
Замена текста в файлах каталога


2-1136505514
DoSpyRap
2006-01-06 02:58
2006.01.22
Удалённое копирование


1-1135074153
Andron.Ru
2005-12-20 13:22
2006.01.22
ФАЙЛЫ HELP!!


9-1122895939
NewWonder
2005-08-01 15:32
2006.01.22
Реализация движка в dll


2-1135765361
gidd
2005-12-28 13:22
2006.01.22
параметры видео файлов