Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Задать цвет Button 
:(
    Опции темы
Veve
Дата 8.1.2005, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 1.1.2005
Где: Латвия, Рига

Репутация: нет
Всего: 13



Подскажите пожалуйста, как в Delphi7, без особых заморочек, закрасить кнопку любым цветом. И ещё, таже кнопка и схожая проблема, как поминять цвет надписи на кнопке?
В окне Object Inspector выберай свойство Font-Color ну и там нужный цвет, ничего не меняеться.
PM MAIL ICQ Skype MSN   Вверх
Akella
Дата 8.1.2005, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



без особых замороче не получиться, пока воспользуйся поиском по форуму
Добавлено @ 11:40
можно использовать TSpeedButton (Flat:=true)
Добавлено @ 11:41
забыл, кладываешь, кнопкуна панель и у панели меняешь цвет, в противном случае ставь доп. библиотеки
PM MAIL   Вверх
Akella
Дата 8.1.2005, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



вот из нашей чудесной базы 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.

--------------------------------------------------------------------------------

В книгах Калверта, Свана и других авторов можно найти похожий текст. Смысл текста – "Изменить цвет кнопок Button, BitBtn нельзя, т.к. их рисует WINDOWS". Если нельзя, но ОЧЕНЬ НУЖНО, то можно.

Небольшой компонент ColorBtn, дает возможность использовать в кнопках цвет. Кроме того, представлено новое свойство - Frame3D, позволяющее получить более реалистичный вид нажатой кнопки. В отличие от API, при изменении значения свойства Frame3D, не требуется переоткрытие компонента.

Примечание. Кнопку по-прежнему рисует WINDOWS, а раскрашивает ее ColorBtn. Код компонента на 90% повторяет код BitBtn, ничего необычного здесь нет. Чаще заглядывайте в VCL - можно найти много интересного. На рисунке представлены ColorButton и ColorBitBtn.



unit colorbtn;

interface

uses

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

type

 TColorBtn = class(TButton)
 private
   FCanvas: TCanvas;
   IsFocused: Boolean;
   F3DFrame: boolean;
   FButtonColor: TColor;
   procedure Set3DFrame(Value: boolean);
   procedure SetButtonColor(Value: TColor);
   procedure CNDrawItem(var Message: TWMDrawItem); message CN_DRAWITEM;
   procedure WMLButtonDblClk(var Message: TWMLButtonDblClk); message
     WM_LBUTTONDBLCLK;
   procedure DrawButtonText(const Caption: string; TRC: TRect; State:
     TButtonState; BiDiFlags: Longint);
   procedure CalcuateTextPosition(const Caption: string; var TRC: TRect;
     BiDiFlags: Longint);
 protected
   procedure CreateParams(var Params: TCreateParams); override;
   procedure SetButtonStyle(ADefault: Boolean); override;
 public
   constructor Create(AOwner: TComponent); override;
   destructor Destroy; override;
 published
   property ButtonColor: TColor read FButtonColor write SetButtonColor default
     clBtnFace;
   property Frame3D: boolean read F3DFrame write Set3DFrame default False;
 end;

procedure Register;

implementation

{ TColorBtn }

constructor TColorBtn.Create(AOwner: TComponent);
begin
 inherited Create(AOwner);
 Height := 21;
 FCanvas := TCanvas.Create;
 FButtonColor := clBtnFace;
 F3DFrame := False;
end;

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

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

procedure TColorBtn.Set3DFrame(Value: boolean);
begin
 if F3DFrame <> Value then
   F3DFrame := Value;
end;

procedure TColorBtn.SetButtonColor(Value: TColor);
begin
 if FButtonColor <> Value then
 begin
   FButtonColor := Value;
   Invalidate;
 end;
end;

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

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

procedure TColorBtn.CNDrawItem(var Message: TWMDrawItem);
var
 RC: TRect;
 Flags: Longint;
 State: TButtonState;
 IsDown, IsDefault: Boolean;
 DrawItemStruct: TDrawItemStruct;
begin
 DrawItemStruct := Message.DrawItemStruct^;
 FCanvas.Handle := DrawItemStruct.HDC;
 RC := ClientRect;
 with DrawItemStruct do
 begin
   IsDown := ItemState and ODS_SELECTED <> 0;
   IsDefault := ItemState and ODS_FOCUS <> 0;
   if not Enabled then
     State := bsDisabled
   else if IsDown then
     State := bsDown
   else
     State := bsUp;
 end;
 Flags := DFCS_BUTTONPUSH or DFCS_ADJUSTRECT;
 if IsDown then
   Flags := Flags or DFCS_PUSHED;
 if DrawItemStruct.ItemState and ODS_DISABLED <> 0 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(RC.Left, RC.Top, RC.Right, RC.Bottom);
   InflateRect(RC, -1, -1);
 end;
 if IsDown then
 begin
   FCanvas.Pen.Color := clBtnShadow;
   FCanvas.Pen.Width := 1;
   FCanvas.Rectangle(RC.Left, RC.Top, RC.Right, RC.Bottom);
   InflateRect(RC, -1, -1);
   if F3DFrame then
   begin
     FCanvas.Pen.Color := FButtonColor;
     FCanvas.Pen.Width := 1;
     DrawFrameControl(DrawItemStruct.HDC, RC, DFC_BUTTON, Flags);
   end;
 end
 else
   DrawFrameControl(DrawItemStruct.HDC, RC, DFC_BUTTON, Flags);
 FCanvas.Brush.Color := FButtonColor;
 FCanvas.FillRect(RC);
 InflateRect(RC, 1, 1);
 if IsFocused then
 begin
   RC := ClientRect;
   InflateRect(RC, -1, -1);
 end;
 FCanvas.Font := Self.Font;
 if IsDown then
   OffsetRect(RC, 1, 1);
 DrawButtonText(Caption, RC, State, 0);
 if IsFocused and IsDefault then
 begin
   RC := ClientRect;
   InflateRect(RC, -4, -4);
   FCanvas.Pen.Color := clWindowFrame;
   Windows.DrawFocusRect(FCanvas.Handle, RC);
 end;
 FCanvas.Handle := 0;
end;

procedure TColorBtn.CalcuateTextPosition(const Caption: string; var TRC: TRect;
 BiDiFlags: Integer);
var
 TB: TRect;
 TS, TP: TPoint;
begin
 with FCanvas do
 begin
   TB := Rect(0, 0, TRC.Right + TRC.Left, TRC.Top + TRC.Bottom);
   DrawText(Handle, PChar(Caption), Length(Caption), TB, DT_CALCRECT or
     BiDiFlags);
   TS := Point(TB.Right - TB.Left, TB.Bottom - TB.Top);
   TP.X := ((TRC.Right - TRC.Left) - TS.X + 1) div 2;
   TP.Y := ((TRC.Bottom - TRC.Top) - TS.Y + 1) div 2;
   OffsetRect(TB, TP.X + TRC.Left, TP.Y + TRC.Top);
   TRC := TB;
 end;
end;

procedure TColorBtn.DrawButtonText(const Caption: string; TRC: TRect; State:
 TButtonState; BiDiFlags: Integer);
begin
 with FCanvas do
 begin
   CalcuateTextPosition(Caption, TRC, BiDiFlags);
   Brush.Style := bsClear;
   if State = bsDisabled then
   begin
     OffsetRect(TRC, 1, 1);
     Font.Color := clBtnHighlight;
     DrawText(Handle, PChar(Caption), Length(Caption), TRC,
       DT_CENTER or DT_VCENTER or BiDiFlags);
     OffsetRect(TRC, -1, -1);
     Font.Color := clBtnShadow;
     DrawText(Handle, PChar(Caption), Length(Caption), TRC,
       DT_CENTER or DT_VCENTER or BiDiFlags);
   end
   else
     DrawText(Handle, PChar(Caption), Length(Caption), TRC,
       DT_CENTER or DT_VCENTER or BiDiFlags);
 end;
end;

procedure Register;
begin
 RegisterComponents('Controls', [TColorBtn]);
end;

end.



Небольшое дополнение. Кнопку по прежнему рисует WINDOWS, а раскрашивает ее ColorBtn. Код компонента на 90% повторяет код BitBtn, ничего необычного здесь нет. Хочется повторить слова Калверта – "Пользуйтесь исходным кодом". Чаще заглядывайте в VCL - можно найти много интересного.


PM MAIL   Вверх
Veve
  Дата 8.1.2005, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 1.1.2005
Где: Латвия, Рига

Репутация: нет
Всего: 13



Понятно. Спасибо за старание.

Это сообщение отредактировал(а) Veve - 8.1.2005, 16:51
PM MAIL ICQ Skype MSN   Вверх
Zero
Дата 8.1.2005, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: 8
Всего: 24



Цитата(Veve @ 8.1.2005, 11:22)
Подскажите пожалуйста, как в Delphi7, без особых заморочек, закрасить кнопку любым цветом.

Цитата(dsergey @ 8.1.2005, 11:33)
без особых замороче не получиться,

Зря ты так думаешь... smile
Только это получится для кнопки имеющей свойство Glyph, например TBitBtn или TSpeedButton... Вот пример для TSpeedButton:
Код

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
 speedbutton1.Glyph.Width:=speedbutton1.Width;
 speedbutton1.Glyph.Height:=speedbutton1.Height;
 speedbutton1.Glyph.Canvas.Pen.Color:=clblack;  //здесь пиши любой цвет (можно ставить номер)
 speedbutton1.Glyph.Canvas.Pen.Width:=speedbutton1.Height-1;
 speedbutton1.Glyph.Canvas.Pen.Style:=pssolid;
 speedbutton1.Glyph.Canvas.MoveTo(1,speedbutton1.Height div 2);
 speedbutton1.Glyph.Canvas.LineTo(speedbutton1.Width - 8,speedbutton1.Height div 2);
end;

Цитата(Veve @ 8.1.2005, 11:22)
И ещё, таже кнопка и схожая проблема, как поминять цвет надписи на кнопке?

Цитата(Veve @ 8.1.2005, 11:22)
В окне Object Inspector выберай свойство Font-Color ну и там нужный цвет, ничего не меняеться.

Вообщето работает, но ты наверно что-то нетак делаешь, но если хочешь попробуй сделать это тоже программно:
Код

speedbutton1.Font.Color:=clred; {за место текста также можно исп. номер цвета}

PM MAIL ICQ   Вверх
Veve
Дата 9.1.2005, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 1.1.2005
Где: Латвия, Рига

Репутация: нет
Всего: 13



Цитата
Вообщето работает, но ты наверно что-то нетак делаешь, но если хочешь попробуй сделать это тоже программно:
Код 

speedbutton1.Font.Color:=clred; {за место текста также можно исп. номер цвета}


Вобщето я и не сомневался, что для speedButton будет работать, как я говорил выше я имел в виду простую кнопку и её свойство Font-Color

Это сообщение отредактировал(а) Veve - 9.1.2005, 14:11
PM MAIL ICQ Skype MSN   Вверх
Zero
Дата 9.1.2005, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: 8
Всего: 24



Прикольно, а внатуре... У меня тоже не меняется. smile
Ни программно, ни обычно... smile
PM MAIL ICQ   Вверх
Veve
Дата 9.1.2005, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 1.1.2005
Где: Латвия, Рига

Репутация: нет
Всего: 13



Цитата
Прикольно, а внатуре... У меня тоже не меняется. 
Ни программно, ни обычно... 


Вот и я про тоже.
PM MAIL ICQ Skype MSN   Вверх
Vit
Дата 9.1.2005, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 48
Всего: 207



Цитата(Zero @ 9.1.2005, 05:48)
Прикольно, а внатуре... У меня тоже не меняется. 
Ни программно, ни обычно... 



Имеется ввиду приведенный пример из DRKB или стандартное свойство color? Если стандартное свойство - то не меняется, так как в винде не определена такая возможность, точнее она определяется темой винды, а не программой. Поэтому без заморочек не получится


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Alex
Дата 9.1.2005, 21:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 80
Всего: 162



Приведенный пример из DRKB полностью рабочий. Проверил сейчас лично.
Также, этот пример можно найти в нашем FAQ: http://vingrad.ru/VF-DLP-000910


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
ShuVaS
Дата 9.1.2005, 23:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 79
Регистрация: 26.12.2004
Где: Севастополь

Репутация: нет
Всего: нет



Раз тема о кнопках зашла - как мне без особых заморочек поменять рисунок на кнопке или на имаже во время работы программы (при наведениии принажатии и т.д.)
PM MAIL WWW ICQ   Вверх
Vit
Дата 10.1.2005, 01:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 48
Всего: 207



Цитата(ShuVaS @ 9.1.2005, 14:26)
Раз тема о кнопках зашла - как мне без особых заморочек поменять рисунок на кнопке или на имаже во время работы программы (при наведениии принажатии и т.д.)


Какая кнопка имеется ввиду?


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Alex
Дата 10.1.2005, 01:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 80
Всего: 162



Цитата(ShuVaS @ 9.1.2005, 23:26)
Раз тема о кнопках зашла - как мне без особых заморочек поменять рисунок на кнопке или на имаже во время работы программы (при наведениии принажатии и т.д.)

http://vingrad.ru/VF-DLP-000906


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Slawanix
Дата 10.1.2005, 01:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 29.7.2004
Где: г. Великие Луки

Репутация: нет
Всего: 1



Цитата
Подскажите пожалуйста, как в Delphi7, без особых заморочек, закрасить кнопку любым цветом. И ещё, таже кнопка и схожая проблема, как поминять цвет надписи на кнопке?

Не совсем то,что тыспрашиваешь, но результат должен быть smile . Можно создать .bmp, имитирующий кнопку с надписью нужного цвета и размера, и поместить на BitBtn. И мороки в разы меньше. smile
--------------------
моск кипит    
PM MAIL WWW   Вверх
ShuVaS
Дата 10.1.2005, 10:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 79
Регистрация: 26.12.2004
Где: Севастополь

Репутация: нет
Всего: нет



Я имею ввиду любую кнопку(с которой легче) или удобней использовать Timage?

PM MAIL WWW ICQ   Вверх
Zero
Дата 10.1.2005, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: 8
Всего: 24



А вообще, кнопка TButton, это устаревшая разработка и я ей никогда не пользуюсь...
Помоему эту кнопку вобще надо убрать из стандартных компонентов Delphi. У неё нет ни каких плюсов, только одни минусы.
PM MAIL ICQ   Вверх
Akella
Дата 10.1.2005, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Цитата
А вообще, кнопка TButton, это устаревшая разработка и я ей никогда не пользуюсь...
Помоему эту кнопку вобще надо убрать из стандартных компонентов Delphi. У неё нет ни каких плюсов, только одни минусы.

Зря ты так. Все гениальное просто.
PM MAIL   Вверх
Alex
Дата 10.1.2005, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 80
Всего: 162



Zero, То, что ты ей не пользуешься, это не говорит о том, что ей больше никто не пользуется. И как правильно сказал dsergey "Все гениальное просто".


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Vit
Дата 10.1.2005, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 48
Всего: 207



Цитата(Zero @ 10.1.2005, 02:11)
А вообще, кнопка TButton, это устаревшая разработка



Это не разработка... Ты в исходники VCL заглядывал? Очень рекомендую, тогда поймёшь зачем она там...


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Zero
Дата 11.1.2005, 00:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: 8
Всего: 24



dsergey и Alex ваши ответы типа:
Цитата
"Все гениальное просто"
не очём не говорят, нужно либо давать примеры, плюсов либо не говорить нечего.
Цитата(Vit @ 10.1.2005, 16:49)
Очень рекомендую, тогда поймёшь зачем она там...

Ладно Vit, гляну после того как сдам сессию... А пока побыстрому не могли бы вы сказать её плюсы.
Вообщето я когда читал Фаронова, я там помню было написано, что вначале была придумана TButton, а потом появились TBitBtn и TSpeedButton, типа модификации за счёт ввода изображения и др. мелочей.
PM MAIL ICQ   Вверх
Alex
Дата 11.1.2005, 01:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 80
Всего: 162



Zero, TButton да будет тебе известно, это один из семи базовых классов системы Windows при разных параметрах при создании он может превращаться в Button, CheckBox и RadioButton.

Если в Vcl убрать компонент TButton, то первое не понятно, что делать с компонентами, которые построены на базе TButton и не понятно как в этом случае производить поддержку старых проектов. И вообще все компоненты в любой среде разработки под Windows построены на базе семи базовых компонентах винды.

Цитата(Zero @ 11.1.2005, 00:39)
Вообщето я когда читал Фаронова, я там помню было написано, что вначале была придумана TButton, а потом появились TBitBtn и TSpeedButton, типа модификации за счёт ввода изображения и др. мелочей.

Как ты теперь знаешь, Borland не придумывал TButton. TBitBtn и TSpeedButton не являются потомками TButton, они созданы на основе класса TGraphicControl и просто внешне похожи на TButton.


Цитата(Zero @ 11.1.2005, 00:39)
А пока побыстрому не могли бы вы сказать её плюсы.

Дело, конечно, ваше какие компоненты использовать, но если делать нормальные и качественные программы, то в них я бы вам советовал ветки по возможности использовать TButton, т. к. пользователь привыкшей к windows интерфейсу гораздо приятней и уютней будет чувствовать себя за боле менее стандартным интерфейсом.
Добавлено @ 01:18
А по VCL я тебе советую полазить и посмотреть, как и, что там написано, много, что оттуда для себя сможешь почерпнуть.


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Zero
Дата 11.1.2005, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: 8
Всего: 24



Цитата(Alex @ 11.1.2005, 01:10)
если делать нормальные и качественные программы, то в них я бы вам советовал ветки по возможности использовать TButton, т. к. пользователь привыкшей к windows интерфейсу гораздо приятней и уютней будет чувствовать себя за боле менее стандартным интерфейсом.

Alex а кто тебя заставляет втыкать какие-либо картинки в кнопку, не хочешь не втыкай, TBitBtn тоже по умолчанию обсалютно похожа на TButton... и как таковых плюсов ты мне и не сказал (именно чем лучше TButton относительно TBitBtn).
Цитата(Alex @ 11.1.2005, 01:10)
Если в Vcl убрать компонент TButton, то первое не понятно, что делать с компонентами, которые построены на базе TButton

Я же не говорю что нужно убирать этот клас, а только про компонент... Ведь сам компонент находящийся в панели инструментов же не влияет, на что-либо?! smile
Добавлено @ 12:38
Цитата(Alex @ 11.1.2005, 01:10)
А по VCL я тебе советую полазить и посмотреть, как и, что там написано, много, что оттуда для себя сможешь почерпнуть.
Обязательно узнаю, после сессии... smile

PM MAIL ICQ   Вверх
Alex
Дата 11.1.2005, 21:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 80
Всего: 162



Цитата(Zero @ 11.1.2005, 12:37)
и как таковых плюсов ты мне и не сказал (именно чем лучше TButton относительно TBitBtn).

Плюсы ты можешь получить, сам того не ожидая. Все помнят, что когда появился Win XP, сразу многие программисты захотели сделать в своих программах поддержку XP тем. Все быстренько прознали, что для этого нужно всего навьего подцепить манифесты и все будет замечательно. Узнали об этом счастье и дельфисты, но на тот момент последней доступной версией была 6 и когда ее разрабатывали, еще знать не знали не о каких манифестах. Ну ладно где наша не пропадала народ компилил res файл, который включал в себя текст манифеста и включали его в проект. А теперь есть два варианта развития событий:
1) Программа написана с использованием стандартного TButton, который в свою очередь создается средствами системы и соответственно поддерживает все нововведения. Программа выглядит как ей и полагается при включенной Xp теме.
2) Программа написана с использованием TBitBtn, который не построен на базе стандартного компонента системы Button и его отрисовкой занимается сам Borland, который не мог знать, что там, что-то появится. Программа выглядит с точки зрения пользователя довольно странно при включенной Xp теме.

