Project ODMENU
Project Structure
ODMENU.DPR
program ODMenu;
uses
Forms,
BitMenuF in 'BitMenuF.pas' {Form1};
{$R *.RES}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
BITMENUF.PAS
unit BitMenuF;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, Menus;
type
TForm1 = class(TForm)
ShapeDemo: TShape;
MainMenu1: TMainMenu;
File1: TMenuItem;
Exit1: TMenuItem;
Shape1: TMenuItem;
Ellipse1: TMenuItem;
RoundRec1: TMenuItem;
Rectang1: TMenuItem;
Color1: TMenuItem;
Red1: TMenuItem;
Green1: TMenuItem;
Blue1: TMenuItem;
Help1: TMenuItem;
About1: TMenuItem;
procedure FormResize(Sender: TObject);
procedure Exit1Click(Sender: TObject);
procedure About1Click(Sender: TObject);
procedure ColorClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Ellipse1Click(Sender: TObject);
procedure RoundRec1Click(Sender: TObject);
procedure Rectang1Click(Sender: TObject);
procedure ColorMeasureItem(Sender: TObject; ACanvas: TCanvas;
var Width, Height: Integer);
procedure ColorDrawItem(Sender: TObject; ACanvas: TCanvas;
ARect: TRect; Selected: Boolean);
procedure ShapeMeasureItem(Sender: TObject; ACanvas: TCanvas;
var Width, Height: Integer);
procedure Ellipse1DrawItem(Sender: TObject; ACanvas: TCanvas;
ARect: TRect; Selected: Boolean);
procedure RoundRec1DrawItem(Sender: TObject; ACanvas: TCanvas;
ARect: TRect; Selected: Boolean);
procedure Rectang1DrawItem(Sender: TObject; ACanvas: TCanvas;
ARect: TRect; Selected: Boolean);
private
{ Private declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.FormResize(Sender: TObject);
begin
ShapeDemo.SetBounds (ClientWidth div 6, ClientHeight div 6,
2 * ClientWidth div 3, 2 * ClientHeight div 3);
end;
procedure TForm1.Exit1Click(Sender: TObject);
begin
Close;
end;
procedure TForm1.About1Click(Sender: TObject);
begin
MessageDlg ('Owner-draw menu example,'#13 +
'from "Mastering Delphi" by Marco Cant�',
mtInformation, [mbOK], 0);
end;
procedure TForm1.ColorClick(Sender: TObject);
begin
ShapeDemo.Brush.Color :=
(Sender as TComponent).Tag
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Blue1.Tag := clBlue;
Red1.Tag := clRed;
Green1.Tag := clGreen;
end;
procedure TForm1.Ellipse1Click(Sender: TObject);
begin
ShapeDemo.Shape := stEllipse;
end;
procedure TForm1.RoundRec1Click(Sender: TObject);
begin
ShapeDemo.Shape := stRoundRect;
end;
procedure TForm1.Rectang1Click(Sender: TObject);
begin
ShapeDemo.Shape := stRectangle;
end;
procedure TForm1.ColorMeasureItem(Sender: TObject;
ACanvas: TCanvas;
var Width, Height: Integer);
begin
Width := 80;
Height := 30;
end;
procedure TForm1.ColorDrawItem(Sender: TObject;
ACanvas: TCanvas; ARect: TRect; Selected: Boolean);
begin
// set the background color and draw it
if Selected then
ACanvas.Brush.Color := clHighlight
else
ACanvas.Brush.Color := clMenu;
ACanvas.FillRect (ARect);
// show the color
ACanvas.Brush.Color := (Sender as TComponent).Tag;
InflateRect (ARect, -5, -5);
ACanvas.Rectangle (ARect.Left, ARect.Top,
ARect.Right, ARect.Bottom);
end;
procedure TForm1.ShapeMeasureItem(Sender: TObject; ACanvas: TCanvas;
var Width, Height: Integer);
begin
Width := 90;
Height := 40;
end;
procedure TForm1.Ellipse1DrawItem(Sender: TObject; ACanvas: TCanvas;
ARect: TRect; Selected: Boolean);
begin
// set the background color and draw it
if Selected then
ACanvas.Brush.Color := clHighlight
else
ACanvas.Brush.Color := clMenu;
ACanvas.FillRect (ARect);
// draw the ellipse
ACanvas.Brush.Color := clWhite;
InflateRect (ARect, -5, -5);
ACanvas.Ellipse (ARect.Left, ARect.Top,
ARect.Right, ARect.Bottom);
end;
procedure TForm1.RoundRec1DrawItem(Sender: TObject; ACanvas: TCanvas;
ARect: TRect; Selected: Boolean);
begin
// set the background color and draw it
if Selected then
ACanvas.Brush.Color := clHighlight
else
ACanvas.Brush.Color := clMenu;
ACanvas.FillRect (ARect);
// draw the round rectangle
ACanvas.Brush.Color := clWhite;
InflateRect (ARect, -5, -5);
ACanvas.RoundRect (ARect.Left, ARect.Top,
ARect.Right, ARect.Bottom, 5, 5);
end;
procedure TForm1.Rectang1DrawItem(Sender: TObject; ACanvas: TCanvas;
ARect: TRect; Selected: Boolean);
begin
// set the background color and draw it
if Selected then
ACanvas.Brush.Color := clHighlight
else
ACanvas.Brush.Color := clMenu;
ACanvas.FillRect (ARect);
// draw the rectangle
ACanvas.Brush.Color := clWhite;
InflateRect (ARect, -5, -5);
ACanvas.Rectangle (ARect.Left, ARect.Top,
ARect.Right, ARect.Bottom);
end;
end.
BITMENUF.DFM
object Form1: TForm1
Left = 244
Top = 111
Width = 425
Height = 298
Caption = 'ODMenu'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
Menu = MainMenu1
OldCreateOrder = True
OnCreate = FormCreate
OnResize = FormResize
PixelsPerInch = 96
TextHeight = 13
object ShapeDemo: TShape
Left = 120
Top = 72
Width = 145
Height = 81
Shape = stEllipse
end
object MainMenu1: TMainMenu
OwnerDraw = True
Left = 56
Top = 16
object File1: TMenuItem
Caption = '&File'
object Exit1: TMenuItem
Caption = 'E&xit'
OnClick = Exit1Click
end
end
object Shape1: TMenuItem
Caption = '&Shape'
object Ellipse1: TMenuItem
Caption = 'Ellipse'
OnClick = Ellipse1Click
OnDrawItem = Ellipse1DrawItem
OnMeasureItem = ShapeMeasureItem
end
object RoundRec1: TMenuItem
Caption = 'RoundRec'
OnClick = RoundRec1Click
OnDrawItem = RoundRec1DrawItem
OnMeasureItem = ShapeMeasureItem
end
object Rectang1: TMenuItem
Caption = 'Rectang'
OnClick = Rectang1Click
OnDrawItem = Rectang1DrawItem
OnMeasureItem = ShapeMeasureItem
end
end
object Color1: TMenuItem
Caption = '&Color'
object Red1: TMenuItem
Caption = 'Red'
OnClick = ColorClick
OnDrawItem = ColorDrawItem
OnMeasureItem = ColorMeasureItem
end
object Green1: TMenuItem
Caption = 'Green'
OnClick = ColorClick
OnDrawItem = ColorDrawItem
OnMeasureItem = ColorMeasureItem
end
object Blue1: TMenuItem
Caption = 'Blue'
OnClick = ColorClick
OnDrawItem = ColorDrawItem
OnMeasureItem = ColorMeasureItem
end
end
object Help1: TMenuItem
Caption = '&Help'
object About1: TMenuItem
Caption = '&About...'
OnClick = About1Click
end
end
end
end
|