orderformu.pas
上传用户:hylc_2004
上传日期:2014-01-23
资源大小:46800k
文件大小:4k
源码类别:

Delphi控件源码

开发平台:

Delphi

  1. unit orderformu;
  2. interface
  3. uses
  4.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  5.   ExtCtrls, fcButton, fcImgBtn, fcImage, fcImageForm, StdCtrls, ComCtrls,
  6.   fcImager, RichEdit, ShellApi, fcDemoRichEdit, fcShapeBtn,
  7.   fcClearPanel, fcButtonGroup, fcOutlookBar;
  8. type
  9.   TOrderForm = class(TForm)
  10.     fcImageForm1: TfcImageForm;
  11.     AboutButton: TfcImageBtn;
  12.     OrderingButton: TfcImageBtn;
  13.     PricesButton: TfcImageBtn;
  14.     CloseBtn: TfcImageBtn;
  15.     fcImager1: TfcImager;
  16.     DragControl: TImage;
  17.     fcOutlookBar1: TfcOutlookBar;
  18.     Prices: TfcShapeBtn;
  19.     Ordering: TfcShapeBtn;
  20.     About: TfcShapeBtn;
  21.     RichEditOrdering: TfcDemoRichEdit;
  22.     RichEditAbout: TfcDemoRichEdit;
  23.     RichEditPrices: TfcDemoRichEdit;
  24.     procedure CloseBtnClick(Sender: TObject);
  25.     procedure PricesButtonClick(Sender: TObject);
  26.     procedure OrderingButtonClick(Sender: TObject);
  27.     procedure AboutButtonClick(Sender: TObject);
  28.     procedure RichEdit1MouseMove(Sender: TObject; Shift: TShiftState; X,
  29.       Y: Integer);
  30.     procedure RichEdit1MouseDown(Sender: TObject; Button: TMouseButton;
  31.       Shift: TShiftState; X, Y: Integer);
  32.   private
  33.     { Private declarations }
  34.   public
  35.     { Public declarations }
  36.     function GetWordFromPoint(CurRichEdit:TCustomRichEdit; X, Y: Integer): String;
  37.   end;
  38. var
  39.   OrderForm: TOrderForm;
  40. implementation
  41. {$R *.DFM}
  42. procedure TOrderForm.CloseBtnClick(Sender: TObject);
  43. begin
  44.   Close;
  45. end;
  46. procedure TOrderForm.PricesButtonClick(Sender: TObject);
  47. begin
  48.    fcOutlookBar1.ActivePage := Prices;
  49. end;
  50. procedure TOrderForm.OrderingButtonClick(Sender: TObject);
  51. begin
  52.    fcOutlookBar1.ActivePage := Ordering;
  53. end;
  54. procedure TOrderForm.AboutButtonClick(Sender: TObject);
  55. begin
  56.    fcOutlookBar1.ActivePage := About;
  57. end;
  58. {Get RichEdit Word From Point}
  59. function TOrderForm.GetWordFromPoint(CurRichEdit:TCustomRichEdit; X, Y: Integer): String;
  60. type TCharSet = Set of Char;
  61. var CurSel: Integer;
  62.     Line: Integer;
  63.     LineIndex: Integer;
  64.     CurLineStr: string;
  65.     Offset: Integer;
  66.     p: TPoint;
  67.     startWord: integer;
  68.     //Get position of start of the current word.
  69.     function GetStartOfWord(Subset: TCharSet; s: string; Index: integer): integer;
  70.     begin
  71.       if Index = 0 then Index := Length(s);
  72.       for result := Index - 1 downto 1 do
  73.          if s[result] in Subset then break;
  74.     end;
  75. begin
  76.   p := Point(x, y);
  77.   CurSel := SendMessage(CurRichEdit.Handle, EM_CHARFROMPOS, 0, LParam(@p));
  78.   Line := SendMessage(CurRichEdit.Handle, EM_EXLINEFROMCHAR, 0, CurSel);
  79.   CurLineStr := CurRichEdit.Lines[Line];
  80.   LineIndex := SendMessage(CurRichEdit.Handle, EM_LINEINDEX, Line, 0);
  81.   Offset := CurSel - LineIndex;
  82.   if (Offset > 0) and (CurLineStr[Offset] = ' ') then inc(Offset);
  83.   startWord:= GetStartOfWord([' ',#9], CurLineStr, Offset + 1) + 1;
  84.   //Loop from current offset til next whitespace.
  85.   while not (curLineStr[offset] in [' ', #9, #13, #10]) do begin
  86.     inc(offset);
  87.     if (offset>=length(curLineStr)) then break;
  88.   end;
  89.   result := Copy(CurLineStr, startWord, offset-startWord)
  90. end;
  91. {Change cursor when over a recognized url link}
  92. procedure TOrderForm.RichEdit1MouseMove(Sender: TObject; Shift: TShiftState;
  93.   X, Y: Integer);
  94. begin
  95.  if (GetWordFromPoint((Sender as TCustomRichEdit),X,Y) = 'http://www.woll2woll.com') or
  96.     (GetWordFromPoint((Sender as TCustomRichEdit),X,Y) = 'sales@woll2woll.com') then
  97.     (Sender as TCustomRichEdit).Cursor := crHandPoint
  98.  else
  99.     (Sender as TCustomRichEdit).Cursor := crDefault;
  100. end;
  101. procedure TOrderForm.RichEdit1MouseDown(Sender: TObject;
  102.   Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  103. begin
  104.   {Check for url links and execute them}
  105.   if GetWordFromPoint((Sender as TCustomRichEdit),X,Y) = 'http://www.woll2woll.com' then
  106.      ShellExecute(Handle, 'OPEN',
  107.      PChar('https://www.he.net/cgi-bin/suid/~wol2wol/ordering/order.cgi'), nil, nil, sw_shownormal)
  108.   else if GetWordFromPoint((Sender as TCustomRichEdit),X,Y) = 'sales@woll2woll.com' then
  109.      ShellExecute(Handle, 'OPEN',
  110.      PChar('mailto:sales@woll2woll.com'), nil, nil, sw_shownormal)
  111. end;
  112. end.