Вот и было у людей, которые использовали везде в своих программах TBitBtn в место TButton два варианта: ждать пока Borland выпустит D7 и не факт, что оно точно там будет все нормально обрабатывать или переписывать программы с TBitBtn на TButton.

Замечу, что вроде бы безобидный компонент TBitBtn, какая хорошая замена TButton, но какой подводный камень в себе содержал.

Вот поэтому я НИКОГДА не использую TBitBtn без особой необходимости. И всегда думаю, чем мне грозит использование не стандартных компонентов. И очень часто перед использованием сторонних компонентов смотрю, на базе чего они построены.

Учите Vcl и Win Api, и вы сможете обойти кучу подводных камней.


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Zero
Дата 11.1.2005, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: 8
Всего: 24



Вобщем спасибо Alex, я понял про что ты... ни когда об этом не задумывался, теперь буду знать. smile
И кстати что такое VCl, типа факу???
PM MAIL ICQ   Вверх
Alex
Дата 11.1.2005, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 80
Всего: 162



VCL - это Visual Control Library.
Добавлено @ 23:15
Грубо говоря, это набор компонентов, который входит в Delphi.


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Zero
Дата 12.1.2005, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: 8
Всего: 24



У-у-у-у.... А где его найти можно? А то через поиск я не нашёл. smile
PM MAIL ICQ   Вверх
Alex
Дата 12.1.2005, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 80
Всего: 162



