From: Andreas H. <ah...@us...> - 2003-10-25 09:49:06
|
Update of /cvsroot/jvcl/dev/JVCL3/run In directory sc8-pr-cvs1:/tmp/cvs-serv5991/run Modified Files: JvArrayButton.pas Log Message: Fixed flicker in MouseMove Index: JvArrayButton.pas =================================================================== RCS file: /cvsroot/jvcl/dev/JVCL3/run/JvArrayButton.pas,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** JvArrayButton.pas 9 Oct 2003 22:44:21 -0000 1.5 --- JvArrayButton.pas 25 Oct 2003 09:38:47 -0000 1.6 *************** *** 17,21 **** Contributor(s): Robert Love [rl...@sl...]. ! Last Modified: 2000-06-15 You may retrieve the latest version of this file at the Project JEDI's JVCL home page, --- 17,21 ---- Contributor(s): Robert Love [rl...@sl...]. ! Last Modified: 2003-10-25 You may retrieve the latest version of this file at the Project JEDI's JVCL home page, *************** *** 31,36 **** uses ! Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ! ExtCtrls, Buttons; type --- 31,42 ---- uses ! {$IFDEF COMPLIB_VCL} ! Windows, Messages, Graphics, Controls, Forms, ExtCtrls, Buttons, ! {$ENDIF} ! {$IFDEF COMPLIB_CLX} ! Types, QGraphics, QControls, QForms, QExtCtrls, QButtons, ! {$ENDIF} ! SysUtils, Classes, ! JvClxUtils; type *************** *** 49,52 **** --- 55,59 ---- FHints: TStringList; {$IFDEF JVCLThemesEnabled} + FMouseOverBtn: TPoint; FThemed: Boolean; procedure SetThemed(Value: Boolean); *************** *** 54,58 **** procedure SetCols(const Value: Integer); procedure SetRows(const Value: Integer); - procedure SetOnArrayButtonClicked(const Value: TArrayButtonClicked); procedure SetCaptions(const Value: TStringList); procedure SetColors(const Value: TStringList); --- 61,64 ---- *************** *** 80,83 **** --- 86,90 ---- procedure DoShowHint(var HintStr: string; var CanShow: Boolean; var HintInfo: THintInfo); + {this procedure can be used in response to a application.onshowhint event button hints are stored in the hints property from arry top-left to array bottom right *************** *** 116,120 **** property Themed: Boolean read FThemed write SetThemed default False; {$ENDIF} ! property OnArrayButtonClicked: TArrayButtonClicked read FOnArrayButtonClicked write SetOnArrayButtonClicked; {provides you with the Column and Row of the clicked button the topleft button has Column=0 and Row=0} --- 123,127 ---- property Themed: Boolean read FThemed write SetThemed default False; {$ENDIF} ! property OnArrayButtonClicked: TArrayButtonClicked read FOnArrayButtonClicked write FOnArrayButtonClicked; {provides you with the Column and Row of the clicked button the topleft button has Column=0 and Row=0} *************** *** 131,141 **** begin inherited; ! width := 35; ! height := 35; FColor := clSilver; FPushDown := false; FCols := 1; FRows := 1; ! showhint := true; FCaptions := TStringList.create; FHints := TStringList.create; --- 138,148 ---- begin inherited; ! Width := 35; ! Height := 35; FColor := clSilver; FPushDown := false; FCols := 1; FRows := 1; ! ShowHint := true; FCaptions := TStringList.create; FHints := TStringList.create; *************** *** 143,146 **** --- 150,154 ---- {$IFDEF JVCLThemesEnabled} FThemed := False; + FMouseOverBtn := Point(-1, -1); {$ENDIF} end; *************** *** 150,155 **** dh, dw: Integer; begin ! dh := (height - 2) div FRows; ! dw := (width - 2) div FCols; ACol := x div dw; ARow := y div dh; --- 158,163 ---- dh, dw: Integer; begin ! dh := (Height - 2) div FRows; ! dw := (Width - 2) div FCols; ACol := x div dw; ARow := y div dh; *************** *** 161,174 **** Col, Row: Integer; begin ! if button = mbleft then begin ! FPushDown := true; ! { dh:=(height-2) div FRows; ! dw:=(width-2) div FCols; ! Col:=x div dw; ! Row:=y div dh;} MouseToCell(x, y, Col, Row); ! FptDown := point(Col, Row); ! invalidate; end; end; --- 169,178 ---- Col, Row: Integer; begin ! if Button = mbLeft then begin ! FPushDown := True; MouseToCell(x, y, Col, Row); ! FptDown := Point(Col, Row); ! Invalidate; end; end; *************** *** 177,186 **** X, Y: Integer); begin ! if button = mbleft then begin ! FPushDown := false; ! invalidate; ! if assigned(FonArraybuttonClicked) then ! onarraybuttonclicked(FptDown.x, FptDown.y); end end; --- 181,190 ---- X, Y: Integer); begin ! if Button = mbLeft then begin ! FPushDown := False; ! Invalidate; ! if Assigned(FOnArraybuttonClicked) then ! OnArrayButtonClicked(FptDown.x, FptDown.y); end end; *************** *** 188,194 **** {$IFDEF JVCLThemesEnabled} procedure TJvArrayButton.MouseMove(Shift: TShiftState; X, Y: Integer); begin inherited; ! Paint; end; --- 192,205 ---- {$IFDEF JVCLThemesEnabled} procedure TJvArrayButton.MouseMove(Shift: TShiftState; X, Y: Integer); + var Pt: TPoint; begin inherited; ! MouseToCell(X, Y, Pt.X, Pt.Y); ! if (not FPushDown) and ! ((Pt.X <> FMouseOverBtn.X) or (Pt.Y <> FMouseOverBtn.Y)) then ! begin ! FMouseOverBtn := Pt; ! Invalidate; ! end; end; *************** *** 213,218 **** x0, y0: Integer; cap: string; ! backColor: TColor; ! index: Integer; procedure DrawBackground(AColor: TColor); --- 224,229 ---- x0, y0: Integer; cap: string; ! BackColor: TColor; ! Index: Integer; procedure DrawBackground(AColor: TColor); *************** *** 222,226 **** end; ! procedure drawup; begin {$IFDEF JVCLThemesEnabled} --- 233,237 ---- end; ! procedure DrawUp; begin {$IFDEF JVCLThemesEnabled} *************** *** 232,247 **** end else - begin {$ENDIF} ! DrawBackground(BackColor); ! Frame3D(Self.Canvas, R, clBtnHighlight, clBlack, 1); ! {$IFDEF JVCLThemesEnabled} end; - {$ENDIF} if cap <> '' then ! DrawText(Canvas.Handle, PChar(cap), -1, R, DT_CENTER or DT_VCENTER or DT_SINGLELINE); end; ! procedure drawdown; begin {$IFDEF JVCLThemesEnabled} --- 243,256 ---- end else {$ENDIF} ! begin ! DrawBackground(BackColor); ! Frame3D(Self.Canvas, R, clBtnHighlight, clBlack, 1); end; if cap <> '' then ! ClxDrawText(Canvas, cap, R, DT_CENTER or DT_VCENTER or DT_SINGLELINE); end; ! procedure DrawDown; begin {$IFDEF JVCLThemesEnabled} *************** *** 253,270 **** end else - begin {$ENDIF} ! DrawBackground(BackColor); ! Frame3D(Self.Canvas, R, clblack, clBtnHighlight, 1); ! {$IFDEF JVCLThemesEnabled} end; - {$ENDIF} if cap <> '' then ! DrawText(Canvas.Handle, PChar(cap), -1, R, DT_CENTER or DT_VCENTER or DT_SINGLELINE); end; begin ! dh := (height - 2) div FRows; ! dw := (width - 2) div FCols; for Row := 0 to FRows - 1 do begin --- 262,277 ---- end else {$ENDIF} ! begin ! DrawBackground(BackColor); ! Frame3D(Self.Canvas, R, clblack, clBtnHighlight, 1); end; if cap <> '' then ! ClxDrawText(Canvas, cap, R, DT_CENTER or DT_VCENTER or DT_SINGLELINE); end; begin ! dh := (Height - 2) div FRows; ! dw := (Width - 2) div FCols; for Row := 0 to FRows - 1 do begin *************** *** 273,301 **** begin x0 := 1 + Col * dw; ! R := rect(x0, y0, x0 + dw, y0 + dh); ! index := Row * FCols + Col; ! if index < FCaptions.count then ! cap := FCaptions[index] else cap := ''; ! if index < FColors.count then try ! backColor := stringtoColor(FColors[index]); except ! backColor := clsilver; end else ! backColor := clsilver; if (csDesigning in ComponentState) then ! drawup else if (FptDown.x = Col) and (FptDown.y = Row) then begin if FPushDown then ! drawdown else ! drawup; end else ! drawup; end; end; --- 280,308 ---- begin x0 := 1 + Col * dw; ! R := Rect(x0, y0, x0 + dw, y0 + dh); ! Index := Row * FCols + Col; ! if Index < FCaptions.Count then ! cap := FCaptions[Index] else cap := ''; ! if Index < FColors.Count then try ! BackColor := StringToColor(FColors[Index]); except ! BackColor := clSilver; end else ! BackColor := clSilver; if (csDesigning in ComponentState) then ! DrawUp else if (FptDown.x = Col) and (FptDown.y = Row) then begin if FPushDown then ! DrawDown else ! DrawUp; end else ! DrawUp; end; end; *************** *** 304,310 **** destructor TJvArrayButton.Destroy; begin ! FCaptions.free; FHints.Free; ! FColors.free; inherited; end; --- 311,317 ---- destructor TJvArrayButton.Destroy; begin ! FCaptions.Free; FHints.Free; ! FColors.Free; inherited; end; *************** *** 314,321 **** if FCols <> Value then begin ! if (value >= 1) and (value <= 10) then begin ! FCols := value; ! invalidate; end end; --- 321,328 ---- if FCols <> Value then begin ! if (Value >= 1) and (Value <= 10) then begin ! FCols := Value; ! Invalidate; end end; *************** *** 326,333 **** if FRows <> Value then begin ! if (value >= 1) and (value <= 10) then begin ! FRows := value; ! invalidate; end end; --- 333,340 ---- if FRows <> Value then begin ! if (Value >= 1) and (Value <= 10) then begin ! FRows := Value; ! Invalidate; end end; *************** *** 349,362 **** {$ENDIF} - procedure TJvArrayButton.SetonArrayButtonClicked( - const Value: TArrayButtonClicked); - begin - FonArrayButtonClicked := Value; - end; - procedure TJvArrayButton.SetCaptions(const Value: TStringList); begin ! FCaptions.assign(Value); ! invalidate; end; --- 356,363 ---- {$ENDIF} procedure TJvArrayButton.SetCaptions(const Value: TStringList); begin ! FCaptions.Assign(Value); ! Invalidate; end; *************** *** 364,374 **** begin Canvas.Font.Assign(font); ! invalidate; end; procedure TJvArrayButton.SetColors(const Value: TStringList); begin ! FColors.assign(Value); ! invalidate; end; --- 365,375 ---- begin Canvas.Font.Assign(font); ! Invalidate; end; procedure TJvArrayButton.SetColors(const Value: TStringList); begin ! FColors.Assign(Value); ! Invalidate; end; *************** *** 377,382 **** dh, dw, x0, y0: Integer; begin ! dh := (height - 2) div FRows; ! dw := (width - 2) div FCols; y0 := 1 + ARow * dh; x0 := 1 + ACol * dw; --- 378,383 ---- dh, dw, x0, y0: Integer; begin ! dh := (Height - 2) div FRows; ! dw := (Width - 2) div FCols; y0 := 1 + ARow * dh; x0 := 1 + ACol * dw; *************** *** 384,409 **** // pt2:=clienttoscreen(point(x0+dw,y0+dh)); // result:=rect(pt1.x,pt1.y,pt2.x,pt2.y); ! result := rect(x0, y0, x0 + dw, y0 + dh); end; ! procedure TJvArrayButton.DoShowHint(var HintStr: string; ! var CanShow: Boolean; var HintInfo: THintInfo); var ACol, ARow, x, y: Integer; ! index: Integer; begin ! if HintInfo.HintControl = self then begin x := HintInfo.CursorPos.x; ! y := HintInfo.cursorPos.y; MouseToCell(x, y, ACol, ARow); ! if ((ACol < 0) or (ARow < 0)) then exit; ! index := ARow * FCols + ACol; ! if index < FHints.count then ! Hintstr := FHints[index] else ! Hintstr := Hint; Hintinfo.CursorRect := CellRect(ACol, ARow); ! canshow := true; end; end; --- 385,411 ---- // pt2:=clienttoscreen(point(x0+dw,y0+dh)); // result:=rect(pt1.x,pt1.y,pt2.x,pt2.y); ! Result := Rect(x0, y0, x0 + dw, y0 + dh); end; ! procedure TJvArrayButton.DoShowHint(var HintStr: string; var CanShow: Boolean; ! var HintInfo: THintInfo); var ACol, ARow, x, y: Integer; ! Index: Integer; begin ! if HintInfo.HintControl = Self then begin x := HintInfo.CursorPos.x; ! y := HintInfo.CursorPos.y; MouseToCell(x, y, ACol, ARow); ! if ((ACol < 0) or (ARow < 0)) then ! Exit; ! Index := ARow * FCols + ACol; ! if Index < FHints.count then ! HintStr := FHints[Index] else ! HintStr := Hint; Hintinfo.CursorRect := CellRect(ACol, ARow); ! CanShow := True; end; end; *************** *** 411,415 **** procedure TJvArrayButton.SetHints(const Value: TStringList); begin ! FHints.assign(Value); end; --- 413,417 ---- procedure TJvArrayButton.SetHints(const Value: TStringList); begin ! FHints.Assign(Value); end; |