GUIControls.pas 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. unit GUIControls;
  2. interface
  3. uses
  4. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  5. Dialogs, JvJVCLUtils, JvComponent, JvDockControlForm, JvExControls,
  6. ExtCtrls, JvOutlookBar, ImgList;
  7. type
  8. TfrmGUIControls = class(TForm)
  9. jvGUIControls: TJvOutlookBar;
  10. JvDockClient1: TJvDockClient;
  11. imlControls: TImageList;
  12. procedure jvGUIControlsCustomDraw(Sender: TObject; ACanvas: TCanvas; ARect: TRect; AStage: TJvOutlookBarCustomDrawStage; AIndex: Integer; ADown, AInside: Boolean; var DefaultDraw: Boolean);
  13. procedure FormCreate(Sender: TObject);
  14. procedure jvGUIControlsPageChange(Sender: TObject; Index: Integer);
  15. private
  16. { Private declarations }
  17. procedure btnXControlClick(Sender: TObject);
  18. procedure CreateList();
  19. public
  20. { Public declarations }
  21. end;
  22. var
  23. frmGUIControls: TfrmGUIControls;
  24. implementation
  25. {$R *.dfm}
  26. procedure TfrmGUIControls.jvGUIControlsCustomDraw(Sender: TObject; ACanvas: TCanvas; ARect: TRect; AStage: TJvOutlookBarCustomDrawStage; AIndex: Integer; ADown, AInside: Boolean; var DefaultDraw: Boolean);
  27. var
  28. pImage: TBitmap;
  29. begin
  30. DefaultDraw := False;
  31. case AStage of
  32. odsBackground:
  33. // Draw the background
  34. GradientFillRect(ACanvas, ARect, clBtnFace, clBtnFace, fdTopToBottom, 255);
  35. odsPage:
  36. // Draw the page
  37. GradientFillRect(ACanvas,ARect, clBtnFace, clBtnFace, fdTopToBottom, 255);
  38. odsPageButton:
  39. begin
  40. // Draw the page button
  41. GradientFillRect(ACanvas,ARect, clBtnFace, clBtnFace, fdTopToBottom, 255);
  42. if ADown then
  43. OffsetRect(ARect,1,1);
  44. Frame3D(ACanvas, ARect, clBtnHighlight, clBtnShadow, 2);
  45. ACanvas.Font.Color := clBlack;
  46. ARect.Left := ARect.Left + 18;
  47. DrawText(ACanvas.Handle, PChar(' '+jvGUIControls.Pages[AIndex].Caption), Length(jvGUIControls.Pages[AIndex].Caption)+1, ARect, DT_SINGLELINE or DT_VCENTER or DT_LEFT);
  48. end;
  49. odsButton:
  50. begin
  51. // Draw small button image if required
  52. if jvGUIControls.ActivePage.Buttons[AIndex].ImageIndex <> -1 then
  53. begin
  54. pImage := TBitmap.Create;
  55. imlControls.GetBitmap(jvGUIControls.ActivePage.Buttons[AIndex].ImageIndex, pImage);
  56. pImage.Transparent := True;
  57. pImage.TransparentColor := pImage.Canvas.Pixels[0, 0];
  58. pImage.TransparentMode := tmAuto;
  59. ACanvas.Draw(ARect.Left + 1, ARect.Top + 3, pImage);
  60. pImage.Free;
  61. end;
  62. // Draw the button
  63. ACanvas.Font.Color := clBlack;
  64. ARect.Left := ARect.Left + 17;
  65. DrawText(ACanvas.Handle, PChar(' '+jvGUIControls.ActivePage.Buttons[AIndex].Caption), Length(jvGUIControls.ActivePage.Buttons[AIndex].Caption)+1, ARect, DT_SINGLELINE or DT_VCENTER or DT_LEFT or DT_MODIFYSTRING or DT_END_ELLIPSIS);
  66. end;
  67. odsButtonFrame:
  68. begin
  69. // Draw button frame according to its down value (this is called if the button is down or if the mouse is over)
  70. if ADown then
  71. Frame3D(ACanvas, ARect, clBtnShadow, clBtnHighlight, 2)
  72. else
  73. Frame3D(ACanvas, ARect, clBtnHighlight, clBtnShadow, 2);
  74. end;
  75. end;
  76. end;
  77. procedure TfrmGUIControls.jvGUIControlsPageChange(Sender: TObject; Index: Integer);
  78. begin
  79. jvGUIControls.Pages[Index].DownIndex := 0;
  80. end;
  81. procedure TfrmGUIControls.btnXControlClick(Sender: TObject);
  82. var
  83. btnSender: TJvOutlookBarButton;
  84. begin
  85. btnSender := TJvOutlookBarButton(Sender);
  86. btnSender.Down := True;
  87. end;
  88. procedure TfrmGUIControls.CreateList();
  89. // This method add a button to the controls list
  90. procedure AddOBButton(pOnClick: TNotifyEvent; iPageIndex: Integer; iImageIndex: Integer; sCaption: String; bDown: Boolean = False; bEnabled: Boolean = True);
  91. var
  92. jvOBBtn: TJvOutlookBarButton;
  93. begin
  94. jvOBBtn := jvGUIControls.Pages[iPageIndex].Buttons.Add();
  95. jvOBBtn.Caption := sCaption;
  96. jvOBBtn.ImageIndex := iImageIndex;
  97. jvOBBtn.Down := bDown;
  98. jvOBBtn.Enabled := bEnabled;
  99. jvOBBtn.OnClick := pOnClick;
  100. end;
  101. begin
  102. // Create standard controls...
  103. AddOBButton(btnXControlClick, 0, 0, 'Select', True);
  104. AddOBButton(btnXControlClick, 0, 1, 'Label');
  105. AddOBButton(btnXControlClick, 0, 2, 'Button');
  106. AddOBButton(btnXControlClick, 0, 3, 'Edit');
  107. AddOBButton(btnXControlClick, 0, 4, 'CheckBox');
  108. AddOBButton(btnXControlClick, 0, 5, 'RadioButton');
  109. // Create additional controls...
  110. AddOBButton(btnXControlClick, 1, 0, 'Select', True);
  111. AddOBButton(btnXControlClick, 1, 6, 'Image');
  112. end;
  113. procedure TfrmGUIControls.FormCreate(Sender: TObject);
  114. begin
  115. CreateList();
  116. end;
  117. end.