Цитата(Zero @ 12.1.2005, 10:53)
У-у-у-у.... А где его найти можно? А то через поиск я не нашёл.

Запустить Delphi, открыть проект, и посмотреть на uses часть любого модуля, все unit'ы, которые там описаны и есть VCL. smile

Если честно то мне стало как-то не по себе от вашего вопроса. smile Не в обиду, но почитайте литературу, по Delphi. Форумы и FAQ, это полезные вещи, но и книги где описаны азы нужно читать.


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Zero
Дата 12.1.2005, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: 8
Всего: 24



Цитата(Alex @ 12.1.2005, 11:36)
Запустить Delphi, открыть проект, и посмотреть на uses часть любого модуля, все unit'ы, которые там описаны и есть VCL.

Alex, если ты про текст каждого модуля, то это не так просто как ты думаешь... За небольшое кол-во времени его не разберёшь.
Цитата(Alex @ 12.1.2005, 11:36)
Если честно то мне стало как-то не по себе от вашего вопроса.
Alex а ты что думал, я сейчас на 3 курсе, и Delphi как таковое мы только в этом семестре стали проходить. Сомневаюсь что ты знал его лучше меня после пол года изучения.
Цитата(Alex @ 12.1.2005, 11:36)
Форумы и FAQ, это полезные вещи, но и книги где описаны азы нужно читать.
Вот я то что и делаю. smile
PM MAIL ICQ   Вверх
Alex
Дата 12.1.2005, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 80
Всего: 162



