Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π‘ΠΎΠ²Π΅Ρ‚Ρ‹ ΠΏΠΎ Delphi. ВСрсия 1.4.3 ΠΎΡ‚ 1.1.2001Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 65

Автор Π’Π°Π»Π΅Π½Ρ‚ΠΈΠ½ ΠžΠ·Π΅Ρ€ΠΎΠ²

  end;

 finally

  Session.CloseDatabase(SrcDatabase);

 end;

end;

Button 

ЦвСтная ΠΊΠ½ΠΎΠΏΠΊΠ°

VS ΠΏΠΈΡˆΠ΅Ρ‚:

Π’ ΠΊΠ½ΠΈΠ³Π°Ρ… ΠšΠ°Π»Π²Π΅Ρ€Ρ‚Π°, Π‘Π²Π°Π½Π° ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π°Π²Ρ‚ΠΎΡ€ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ ΠΏΠΎΡ…ΠΎΠΆΠΈΠΉ тСкст. Бмысл тСкста β€” "Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ†Π²Π΅Ρ‚ ΠΊΠ½ΠΎΠΏΠΎΠΊ Button, BitBt нСльзя, Ρ‚.ΠΊ. ΠΈΡ… рисуСт WINDOWS". Если нСльзя, Π½ΠΎ ΠžΠ§Π•ΠΠ¬ ΠΠ£Π–ΠΠž, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ.

НСбольшой ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ColorBtn, Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΊΠ½ΠΎΠΏΠΊΠ°Ρ… Ρ†Π²Π΅Ρ‚. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, прСдставлСно Π½ΠΎΠ²ΠΎΠ΅ свойство β€” Frame3D, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ рСалистичный Π²ΠΈΠ΄ Π½Π°ΠΆΠ°Ρ‚ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΈ. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ API, ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ значСния свойства Frame3D, Π½Π΅ трСбуСтся ΠΏΠ΅Ρ€Π΅ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°.

unit ColorBtn;


interface

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


type TColorBtn = class(TButton)

private

 { Private declarations }

 IsFocused: boolean;

 FCanvas: TCanvas;

 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

 { Protected declarations }

 procedure CreateParams(var Params: TCreateParams); override;

 procedure SetButtonStyle(ADefault: boolean); override;

public

 { Public declarations }

 constructor Create(AOwner: TComponent); override;

 destructor Destroy; override;

published

 { Published declarations }

 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);

 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;

 if IsDown then OffsetRect(RC, 1, 1);

 FCanvas.Font:= Self.Font;

 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 – ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ интСрСсного. 

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Ρ‰Π΅Π»Ρ‡ΠΊΠ° Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΊΠ½ΠΎΠΏΠΎΠΊ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΈΡ… Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ

Delphi 1 

…с Π²Π°ΡˆΠΈΡ… слов я понял, Ρ‡Ρ‚ΠΎ Π²Ρ‹ всС ΡƒΠΆΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ, Π½ΠΎ Π΄Π°Π²Π°ΠΉΡ‚Π΅ всС ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΠΌ: Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ событиС OnClick привязано ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠ΅ ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π° (числовыС ΠΊΠ½ΠΎΠΏΠΊΠΈ 0..9) ΠΈ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π½Π° ΠΎΠ±Ρ‰ΠΈΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ события.

Π’ раздСляСмом ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ΅ события ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Edit1.Text := TButton(Sender).Caption;

…я Π΄ΡƒΠΌΠ°ΡŽ Π² этом случаС самым Ρ€Π°Π·ΡƒΠΌΠ½Ρ‹ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ использованиС свойства Tag ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΈ:

1. Π½Π°Π·Π½Π°Ρ‡ΡŒΡ‚Π΅ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Tag для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, эквивалСнт арабским Ρ†ΠΈΡ„Ρ€Π°ΠΌ)

2. procedureTForm1.Button1Click(Sender: TObject);

begin

 if (Sender is TButton) then with (Sender as TButton) do

  {ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Tag}

end;

Если Π²Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ изящный способ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΊ Π½Π΅ΠΌΡƒ доступ. ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ ΠΎΠ±Ρ‰ΠΈΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ события для всСх ΠΊΠ½ΠΎΠΏΠΎΠΊ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅: