Changeset 111 for trunk/Messg.pas


Ignore:
Timestamp:
Feb 2, 2018, 4:40:46 PM (6 years ago)
Author:
chronos
Message:
  • Modified: Custom defined form dialogs moved to CevoComponents so they can be correctly opened in IDE.
  • Modified: Moved Sound, StringTables and Directories to CevoComponents as dependency for custom form dialogs.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Messg.pas

    r104 r111  
    55
    66uses
    7   ScreenTools,
    8 
    9   LCLIntf, LCLType, LMessages, Messages, SysUtils, Classes, Graphics, Controls, Forms, ButtonBase,
    10   ButtonA,
    11   ButtonB, Area;
     7  ScreenTools, LCLIntf, LCLType, LMessages, Messages, SysUtils, Classes,
     8  Graphics, Controls, Forms, ButtonBase, ButtonA, ButtonB, Area, DrawDlg;
    129
    1310const
     
    1512
    1613type
    17   TDrawDlg = class(TForm)
    18   public
    19     constructor Create(AOwner: TComponent); override;
    20     procedure SmartInvalidate; virtual;
    21   protected
    22     TitleHeight: integer;
    23     // defines area to grip the window for moving (from top)
    24     procedure InitButtons();
    25     procedure OnEraseBkgnd(var m: TMessage); message WM_ERASEBKGND;
    26     procedure OnHitTest(var Msg: TMessage); message WM_NCHITTEST;
    27   end;
    28 
    29   TBaseMessgDlg = class(TDrawDlg)
    30     procedure FormCreate(Sender: TObject);
    31     procedure FormPaint(Sender: TObject);
    32   public
    33     MessgText: string;
    34   protected
    35     Lines, TopSpace: integer;
    36     procedure SplitText(preview: boolean);
    37     procedure CorrectHeight;
    38   end;
    39 
    4014  TMessgDlg = class(TBaseMessgDlg)
    4115    Button1: TButtonA;
     
    6034  mkYesNo = 3;
    6135
    62   Border = 3;
    63   MessageLineSpacing = 20;
    64 
    6536var
    6637  MessgDlg: TMessgDlg;
     
    6940procedure SoundMessage(SimpleText, SoundItem: string);
    7041
     42
    7143implementation
    7244
    7345{$R *.lfm}
    74 
    75 constructor TDrawDlg.Create(AOwner: TComponent);
    76 begin
    77   inherited;
    78   TitleHeight := 0;
    79 end;
    80 
    81 procedure TDrawDlg.OnEraseBkgnd(var m: TMessage);
    82 begin
    83 end;
    84 
    85 procedure TDrawDlg.OnHitTest(var Msg: TMessage);
    86 var
    87   i: integer;
    88   ControlBounds: TRect;
    89 begin
    90   if BorderStyle <> bsNone then
    91     inherited
    92   else
    93   begin
    94     if integer((Msg.LParam shr 16) and $ffff) >= Top + TitleHeight then
    95       Msg.result := HTCLIENT
    96     else
    97     begin
    98       for i := 0 to ControlCount - 1 do
    99         if Controls[i].Visible then
    100         begin
    101           ControlBounds := Controls[i].BoundsRect;
    102           if (integer(Msg.LParam and $ffff) >= Left + ControlBounds.Left) and
    103             (integer(Msg.LParam and $ffff) < Left + ControlBounds.Right) and
    104             (integer((Msg.LParam shr 16 ) and $ffff) >= Top + ControlBounds.Top) and
    105             (integer((Msg.LParam shr 16) and $ffff) < Top + ControlBounds.Bottom) then
    106           begin
    107             Msg.result := HTCLIENT;
    108             exit;
    109           end;
    110         end;
    111       Msg.result := HTCAPTION
    112     end;
    113   end
    114 end;
    115 
    116 procedure TDrawDlg.InitButtons();
    117 var
    118   cix: integer;
    119   // ButtonDownSound, ButtonUpSound: string;
    120 begin
    121   // ButtonDownSound:=Sounds.Lookup('BUTTON_DOWN');
    122   // ButtonUpSound:=Sounds.Lookup('BUTTON_UP');
    123   for cix := 0 to ComponentCount - 1 do
    124     if Components[cix] is TButtonBase then
    125     begin
    126       TButtonBase(Components[cix]).Graphic := GrExt[HGrSystem].Data;
    127       // if ButtonDownSound<>'*' then
    128       // DownSound:=HomeDir+'Sounds' + DirectorySeparator + ButtonDownSound + '.wav';
    129       // if ButtonUpSound<>'*' then
    130       // UpSound:=HomeDir+'Sounds' + DirectorySeparator + ButtonUpSound + '.wav';
    131       if Components[cix] is TButtonA then
    132         TButtonA(Components[cix]).Font := UniFont[ftButton];
    133       if Components[cix] is TButtonB then
    134         TButtonB(Components[cix]).Mask := GrExt[HGrSystem].Mask;
    135     end;
    136 end;
    137 
    138 procedure TDrawDlg.SmartInvalidate;
    139 var
    140   i: integer;
    141   r0, r1: HRgn;
    142 begin
    143   r0 := CreateRectRgn(0, 0, ClientWidth, ClientHeight);
    144   for i := 0 to ControlCount - 1 do
    145     if not(Controls[i] is TArea) and Controls[i].Visible then
    146     begin
    147       with Controls[i].BoundsRect do
    148         r1 := CreateRectRgn(Left, Top, Right, Bottom);
    149       CombineRgn(r0, r0, r1, RGN_DIFF);
    150       DeleteObject(r1);
    151     end;
    152   InvalidateRgn(Handle, r0, false);
    153   DeleteObject(r0);
    154 end;
    155 
    156 procedure TBaseMessgDlg.FormCreate(Sender: TObject);
    157 begin
    158   Left := (Screen.Width - Width) div 2;
    159   Canvas.Font.Assign(UniFont[ftNormal]);
    160   Canvas.Brush.Style := bsClear;
    161   MessgText := '';
    162   TopSpace := 0;
    163   TitleHeight := Screen.Height;
    164   InitButtons();
    165 end;
    166 
    167 procedure TBaseMessgDlg.FormPaint(Sender: TObject);
    168 var
    169   i, cix: integer;
    170 begin
    171   PaintBackground(self, 3 + Border, 3 + Border, ClientWidth - (6 + 2 * Border),
    172     ClientHeight - (6 + 2 * Border));
    173   for i := 0 to Border do
    174     Frame(Canvas, i, i, ClientWidth - 1 - i, ClientHeight - 1 - i,
    175       $000000, $000000);
    176   Frame(Canvas, Border + 1, Border + 1, ClientWidth - (2 + Border),
    177     ClientHeight - (2 + Border), MainTexture.clBevelLight,
    178     MainTexture.clBevelShade);
    179   Frame(Canvas, 2 + Border, 2 + Border, ClientWidth - (3 + Border),
    180     ClientHeight - (3 + Border), MainTexture.clBevelLight,
    181     MainTexture.clBevelShade);
    182   SplitText(false);
    183 
    184   for cix := 0 to ControlCount - 1 do
    185     if (Controls[cix].Visible) and (Controls[cix] is TButtonBase) then
    186       BtnFrame(Canvas, Controls[cix].BoundsRect, MainTexture);
    187 end;
    188 
    189 procedure TBaseMessgDlg.SplitText(preview: boolean);
    190 var
    191   Start, Stop, OrdinaryStop, LinesCount: integer;
    192   s: string;
    193 begin
    194   Start := 1;
    195   LinesCount := 0;
    196   while Start < Length(MessgText) do
    197   begin
    198     Stop := Start;
    199     while (Stop < Length(MessgText)) and (MessgText[Stop] <> '\') and
    200       (BiColorTextWidth(Canvas, Copy(MessgText, Start, Stop - Start + 1)) <
    201       ClientWidth - 56) do
    202       inc(Stop);
    203     if Stop <> Length(MessgText) then
    204     begin
    205       OrdinaryStop := Stop;
    206       repeat
    207         dec(OrdinaryStop)
    208       until (MessgText[OrdinaryStop + 1] = ' ') or
    209         (MessgText[OrdinaryStop + 1] = '\');
    210       if (OrdinaryStop + 1 - Start) * 2 >= Stop - Start then
    211         Stop := OrdinaryStop
    212     end;
    213     if not preview then
    214     begin
    215       s := Copy(MessgText, Start, Stop - Start + 1);
    216       LoweredTextOut(Canvas, -1, MainTexture,
    217         (ClientWidth - BiColorTextWidth(Canvas, s)) div 2,
    218         19 + Border + TopSpace + LinesCount * MessageLineSpacing, s);
    219     end;
    220     Start := Stop + 2;
    221     inc(LinesCount)
    222   end;
    223   if preview then
    224     Lines := LinesCount;
    225 end;
    226 
    227 procedure TBaseMessgDlg.CorrectHeight;
    228 var
    229   i: integer;
    230 begin
    231   ClientHeight := 72 + Border + TopSpace + Lines * MessageLineSpacing;
    232   Top := (Screen.Height - ClientHeight) div 2;
    233   for i := 0 to ControlCount - 1 do
    234     Controls[i].Top := ClientHeight - (34 + Border);
    235 end;
    23646
    23747procedure TMessgDlg.FormCreate(Sender: TObject);
Note: See TracChangeset for help on using the changeset viewer.