Цитата(Zero @ 12.1.2005, 14:53)
Alex а ты что думал, я сейчас на 3 курсе, и Delphi как таковое мы только в этом семестре стали проходить. Сомневаюсь что ты знал его лучше меня после пол года изучения.

Мня Delphi, никто в учебных заведениях не учил. А учителей, которые преподают людям Delphi, а люди не знают после их лекций, что такое VCL я бы увольнял.
Добавлено @ 15:05
Цитата(Zero @ 12.1.2005, 14:53)
Alex, если ты про текст каждого модуля, то это не так просто как ты думаешь... За небольшое кол-во времени его не разберёшь.

Я и не говорю, что ты их все должен разобрать это и не нужно, но модель построения понять можно.

Можно вопрос? Чему вас тогда учат? Как кнопочку на форму кинуть? smile


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Vit
Дата 12.1.2005, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 48
Всего: 207



Ладно, хватит прения... Очевидный плюс TButton - что это СТАНДАРТНЫЙ компонент windows. Т.е. пользователь заходит например в свойства дисплея, меняет стиль Windows кнопок и они меняются во ВСЕХ приложениях! TButton - поменяется, а TBitBtn - нет! Хорошо это или нет? Вопрос философский... Тебе хочется сделать по-своему, а кому то хочется чтобы ВСЕ кнопки были серыми, а не разноцветными... Есть например дальтоники - и они могут зелёный текст на красном фоне видеть примерно так как ты жёлный на белом...


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
ShuVaS
Дата 12.1.2005, 18:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 79
Регистрация: 26.12.2004
Где: Севастополь

