Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.01.22;
Скачать: [xml.tar.bz2];

Вниз

Как програмно закрасить кнопку (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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.053 c
2-1135677661
Ice
2005-12-27 13:01
2006.01.22
Как "отцепить" мышь от контрола ?


3-1132729810
syte_ser78
2005-11-23 10:10
2006.01.22
Помогите с написанием запроса


4-1131728932
Aragon
2005-11-11 20:08
2006.01.22
Version Info EXE


2-1136505287
DoSpyRap
2006-01-06 02:54
2006.01.22
Копирование директории


1-1135011563
oleggar
2005-12-19 19:59
2006.01.22
2 вопроса





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