Репутация: нет
Всего: нет



Есть еще вопросик - у мена есть битмап на котором изображно 50 иконок.Я сохраняю его в ресурсах и могу обащать через LoadFromResourseID - как мне обраться не ко всему рисунку я именко к иконке (размеры допустим 16 на 16)
PM MAIL WWW ICQ   Вверх
Alex
Дата 12.1.2005, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 80
Всего: 162



ShuVaS 1 тема 1 вопрос!


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
p0s0l
Дата 13.1.2005, 00:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 58
Всего: 112



Цитата(Alex @ 11.1.2005, 01:10)
Как ты теперь знаешь, Borland не придумывал TButton. TBitBtn и TSpeedButton не являются потомками TButton, они созданы на основе класса TGraphicControl и просто внешне похожи на TButton.
TBitBtn - наследник TButton smile. Поэтому он тоже является стандартным окном Windows (класс "BUTTON"), правда со стилем BS_OWNERDRAW.
А TSpeedButton - неполноценная кнопка, просто интерактивная картинка, которая рисуется на канвасе родителя. У неё нет Handle, т.к. это не окно -> нет очереди сообщений, не может иметь фокуса (т.е. нажать на неё можно только мышкой)... В этом есть свои плюсы и минусы...

Цитата(Alex @ 11.1.2005, 23:11)
VCL - это Visual Control Library.
Вернее Visual Component Library


--------------------
С уважением, г-н Посол.
PM   Вверх
Zero
Дата 13.1.2005, 00:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: 8
Всего: 24



Цитата(Alex @ 12.1.2005, 15:03)
Можно вопрос? Чему вас тогда учат? Как кнопочку на форму кинуть?

1. У меня был курсач на тему создания рабочего стола
2. Про польскую запись
3. Восемь лабораторок (4-на изучение Delphi, и 4 по OpenGl)
Цитата(p0s0l @ 13.1.2005, 00:30)
TBitBtn - наследник TButton

Цитата(Alex @ 11.1.2005, 21:42)
Программа написана с использованием TBitBtn, который не построен на базе стандартного компонента системы Button
Интересно и кто же из вас прав???
PM MAIL ICQ   Вверх
p0s0l
Дата 13.1.2005, 01:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 58
Всего: 112



Цитата(Zero @ 13.1.2005, 00:52)
Интересно и кто же из вас прав???
Возможно, Alex говорит про другую версию Delphi, но я про Delphi 7...
Код
 TBitBtn = class(TButton)



Добавлено @ 01:14
Цитата(p0s0l @ 13.1.2005, 01:09)
Возможно, Alex говорит про другую версию Delphi
Хотя это маловероятно smile, т.к. это большая разница - наследоваться от TButton (от TWinControl) или от TGraphicControl... В разных версиях Delphi не должна меняться иерархия, иначе потеряется совместимость проектов...


Добавлено @ 01:18
Да и вообще в цитате:
Цитата(Alex)
Программа написана с использованием TBitBtn, который не построен на базе стандартного компонента системы Button
речь идёт не о VCL TButton, а WinAPI BUTTON (как я понял)...
Хотя в таком случае тоже несовсем верно, т.к. я уже говорил, что TBitBtn - это тоже окно класса BUTTON, просто имеет стиль BS_OWNERDRAW, то бишь рисует кнопочку не винда, а программа...



--------------------
С уважением, г-н Посол.
PM   Вверх
Zero
Дата 13.1.2005, 02:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: 8
Всего: 24



p0s0l теперь ты меня окончательно запутал.
Цитата(p0s0l @ 13.1.2005, 00:30)
А TSpeedButton - неполноценная кнопка, просто интерактивная картинка, которая рисуется на канвасе родителя. У неё нет Handle, т.к. это не окно -> нет очереди сообщений, не может иметь фокуса (т.е. нажать на неё можно только мышкой)... В этом есть свои плюсы и минусы...
Вот такое то я читал, и вот это...
Цитата(p0s0l @ 13.1.2005, 00:30)
TBitBtn - наследник TButton . Поэтому он тоже является стандартным окном Windows (класс "BUTTON"), правда со стилем BS_OWNERDRAW.

Приблизительно то что я думал сначала.
PM MAIL ICQ   Вверх
Vit
Дата 13.1.2005, 04:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 48
Всего: 207



Цитата(Zero @ 12.1.2005, 17:38)
p0s0l теперь ты меня окончательно запутал.



Исходники VCL тебе в помощь! Пока не будешь в них ходить за помощью и ответами на свои вопросы и учиться программировать разбирая их - программистом на Дельфи называться не сможешь... Это не выпендрёжь, а чистая правда жизни. У тебя достаточный багаж знаний и путешествие в исходники компонентов - это естественный и необходимый для тебя шаг.


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Alex
Дата 13.1.2005, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 80
Всего: 162



Цитата(Zero @ 13.1.2005, 02:38)
p0s0l теперь ты меня окончательно запутал.

Запутал тебя не p0s0l, а я т.к. стал говорить, что TBitBtn - не наследник TButton smile
smile Но я точно помню, что были проблемы с манифестами у этих кнопок. А проблемы эти понятны. Ведь отрисовкой занимается программа. Но я за сегодня, это обязательно проверю.

Все мои прошлые высказывания применительно к SpeedButton.

Извините за дезинформацию.


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Ddddddelphi
Дата 13.1.2005, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 1.12.2004

Репутация: нет
Всего: нет



Я в яндексе когда-то наткнулся вот на такой ответ, незнаю на сколько это неверный подход к делу со стороны автора - кроме того что больше на малость занимает объём памяти smile


Цитата

Саму кнопку, конечно, украсить возможно, но очень много писанины и новичку не всегда понятно что к чему писать. Поэтому предлагаю использовать не кнопку а коммпонент, который очень похож на кнопку и без проблем раскрашивается в любой цвет- Panel (на странице Standard). Чтобы этот компонент вёл себя как кнопка, присвойте свойству BevelOuter значение bvRaised и обработайте события MouseUp и MouseDown:

Код

procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
 if Button = mbleft then
 Panel1.BevelOuter:= bvLowered;// "Вдавливаем" кнопку
end;
procedure TForm1.Panel1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
 if Button = mbleft then
 begin
   Panel1.BevelOuter:= bvRaised;//"Поднимаем" кнопку
   ...
   {здесь какие-то действия после нажатия кнопки}
   ...
 end;
end;



PM MAIL   Вверх
p0s0l
Дата 13.1.2005, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 58
Всего: 112



Цитата(Alex @ 13.1.2005, 11:38)
Но я точно помню, что были проблемы с манифестами у этих кнопок.
Да, видимо раньше (в 6-ой и более старых версиях Delphi) рисование содержимого TBitBtn происходило через DrawFrameControl, а эта функция рисует одно и то же независимо от выбранного визуального стиля. В 7-ой версии уже используется UxTheme API, поэтому TBitBtn нормально отображается в соответсвии с выбранным визуальным стилем...
Но опять же есть хоть и маленькая, но вероятность того, что Microsoft изобретет еще один механизм визуального отображения, более продвинутый чем теперешние визуальные стили, и тогда опять надо будет ждать новой версии Delphi...


--------------------
С уважением, г-н Посол.
PM   Вверх
p0s0l
Дата 13.1.2005, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 58
Всего: 112



Самое интересное, что Microsoft очень странно поступил - класс BUTTON поддерживает отображение картинок и иконок. Но если установить у BUTTON иконку или битмап (BM_SETIMAGE), то она тут же перестаёт использовать визуальные стили smile. Хотя может это чисто так сделали, для кучи, а потом забыли... smile

Цитата(Ddddddelphi @ 13.1.2005, 13:14)
Саму кнопку, конечно, украсить возможно, но очень много писанины и новичку не всегда понятно что к чему писать. Поэтому предлагаю использовать не кнопку а коммпонент, который очень похож на кнопку и без проблем раскрашивается в любой цвет- Panel (на странице Standard). Чтобы этот компонент вёл себя как кнопка, присвойте свойству BevelOuter значение bvRaised и обработайте события MouseUp и MouseDown:
Это не очень хороший способ, т.к. панель чисто визуально отличается от кнопки (а в некоторых визуальных стилях может вообще очень сильно отличаться), такие кнопки будут смотреться не очень хорошо совместно с другими стандартными кнопками... Хотя кому-то может это и требуется...



--------------------
С уважением, г-н Посол.
PM   Вверх
Zero
Дата 13.1.2005, 18:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: 8
Всего: 24



p0s0l судя по твоим словам я всё больше начинаю убеждатся что с самого начала я говорил верно насчёт того что компонент TButton, обсалютно не нужен, и никаких плюсов у него нету.
Это типа как ОС-UNIX, и ОС_Linux. smile
PM MAIL ICQ   Вверх
Alex
Дата 13.1.2005, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 80
Всего: 162



Цитата(p0s0l @ 13.1.2005, 13:49)
Но опять же есть хоть и маленькая, но вероятность того, что Microsoft изобретет еще один механизм визуального отображения, более продвинутый чем теперешние визуальные стили, и тогда опять надо будет ждать новой версии Delphi...

Это практически наверняка


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Alex
Дата 14.1.2005, 00:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 80
Всего: 162



Вот как выглядело приложение созданное в D6:

Присоединённый файл ( Кол-во скачиваний: 6 )
Присоединённый файл  ____________01.gif


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Akella
Дата 14.1.2005, 09:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Цитата(Alex @ 13.1.2005, 18:57)
Цитата (p0s0l @ 13.1.2005, 13:49)
Но опять же есть хоть и маленькая, но вероятность того, что Microsoft изобретет еще один механизм визуального отображения, более продвинутый чем теперешние визуальные стили, и тогда опять надо будет ждать новой версии Delphi...


Это практически наверняка


Я читал на www.winall.ru (точную страницу на помню), что в LongHorn совершенно другая и кардинально новая графическая подсистема (полность 3D и даже рабочий стол)
PM MAIL   Вверх
p0s0l
Дата 14.1.2005, 20:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 58
Всего: 112



Тогда наверное самый правильный вариант был бы написание наследника от TButton, где винда сама рисует всю кнопку, а потом поверх этого рисуется картинка...



--------------------
С уважением, г-н Посол.
PM   Вверх
Veve
Дата 15.1.2005, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 1.1.2005
Где: Латвия, Рига

Репутация: нет
Всего: 13



Цитата
Button - что это СТАНДАРТНЫЙ компонент windows. Т.е. пользователь заходит например в свойства дисплея, меняет стиль Windows кнопок и они меняются во ВСЕХ приложениях!


Почему не меняется свойство color я как бы тогда разобрался, но тогда возникает следующий вопрос: для чего нужно размещать это свойство в object inspector, если его изменение никак не влияет на вид кнопки и вид кнопки зависит только от темы установленной в настройках Windows?


Теперь хотелось бы поблагодарить всех, кто откликнулся на данную проблему и в особенности тех, кто не смотря на искушение всё-таки говорил по существу.

Обращаюсь к модераторам форума.
Несмотря на изобилие сообщений, хотелось бы всё-таки, чтобы среди них не было каких-то личных разбирательств и посторонних вопросов.
А также, я считаю, что если речь идёт о каком-либо объекте (в данном случае о кнопке) это ещё не значит, что можно здесь писать всё, что ты знаешь о данном компоненте.

С уважением Veve.
PM MAIL ICQ Skype MSN   Вверх
Qangster
Дата 15.1.2005, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 99
Регистрация: 25.12.2004
Где: Баку

Репутация: нет
Всего: 2



Спасибо
PM MAIL   Вверх
Veve
Дата 15.1.2005, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 1.1.2005
Где: Латвия, Рига

Репутация: нет
Всего: 13



Цитата(Qangster @ 15.1.2005, 13:45)
Спасибо

За что?
PM MAIL ICQ Skype MSN   Вверх
Vit
Дата 15.1.2005, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 48
Всего: 207



Цитата(Veve @ 15.1.2005, 03:14)
Обращаюсь к модераторам форума.
Несмотря на изобилие сообщений, хотелось бы всё-таки, чтобы среди них не было каких-то личных разбирательств и посторонних вопросов.


Будет сделано! smile


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Veve
Дата 15.1.2005, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 1.1.2005
Где: Латвия, Рига

Репутация: нет
Всего: 13



Цитата
Будет сделано!


Спасибо.
PM MAIL ICQ Skype MSN   Вверх
p0s0l
Дата 16.1.2005, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 58
Всего: 112



Цитата(Veve @ 15.1.2005, 12:14)
Почему не меняется свойство color я как бы тогда разобрался, но тогда возникает следующий вопрос: для чего нужно размещать это свойство в object inspector, если его изменение никак не влияет на вид кнопки и вид кнопки зависит только от темы установленной в настройках Windows?
Дело в том, что тогда нужно создавать урезанный класс TFont, где не было бы свойства Color, делать урезанный визуальный редактор свойства TFont - зачем это ? Имхо, всё сделано правильно, не зачем плодить разные облегченные версии TFont.
Тем более неизвестно, вдруг в следующей версии винды цвет шрифта на кнопках уже будет учитываться ?...

Цитата(Veve @ 15.1.2005, 12:14)
А также, я считаю, что если речь идёт о каком-либо объекте (в данном случае о кнопке) это ещё не значит, что можно здесь писать всё, что ты знаешь о данном компоненте.
Учту smile


--------------------
С уважением, г-н Посол.
PM   Вверх
Zero
Дата 17.1.2005, 23:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: 8
Всего: 24



p0s0l а не знаешь, нельзя сделать так чтобы именно в этой кнопке в свойстве TFONT, например блокировалось то что не может использоватся.
Добавлено @ 23:03
Если нет (что скорее всего раз не сделали), то почему?
PM MAIL ICQ   Вверх
p0s0l
Дата 18.1.2005, 00:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 58
Всего: 112



Цитата(Zero @ 17.1.2005, 23:02)
p0s0l а не знаешь, нельзя сделать так чтобы именно в этой кнопке в свойстве TFONT, например блокировалось то что не может использоватся.
Ответ на этот вопрос только что прозвучал smile
Цитата(p0s0l @ 16.1.2005, 14:09)
Дело в том, что тогда нужно создавать урезанный класс TFont, где не было бы свойства Color, делать урезанный визуальный редактор свойства TFont - зачем это ? Имхо, всё сделано правильно, не зачем плодить разные облегченные версии TFont.
Тем более неизвестно, вдруг в следующей версии винды цвет шрифта на кнопках уже будет учитываться ?...




--------------------
С уважением, г-н Посол.
PM   Вверх
Zero
Дата 18.1.2005, 00:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: 8
Всего: 24



Вооюще-то я подразумевал, сделать типо как сво-во ENABLE, то что недоступно ставить в значение FALSE... но что-то я действительно не задумался про новые версии виндуса. smile
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.2933 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.