From: <ob...@us...> - 2006-06-09 11:33:57
|
Revision: 10685 Author: obones Date: 2006-06-09 04:33:48 -0700 (Fri, 09 Jun 2006) ViewCVS: http://svn.sourceforge.net/jvcl/?rev=10685&view=rev Log Message: ----------- Mantis 3740: Added TWideMemoField support. Modified Paths: -------------- trunk/jvcl/run/JvDBGrid.pas Modified: trunk/jvcl/run/JvDBGrid.pas =================================================================== --- trunk/jvcl/run/JvDBGrid.pas 2006-06-09 10:16:56 UTC (rev 10684) +++ trunk/jvcl/run/JvDBGrid.pas 2006-06-09 11:33:48 UTC (rev 10685) @@ -2881,7 +2881,12 @@ end else begin - if (Field is TStringField) or ((Field is TMemoField) and FShowMemos) then + if (Field is TStringField) or + (FShowMemos and (Field is TMemoField) + {$IFDEF COMPILER10_UP} + or (Field is TWideMemoField) + {$ENDIF COMPILER10_UP} + ) then begin if Assigned(Field.OnGetText) then MemoText := Field.DisplayText This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ob...@us...> - 2006-06-19 11:36:10
|
Revision: 10712 Author: obones Date: 2006-06-19 04:36:03 -0700 (Mon, 19 Jun 2006) ViewCVS: http://svn.sourceforge.net/jvcl/?rev=10712&view=rev Log Message: ----------- >From Fred: added parenthesis for proper condition. Modified Paths: -------------- trunk/jvcl/run/JvDBGrid.pas Modified: trunk/jvcl/run/JvDBGrid.pas =================================================================== --- trunk/jvcl/run/JvDBGrid.pas 2006-06-19 10:29:11 UTC (rev 10711) +++ trunk/jvcl/run/JvDBGrid.pas 2006-06-19 11:36:03 UTC (rev 10712) @@ -2886,10 +2886,11 @@ else begin if (Field is TStringField) or - (FShowMemos and (Field is TMemoField) + (FShowMemos and ((Field is TMemoField) {$IFDEF COMPILER10_UP} or (Field is TWideMemoField) {$ENDIF COMPILER10_UP} + ) ) then begin if Assigned(Field.OnGetText) then This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ob...@us...> - 2006-06-22 17:30:15
|
Revision: 10719 Author: obones Date: 2006-06-22 10:29:57 -0700 (Thu, 22 Jun 2006) ViewCVS: http://svn.sourceforge.net/jvcl/?rev=10719&view=rev Log Message: ----------- >From Fred: Deleted editor shifting until real cause is found Cleaned up AlwaysShowEditor emulation Fixed Mantis #3671 so that TitleArrow is separated from TitlePopup Modified Paths: -------------- trunk/jvcl/run/JvDBGrid.pas Modified: trunk/jvcl/run/JvDBGrid.pas =================================================================== --- trunk/jvcl/run/JvDBGrid.pas 2006-06-22 17:28:06 UTC (rev 10718) +++ trunk/jvcl/run/JvDBGrid.pas 2006-06-22 17:29:57 UTC (rev 10719) @@ -533,8 +533,6 @@ TGridPicture = (gpBlob, gpMemo, gpPicture, gpOle, gpObject, gpData, gpNotEmpty, gpMarkDown, gpMarkUp, gpChecked, gpUnChecked, gpPopup); - TOpenCustomEdit = class(TCustomEdit); - const GridBmpNames: array [TGridPicture] of PChar = ('JvDBGridBLOB', 'JvDBGridMEMO', 'JvDBGridPICT', 'JvDBGridOLE', 'JvDBGridOBJECT', @@ -879,7 +877,7 @@ begin inherited Create(AOwner); inherited DefaultDrawing := False; - FAlwaysShowEditor := dgAlwaysShowEditor in inherited Options; + FAlwaysShowEditor := False; inherited Options := inherited Options - [dgAlwaysShowEditor]; // (obones): issue 3026: need to create FChangeLinks at the beginning @@ -1619,7 +1617,7 @@ // Is there an editor for the selected field ? F := SelectedField; Control := FControls.ControlByField(F.FieldName); - if Assigned(Control) and not (dgAlwaysShowEditor in inherited Options) then + if Assigned(Control) then //and not (dgAlwaysShowEditor in inherited Options) then Editor := ude_CUSTOM_EDITOR else if EditWithBoolBox(F) then @@ -1694,8 +1692,8 @@ end; begin - if (dgAlwaysShowEditor in inherited Options) and not EditorMode then - EditorMode := True; + //if (dgAlwaysShowEditor in inherited Options) and not EditorMode then + // ShowEditor; Result := False; if (inherited CanEditShow) and Assigned(SelectedField) and (SelectedIndex >= 0) and (SelectedIndex < Columns.Count) then @@ -2008,11 +2006,11 @@ begin Cell := MouseCoord(X, Y); - if (Button = mbRight) and FTitleArrow and + if (Button = mbRight) and (dgTitles in Options) and (dgIndicator in Options) and (Cell.X = 0) and (Cell.Y = 0) then begin - if Assigned(FOnTitleArrowMenuEvent) then + if (FTitleArrow and Assigned(FOnTitleArrowMenuEvent)) then FOnTitleArrowMenuEvent(Self); // Display TitlePopup if it exists @@ -2271,17 +2269,17 @@ case Char(Msg.CharCode) of #32: begin - EditorMode := True; + ShowEditor; ChangeBoolean(JvGridBool_INVERT); end; Backspace, '0', '-': begin - EditorMode := True; + ShowEditor; ChangeBoolean(JvGridBool_UNCHECK); end; '1', '+': begin - EditorMode := True; + ShowEditor; ChangeBoolean(JvGridBool_CHECK); end; end; @@ -3188,9 +3186,9 @@ procedure TJvDBGrid.ColEnter; begin FWord := ''; + inherited ColEnter; if FAlwaysShowEditor and not EditorMode then - EditorMode := True; - inherited ColEnter; + ShowEditor; end; function TJvDBGrid.DoMouseWheel(Shift: TShiftState; WheelDelta: Integer; @@ -3763,7 +3761,6 @@ if Control.Parent <> Self.Parent then Control.Parent := Self.Parent; - GridControl := nil; R := CellRect(ACol, ARow); if ((R.Right - R.Left) < 1) or ((R.Bottom - R.Top) < 1) then // Cell too small to be drawn -> the control is not drawn @@ -3774,16 +3771,21 @@ R.TopLeft := TControl(Control.Parent).ScreenToClient(R.TopLeft); R.BottomRight := ClientToScreen(R.BottomRight); R.BottomRight := TControl(Control.Parent).ScreenToClient(R.BottomRight); - if Control is TCustomEdit then - begin - { The edit control's text is not painted at good position when the control - has no border } - if TOpenCustomEdit(Control).BorderStyle = bsNone then - begin - Inc(R.Left, 2); - Inc(R.Top, 2); - end; - end; + + // I removed this code because moving a control away from the topleft corner + // of the cell lets appear the cell and its focus rectangle behind. Fred. + + //if Control is TCustomEdit then + //begin + // { The edit control's text is not painted at good position when the control + // has no border } + // if TOpenCustomEdit(Control).BorderStyle = bsNone then + // begin + // Inc(R.Left, 2); + // Inc(R.Top, 2); + // end; + //end; + ClientTopLeft := TControl(Control.Parent).ScreenToClient(Self.ClientOrigin); GridControl := FControls.ControlByName(Control.Name); if GridControl.FitCell in [fcDesignSize, fcBiggest] then @@ -3829,10 +3831,10 @@ end; Control.BringToFront; Control.Show; - if Assigned(GridControl) and not (GridControl.FitCell in [fcDesignSize, fcBiggest]) then - { If the Control is shown for the first time, the bounds are not correct. - Esp. "Height" is too large } - Control.BoundsRect := R; + //if Assigned(GridControl) and not (GridControl.FitCell in [fcDesignSize, fcBiggest]) then + // { If the Control is shown for the first time, the bounds are not correct. + // Esp. "Height" is too large } + // Control.BoundsRect := R; if Self.Visible and Control.Visible and Self.Parent.Visible and GetParentForm(Self).Visible then begin @@ -3892,7 +3894,7 @@ if CharCode = VK_TAB then begin CloseControl; - PostMessage(Handle, WM_KEYDOWN, CharCode, KeyData); + PostMessage(Handle, WM_KEYDOWN, VK_TAB, KeyData); end else begin This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ob...@us...> - 2006-07-03 16:55:31
|
Revision: 10780 Author: obones Date: 2006-07-03 09:55:25 -0700 (Mon, 03 Jul 2006) ViewCVS: http://svn.sourceforge.net/jvcl/?rev=10780&view=rev Log Message: ----------- Mantis 3795, 3794: Default value for check box no longer required, Column editor shown even when dataset is closed Modified Paths: -------------- trunk/jvcl/run/JvDBGrid.pas Modified: trunk/jvcl/run/JvDBGrid.pas =================================================================== --- trunk/jvcl/run/JvDBGrid.pas 2006-07-03 16:54:50 UTC (rev 10779) +++ trunk/jvcl/run/JvDBGrid.pas 2006-07-03 16:55:25 UTC (rev 10780) @@ -2198,7 +2198,7 @@ if FTitleArrow and (Button = mbLeft) and (dgTitles in Options) and (dgIndicator in Options) and - (Cell.X = 0) and (Cell.Y = 0) and DataLink.Active then + (Cell.X = 0) and (Cell.Y = 0) and (Columns.Count > 0) then ShowSelectColumnClick; // Selection of columns if (Button = mbLeft) and (FGridState = gsColSizing) then @@ -3923,7 +3923,7 @@ begin inherited Create; Caption := RsJvDBGridSelectTitle; - RealNamesOption := RsJvDBGridSelectOption; + RealNamesOption := '';//RsJvDBGridSelectOption; OK := RsJvDBGridSelectOK; NoSelectionWarning := RsJvDBGridSelectWarning; end; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ob...@us...> - 2006-08-22 13:26:22
|
Revision: 10907 Author: obones Date: 2006-08-22 06:26:12 -0700 (Tue, 22 Aug 2006) ViewCVS: http://svn.sourceforge.net/jvcl/?rev=10907&view=rev Log Message: ----------- Mantis 3845: AField might be nil. Modified Paths: -------------- trunk/jvcl/run/JvDBGrid.pas Modified: trunk/jvcl/run/JvDBGrid.pas =================================================================== --- trunk/jvcl/run/JvDBGrid.pas 2006-08-22 13:19:20 UTC (rev 10906) +++ trunk/jvcl/run/JvDBGrid.pas 2006-08-22 13:26:12 UTC (rev 10907) @@ -1799,7 +1799,7 @@ IndexDefs := TIndexDefs(GetOrdProp(DataSource.DataSet, cIndexDefs)) else IndexDefs := nil; - if Assigned(IndexDefs) then + if Assigned(IndexDefs) and Assigned(AField) then begin Descending := SortMarker = smUp; if GetIndexOf(AField.FieldName, LIndexName, Descending) then @@ -1817,9 +1817,9 @@ // FBC: 2004-02-18 // Following code handles the sortmarker if no Index is found. // the actual data-sorting must be implemented by the user in - // event OnTitleBtnClick. + // event OnTitleBtnClick. Of course, we need a field (Mantis 3845) //-------------------------------------------------------------------------- - if AutoSort and not IndexFound then + if AutoSort and not IndexFound and Assigned(AField) then begin if SortedField = AField.FieldName then begin This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ah...@us...> - 2006-09-02 12:11:28
|
Revision: 10927 http://svn.sourceforge.net/jvcl/?rev=10927&view=rev Author: ahuser Date: 2006-09-02 05:11:21 -0700 (Sat, 02 Sep 2006) Log Message: ----------- Extended BooleanEditor Fixed: DataSource goes into edit if readonly is true Modified Paths: -------------- trunk/jvcl/run/JvDBGrid.pas Modified: trunk/jvcl/run/JvDBGrid.pas =================================================================== --- trunk/jvcl/run/JvDBGrid.pas 2006-09-02 12:09:40 UTC (rev 10926) +++ trunk/jvcl/run/JvDBGrid.pas 2006-09-02 12:11:21 UTC (rev 10927) @@ -960,10 +960,32 @@ end; function TJvDBGrid.EditWithBoolBox(Field: TField): Boolean; +var + Value, Err: Integer; begin - Result := FBooleanEditor and ((Field.DataType = ftBoolean) - or ((Field.DataType in [ftSmallint, ftInteger, ftWord]) and Assigned(FIsBoolField) - and FIsBoolField(Self, Field))); + if FBooleanEditor then + begin + Result := Field.DataType = ftBoolean; + if not Result and Assigned(FIsBoolField) then + begin + case Field.DataType of + ftSmallint, ftInteger, ftWord: + Result := FIsBoolField(Self, Field); + ftString: + begin + Err := 0; + if not Field.IsNull then + begin + Val(Field.AsString, Value, Err); + if Value <> 0 then ; // prevent compiler hint + end; + Result := (Err = 0) and FIsBoolField(Self, Field); + end; + end; + end; + end + else + Result := False; end; function TJvDBGrid.GetImageIndex(Field: TField): Integer; @@ -995,6 +1017,12 @@ Result := Ord(gpChecked) else Result := Ord(gpUnChecked); + ftString: + if EditWithBoolBox(Field) and not Field.IsNull then + if Field.AsString = '0' then + Result := Ord(gpUnChecked) + else + Result := Ord(gpChecked); ftSmallint, ftInteger, ftWord: if EditWithBoolBox(Field) and not Field.IsNull then if Field.AsInteger = 0 then @@ -3744,7 +3772,7 @@ // up with an infinite loop of error messages. This check must // be done in UseDefaultEditor - if not (Control.Enabled and DataLink.DataSet.CanModify and DataLink.Edit) then + if ReadOnly or not (Control.Enabled and DataLink.DataSet.CanModify and DataLink.Edit) then begin HideCurrentControl; Exit; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ob...@us...> - 2006-09-11 16:32:11
|
Revision: 10933 http://svn.sourceforge.net/jvcl/?rev=10933&view=rev Author: obones Date: 2006-09-11 09:31:40 -0700 (Mon, 11 Sep 2006) Log Message: ----------- Mantis 3895: Lifting ambiguity over TBitmap in event handler. Modified Paths: -------------- trunk/jvcl/run/JvDBGrid.pas Modified: trunk/jvcl/run/JvDBGrid.pas =================================================================== --- trunk/jvcl/run/JvDBGrid.pas 2006-09-08 22:09:06 UTC (rev 10932) +++ trunk/jvcl/run/JvDBGrid.pas 2006-09-11 16:31:40 UTC (rev 10933) @@ -89,6 +89,21 @@ type TJvDBGrid = class; + // Mantis 3895: The only way to lift an ambiguity in an event handler is to + // redefine a type. A simple rename is not enough, hence the distinction + // between BCB and the others. + {$IFDEF BCB} + TJvDBGridBitmap = class(TBitmap) + end; + {$ELSE} + {$IFDEF DELPHI10_UP} + TJvDBGridBitmap = class(TBitmap) + end; + {$ELSE} + TJvDBGridBitmap = TBitmap; + {$ENDIF BCB10_UP} + {$ENDIF BCB} + TSelectColumn = (scDataBase, scGrid); TTitleClickEvent = procedure(Sender: TObject; ACol: Longint; Field: TField) of object; @@ -105,7 +120,7 @@ TJvDBEditShowEvent = procedure(Sender: TObject; Field: TField; var AllowEdit: Boolean) of object; TDrawColumnTitleEvent = procedure(Sender: TObject; ACanvas: TCanvas; - ARect: TRect; AColumn: TColumn; var ASortMarker: TBitmap; IsDown: Boolean; + ARect: TRect; AColumn: TColumn; var ASortMarker: TJvDBGridBitmap; IsDown: Boolean; var Offset: Integer; var DefaultDrawText, DefaultDrawSortMarker: Boolean) of object; TJvTitleHintEvent = procedure(Sender: TObject; Field: TField; @@ -3142,7 +3157,7 @@ begin if Assigned(FOnDrawColumnTitle) then begin - FOnDrawColumnTitle(Self, ACanvas, ARect, AColumn, ASortMarker, IsDown, Offset, + FOnDrawColumnTitle(Self, ACanvas, ARect, AColumn, TJvDBGridBitmap(ASortMarker), IsDown, Offset, DefaultDrawText, DefaultDrawSortMarker); end; end; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ob...@us...> - 2006-09-29 13:28:54
|
Revision: 10950 http://svn.sourceforge.net/jvcl/?rev=10950&view=rev Author: obones Date: 2006-09-29 06:25:58 -0700 (Fri, 29 Sep 2006) Log Message: ----------- Mantis 3695: Introduced ScrollBars property, public. Modified Paths: -------------- trunk/jvcl/run/JvDBGrid.pas Modified: trunk/jvcl/run/JvDBGrid.pas =================================================================== --- trunk/jvcl/run/JvDBGrid.pas 2006-09-29 12:37:30 UTC (rev 10949) +++ trunk/jvcl/run/JvDBGrid.pas 2006-09-29 13:25:58 UTC (rev 10950) @@ -66,7 +66,7 @@ {$IFDEF VCL} Windows, Messages, {$ENDIF VCL} - Classes, Graphics, Controls, Grids, Menus, DBGrids, DB, + Classes, Graphics, Controls, Grids, Menus, DBGrids, DB, StdCtrls, Contnrs, JvTypes, {JvTypes contains Exception base class} JvAppStorage, JvFormPlacement, JvExDBGrids; @@ -251,6 +251,7 @@ FShowCellHint: Boolean; FOnShowCellHint: TJvCellHintEvent; FCharList: TCharList; + FScrollBars: TScrollStyle; FControls: TJvDBGridControls; FCurrentControl: TWinControl; @@ -319,6 +320,7 @@ procedure WMVScroll(var Msg: TWMVScroll); message WM_VSCROLL; procedure SetShowMemos(const Value: Boolean); procedure SetBooleanEditor(const Value: Boolean); + procedure SetScrollBars(const Value: TScrollStyle); procedure SetControls(Value: TJvDBGridControls); procedure HideCurrentControl; @@ -439,6 +441,7 @@ property IndicatorOffset; property TitleOffset: Byte read GetTitleOffset; property CharList: TCharList read FCharList write FCharList; + property ScrollBars: TScrollStyle read FScrollBars write SetScrollBars; published property AutoAppend: Boolean read FAutoAppend write FAutoAppend default True; // Polaris property SortMarker: TSortMarker read FSortMarker write SetSortMarker default smNone; @@ -533,7 +536,7 @@ {$IFDEF HAS_UNIT_VARIANTS} Variants, {$ENDIF HAS_UNIT_VARIANTS} - SysUtils, Math, TypInfo, Forms, StdCtrls, Dialogs, DBConsts, + SysUtils, Math, TypInfo, Forms, Dialogs, DBConsts, {$IFDEF COMPILER6_UP} StrUtils, JvDBLookup, @@ -4044,6 +4047,20 @@ end; end; +procedure TJvDBGrid.SetScrollBars(const Value: TScrollStyle); +var + Style: Integer; +const + ScrollStyles: array [TScrollStyle] of Integer = (0, WS_HSCROLL, WS_VSCROLL, WS_HSCROLL or WS_VSCROLL); +begin + if FScrollBars <> Value then + begin + FScrollBars := Value; + Style := GetWindowLong(Handle, GWL_STYLE); + SetWindowLong(Handle, GWL_STYLE, Style or ScrollStyles[Value]); + end; +end; + procedure TJvDBGrid.SetShowMemos(const Value: Boolean); begin if FShowMemos <> Value then This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ob...@us...> - 2006-10-11 12:43:50
|
Revision: 10969 http://svn.sourceforge.net/jvcl/?rev=10969&view=rev Author: obones Date: 2006-10-11 05:43:38 -0700 (Wed, 11 Oct 2006) Log Message: ----------- Changes from Fred Modified Paths: -------------- trunk/jvcl/run/JvDBGrid.pas Modified: trunk/jvcl/run/JvDBGrid.pas =================================================================== --- trunk/jvcl/run/JvDBGrid.pas 2006-10-10 21:54:09 UTC (rev 10968) +++ trunk/jvcl/run/JvDBGrid.pas 2006-10-11 12:43:38 UTC (rev 10969) @@ -101,7 +101,7 @@ end; {$ELSE} TJvDBGridBitmap = TBitmap; - {$ENDIF BCB10_UP} + {$ENDIF DELPHI10_UP} {$ENDIF BCB} TSelectColumn = (scDataBase, scGrid); @@ -127,7 +127,8 @@ var AHint: string; var ATimeOut: Integer) of object; TJvCellHintEvent = TJvTitleHintEvent; TJvDBColumnResizeEvent = procedure(Grid: TJvDBGrid; ACol: Longint; NewWidth: Integer) of object; - TJvDBIsBoolFieldEvent = function(Grid: TJvDBGrid; Field: TField): Boolean of object; + TJvDBCheckIfBooleanFieldEvent = function(Grid: TJvDBGrid; Field: TField; + var StringForTrue: string; var StringForFalse: string): Boolean of object; TJvDBGridLayoutChangeKind = (lcLayoutChanged, lcSizeChanged, lcTopLeftChanged); TJvDBGridLayoutChangeEvent = procedure(Grid: TJvDBGrid; Kind: TJvDBGridLayoutChangeKind) of object; @@ -258,7 +259,9 @@ FOldControlWndProc: TWndMethod; FBooleanFieldToEdit: TField; FBooleanEditor: Boolean; - FOnIsBoolField: TJvDBIsBoolFieldEvent; + FOnCheckIfBooleanField: TJvDBCheckIfBooleanFieldEvent; + FStringForTrue: string; + FStringForFalse: string; FWordWrap: Boolean; FAutoSizeRows: Boolean; @@ -514,8 +517,8 @@ property ShowMemos: Boolean read FShowMemos write SetShowMemos default True; { BooleanEditor: if true, a checkbox is used to edit boolean fields } property BooleanEditor: Boolean read FBooleanEditor write SetBooleanEditor default True; - { OnIsBooleanField: event used to treat integer fields as boolean fields } - property OnIsBooleanField: TJvDBIsBoolFieldEvent read FOnIsBoolField write FOnIsBoolField; + { OnCheckIfBooleanField: event used to treat integer fields as boolean fields } + property OnCheckIfBooleanField: TJvDBCheckIfBooleanFieldEvent read FOnCheckIfBooleanField write FOnCheckIfBooleanField; { OnColumnResized: event triggered each time a column is resized with the mouse } property OnColumnResized: TJvDBColumnResizeEvent read FOnColumnResized write FOnColumnResized; end; @@ -945,6 +948,8 @@ FOldControlWndProc := nil; FBooleanFieldToEdit := nil; FBooleanEditor := True; + FStringForTrue := '1'; + FStringForFalse := '0'; FWordWrap := False; FAutoSizeRows := True; @@ -979,29 +984,13 @@ end; function TJvDBGrid.EditWithBoolBox(Field: TField): Boolean; -var - Value, Err: Integer; begin if FBooleanEditor then begin - Result := Field.DataType = ftBoolean; - if not Result and Assigned(FOnIsBoolField) then - begin - case Field.DataType of - ftSmallint, ftInteger, ftWord: - Result := FOnIsBoolField(Self, Field); - ftString: - begin - Err := 0; - if not Field.IsNull then - begin - Val(Field.AsString, Value, Err); - if Value <> 0 then ; // prevent compiler hint - end; - Result := (Err = 0) and FOnIsBoolField(Self, Field); - end; - end; - end; + Result := (Field.DataType = ftBoolean); + if (not Result) and Assigned(FOnCheckIfBooleanField) and + (Field.DataType in [ftSmallint, ftInteger, ftWord, ftString, ftWideString]) then + Result := FOnCheckIfBooleanField(Self, Field, FStringForTrue, FStringForFalse); end else Result := False; @@ -1036,9 +1025,9 @@ Result := Ord(gpChecked) else Result := Ord(gpUnChecked); - ftString: + ftString, ftWideString: if EditWithBoolBox(Field) and not Field.IsNull then - if Field.AsString = '0' then + if AnsiSameText(Field.AsString, FStringForFalse) then Result := Ord(gpUnChecked) else Result := Ord(gpChecked); @@ -3184,16 +3173,34 @@ begin if FBooleanFieldToEdit.IsNull or (FieldValueChange <> JvGridBool_INVERT) then begin - if FBooleanFieldToEdit.DataType = ftBoolean then - FBooleanFieldToEdit.Value := (FieldValueChange = JvGridBool_CHECK) + case FBooleanFieldToEdit.DataType of + ftBoolean: + FBooleanFieldToEdit.Value := (FieldValueChange = JvGridBool_CHECK); + ftString, ftWideString: + begin + if FieldValueChange = JvGridBool_CHECK then + FBooleanFieldToEdit.Value := FStringForTrue + else + FBooleanFieldToEdit.Value := FStringForFalse; + end; else FBooleanFieldToEdit.Value := FieldValueChange + 1; + end; end else - if FBooleanFieldToEdit.DataType = ftBoolean then - FBooleanFieldToEdit.Value := not FBooleanFieldToEdit.AsBoolean + case FBooleanFieldToEdit.DataType of + ftBoolean: + FBooleanFieldToEdit.Value := not FBooleanFieldToEdit.AsBoolean; + ftString, ftWideString: + begin + if AnsiSameText(FBooleanFieldToEdit.AsString, FStringForTrue) then + FBooleanFieldToEdit.Value := FStringForFalse + else + FBooleanFieldToEdit.Value := FStringForTrue; + end; else FBooleanFieldToEdit.Value := 1 - Abs(FBooleanFieldToEdit.AsInteger); + end; InvalidateCell(Col, Row); end; end; @@ -3274,11 +3281,12 @@ Filer.DefineProperty('AlternRowColor', ReadAlternateRowColor, nil, False); Filer.DefineProperty('AlternRowFontColor', ReadAlternateRowFontColor, nil, False); Filer.DefineProperty('IsBooleanField', ReadIsBooleanField, nil, False); + Filer.DefineProperty('OnIsBooleanField', ReadIsBooleanField, nil, False); end; // This type and the ReadIsBooleanField procedure are here to allow silent // migration from the wrongly named "IsBooleanField" event to the new and -// correct event named "OnIsBooleanField". We thus call TReader.ReadPropValue +// correct event named "OnCheckIfBooleanField". We thus call TReader.ReadPropValue // that knows how to handle a property of type tkMethod. // We could have reproduced the code here, but calling ReadPropValue ensures // easy compatibility with the different versions of Delphi. @@ -3288,7 +3296,7 @@ procedure TJvDBGrid.ReadIsBooleanField(Reader: TReader); begin - TReaderAccess(Reader).ReadPropValue(Self, GetPropInfo(Self, 'OnIsBooleanField')); + TReaderAccess(Reader).ReadPropValue(Self, GetPropInfo(Self, 'OnCheckIfBooleanField')); end; procedure TJvDBGrid.ReadAlternateRowColor(Reader: TReader); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ob...@us...> - 2006-10-11 13:28:05
|
Revision: 10970 http://svn.sourceforge.net/jvcl/?rev=10970&view=rev Author: obones Date: 2006-10-11 06:27:56 -0700 (Wed, 11 Oct 2006) Log Message: ----------- The reader is no longer appropriate Modified Paths: -------------- trunk/jvcl/run/JvDBGrid.pas Modified: trunk/jvcl/run/JvDBGrid.pas =================================================================== --- trunk/jvcl/run/JvDBGrid.pas 2006-10-11 12:43:38 UTC (rev 10969) +++ trunk/jvcl/run/JvDBGrid.pas 2006-10-11 13:27:56 UTC (rev 10970) @@ -333,7 +333,6 @@ function DoKeyPress(var Msg: TWMChar): Boolean; procedure SetWordWrap(Value: Boolean); procedure NotifyLayoutChange(const Kind: TJvDBGridLayoutChangeKind); - procedure ReadIsBooleanField(Reader: TReader); protected FCurrentDrawRow: Integer; procedure MouseLeave(Control: TControl); override; @@ -3280,25 +3279,8 @@ inherited DefineProperties(Filer); Filer.DefineProperty('AlternRowColor', ReadAlternateRowColor, nil, False); Filer.DefineProperty('AlternRowFontColor', ReadAlternateRowFontColor, nil, False); - Filer.DefineProperty('IsBooleanField', ReadIsBooleanField, nil, False); - Filer.DefineProperty('OnIsBooleanField', ReadIsBooleanField, nil, False); end; -// This type and the ReadIsBooleanField procedure are here to allow silent -// migration from the wrongly named "IsBooleanField" event to the new and -// correct event named "OnCheckIfBooleanField". We thus call TReader.ReadPropValue -// that knows how to handle a property of type tkMethod. -// We could have reproduced the code here, but calling ReadPropValue ensures -// easy compatibility with the different versions of Delphi. -type - TReaderAccess = class(TReader) - end; - -procedure TJvDBGrid.ReadIsBooleanField(Reader: TReader); -begin - TReaderAccess(Reader).ReadPropValue(Self, GetPropInfo(Self, 'OnCheckIfBooleanField')); -end; - procedure TJvDBGrid.ReadAlternateRowColor(Reader: TReader); begin if Reader.ReadBoolean then This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ob...@us...> - 2006-10-11 14:44:40
|
Revision: 10971 http://svn.sourceforge.net/jvcl/?rev=10971&view=rev Author: obones Date: 2006-10-11 07:44:30 -0700 (Wed, 11 Oct 2006) Log Message: ----------- >From Fred: Reinitialize FStringForXX before calling the event Modified Paths: -------------- trunk/jvcl/run/JvDBGrid.pas Modified: trunk/jvcl/run/JvDBGrid.pas =================================================================== --- trunk/jvcl/run/JvDBGrid.pas 2006-10-11 13:27:56 UTC (rev 10970) +++ trunk/jvcl/run/JvDBGrid.pas 2006-10-11 14:44:30 UTC (rev 10971) @@ -516,7 +516,7 @@ property ShowMemos: Boolean read FShowMemos write SetShowMemos default True; { BooleanEditor: if true, a checkbox is used to edit boolean fields } property BooleanEditor: Boolean read FBooleanEditor write SetBooleanEditor default True; - { OnCheckIfBooleanField: event used to treat integer fields as boolean fields } + { OnCheckIfBooleanField: event used to treat integer fields and string fields as boolean fields } property OnCheckIfBooleanField: TJvDBCheckIfBooleanFieldEvent read FOnCheckIfBooleanField write FOnCheckIfBooleanField; { OnColumnResized: event triggered each time a column is resized with the mouse } property OnColumnResized: TJvDBColumnResizeEvent read FOnColumnResized write FOnColumnResized; @@ -989,7 +989,11 @@ Result := (Field.DataType = ftBoolean); if (not Result) and Assigned(FOnCheckIfBooleanField) and (Field.DataType in [ftSmallint, ftInteger, ftWord, ftString, ftWideString]) then + begin + FStringForTrue := '1'; + FStringForFalse := '0'; Result := FOnCheckIfBooleanField(Self, Field, FStringForTrue, FStringForFalse); + end; end else Result := False; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ah...@us...> - 2006-10-11 16:38:53
|
Revision: 10972 http://svn.sourceforge.net/jvcl/?rev=10972&view=rev Author: ahuser Date: 2006-10-11 09:38:43 -0700 (Wed, 11 Oct 2006) Log Message: ----------- - Fixed: ColEnter and ColExit aren't called when the row was changed but not not column. - Fixed: When the CM_EXIT message handler of the FCurrentControl raised an exception and set the focus back to the control, a EInvalidOperation was raised (Disabled or invisible control cannot get the focus) Modified Paths: -------------- trunk/jvcl/run/JvDBGrid.pas Modified: trunk/jvcl/run/JvDBGrid.pas =================================================================== --- trunk/jvcl/run/JvDBGrid.pas 2006-10-11 14:44:30 UTC (rev 10971) +++ trunk/jvcl/run/JvDBGrid.pas 2006-10-11 16:38:43 UTC (rev 10972) @@ -272,6 +272,7 @@ FChangeLinks: TObjectList; FShowMemos: Boolean; FAlwaysShowEditor: Boolean; + FInColExit: Boolean; procedure SetAutoSizeRows(Value: Boolean); procedure SetRowResize(Value: Boolean); @@ -538,7 +539,7 @@ {$IFDEF HAS_UNIT_VARIANTS} Variants, {$ENDIF HAS_UNIT_VARIANTS} - SysUtils, Math, TypInfo, Forms, Dialogs, DBConsts, + SysUtils, Math, TypInfo, Forms, Dialogs, DBConsts, {$IFDEF COMPILER6_UP} StrUtils, JvDBLookup, @@ -601,6 +602,23 @@ Grid.InvalidateCell(I, Row); end; +type + TPublishedGrid = class(TDBGrid) + published + property Col; + property Row; + end; + +procedure SetIntGetterProp(Instance: TObject; const PropName: string; Value: Integer); +var + Info: PPropInfo; +begin + Info := GetPropInfo(TPublishedGrid, PropName); + if Info <> nil then + if Cardinal(Info.GetProc) and $FF000000 = $FF000000 then + PInteger(Cardinal(Instance) + (Cardinal(Info.GetProc) and $00FFFFFF))^ := Value; +end; + //=== { TInternalInplaceEdit } =============================================== {$IFDEF COMPILER6_UP} @@ -2023,7 +2041,7 @@ procedure TJvDBGrid.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var - Cell: TGridCoord; + Cell, LastCell: TGridCoord; MouseDownEvent: TMouseEvent; EnableClick: Boolean; CursorPos: TPoint; @@ -2044,6 +2062,8 @@ else begin Cell := MouseCoord(X, Y); + LastCell.X := Col; + LastCell.Y := Row; if (Button = mbRight) and (dgTitles in Options) and (dgIndicator in Options) and @@ -2115,6 +2135,28 @@ inherited MouseDown(Button, Shift, 1, Y) else inherited MouseDown(Button, Shift, X, Y); + if (Cell.X = LastCell.X) and (Cell.Y <> LastCell.Y) then + begin + // invoke missing ColExit and ColEnter + if not FInColExit then + begin + FInColExit := True; + try + SetIntGetterProp(Self, 'Col', LastCell.X); + SetIntGetterProp(Self, 'Row', LastCell.Y); + ColExit; + finally + FInColExit := False; + end; + if (Row <> LastCell.Y) then + Exit; + SetIntGetterProp(Self, 'Col', Cell.X); + SetIntGetterProp(Self, 'Row', Cell.Y); + end; + if not (dgAlwaysShowEditor in Options) then + HideEditor; + ColEnter; + end; end; MouseDownEvent := OnMouseDown; if Assigned(MouseDownEvent) then @@ -3928,9 +3970,20 @@ procedure TJvDBGrid.CloseControl; begin - HideCurrentControl; - if Self.Visible then - Self.SetFocus; + { Do not hide the control if it has the focus because then the WM_KILLFOCUS + ControlWndProc hook will hide it. } + if not Visible or (FCurrentControl = nil) or not FCurrentControl.HandleAllocated or + not FCurrentControl.Focused then + HideCurrentControl; + if Visible then + begin + SetFocus; + { If the grid does not have the focus after a SetFocus, one of the executed + CM_EXIT has failed with an exception or has set the focus to another control. + In that case the CurrentControl is still active. } + if (FCurrentControl <> nil) and FCurrentControl.Focused then + Abort; + end; end; procedure TJvDBGrid.ControlWndProc(var Message: TMessage); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ob...@us...> - 2006-10-12 18:19:18
|
Revision: 10975 http://svn.sourceforge.net/jvcl/?rev=10975&view=rev Author: obones Date: 2006-10-12 11:19:06 -0700 (Thu, 12 Oct 2006) Log Message: ----------- Changes from Fred: cleanups and Mantis 3943. Modified Paths: -------------- trunk/jvcl/run/JvDBGrid.pas Modified: trunk/jvcl/run/JvDBGrid.pas =================================================================== --- trunk/jvcl/run/JvDBGrid.pas 2006-10-11 16:48:19 UTC (rev 10974) +++ trunk/jvcl/run/JvDBGrid.pas 2006-10-12 18:19:06 UTC (rev 10975) @@ -20,6 +20,7 @@ Lionel Reynaud Flemming Brandt Clausen Fr\xE9d\xE9ric Leneuf-Magaud + Andreas Hausladen You may retrieve the latest version of this file at the Project JEDI's JVCL home page, located at http://jvcl.sourceforge.net @@ -198,10 +199,10 @@ TJvDBGrid = class(TJvExDBGrid) private FAutoSort: Boolean; - FBeepOnError: Boolean; // WAP - FAutoAppend: Boolean; // Polaris - FSizingIndex: Integer; // Polaris - FSizingOfs: Integer; // Polaris + FBeepOnError: Boolean; + FAutoAppend: Boolean; + FSizingIndex: Integer; + FSizingOfs: Integer; FShowGlyphs: Boolean; FDefaultDrawing: Boolean; FMultiSelect: Boolean; @@ -372,7 +373,6 @@ Column: TColumn; State: TGridDrawState); override; procedure ColWidthsChanged; override; procedure Paint; override; - // Polaris procedure CalcSizingState(X, Y: Integer; var State: TGridState; var Index: Longint; var SizingPos, SizingOfs: Integer; var FixedInfo: TGridDrawInfo); override; @@ -446,7 +446,7 @@ property CharList: TCharList read FCharList write FCharList; property ScrollBars: TScrollStyle read FScrollBars write SetScrollBars; published - property AutoAppend: Boolean read FAutoAppend write FAutoAppend default True; // Polaris + property AutoAppend: Boolean read FAutoAppend write FAutoAppend default True; property SortMarker: TSortMarker read FSortMarker write SetSortMarker default smNone; property AutoSort: Boolean read FAutoSort write FAutoSort default True; property Options: TDBGridOptions read GetOptions write SetOptions default DefJvGridOptions; @@ -480,7 +480,7 @@ property OnResize; property OnMouseWheelDown; property OnMouseWheelUp; - property BeepOnError: Boolean read FBeepOnError write FBeepOnError default True; // WAP. + property BeepOnError: Boolean read FBeepOnError write FBeepOnError default True; property AlternateRowColor: TColor read FAlternateRowColor write SetAlternateRowColor default clNone; property AlternateRowFontColor: TColor read FAlternateRowFontColor write SetAlternateRowFontColor default clNone; property PostOnEnter: Boolean read FPostOnEnter write FPostOnEnter default False; @@ -944,7 +944,7 @@ FShowGlyphs := True; FDefaultDrawing := True; FClearSelection := True; - FAutoAppend := True; // Polaris + FAutoAppend := True; FShowTitleHint := False; FShowCellHint := False; FAlternateRowColor := clNone; @@ -958,7 +958,7 @@ // systems, in which case you should simply remove it and recompile. FCharList := ['A'..'Z', 'a'..'z', ' ', '-', '+', '0'..'9', '.', ',', Backspace, - '\xE9', '\xE8', '\xEA', '\xEB', '\xF4', '\xFB', '\xF9', '\xE2', '\xE0', '\xEE', '\xEF', '\xE7']; + '\xE9', '\xE8', '\xEA', '\xEB', '\xF4', '\xF6', '\xFB', '\xF9', '\xE2', '\xE0', '\xE4', '\xEE', '\xEF', '\xE7']; FControls := TJvDBGridControls.Create(Self); FCurrentControl := nil; @@ -1331,7 +1331,6 @@ with DataLink.DataSet do begin DoSelection(Select, 1); - // Polaris if AutoAppend and Eof and CanModify and (not ReadOnly) and (dgEditing in Options) then Append; end; @@ -1760,8 +1759,6 @@ end else begin - if Assigned(DataLink) and not DataLink.Editing then - HideCurrentControl; if not (Assigned(InplaceEditor) and InplaceEditor.Visible) then HideEditor; end; @@ -1810,7 +1807,7 @@ end; procedure TJvDBGrid.DoTitleClick(ACol: Longint; AField: TField); -// This function has a few known bugs, so don't complain about them and use +// Fred: This function has a few known bugs, so don't complain about them and use // JvDBUltimGrid instead if you're looking for an improved sorting function. const cIndexName = 'IndexName'; @@ -2266,16 +2263,12 @@ if Button = mbRight then Button := mbLeft; end; - // Polaris if (Button = mbLeft) and (FGridState = gsColSizing) and (FSizingIndex + Byte(not (dgIndicator in Options)) <= FixedCols) then -// and not AutoSizeColumns begin ColWidths[FSizingIndex] := GetMinColWidth(X - FSizingOfs - CellRect(FSizingIndex, 0).Left); FGridState := gsNormal; -// Exit; end; - // Polaris if FTitleArrow and (Button = mbLeft) and (dgTitles in Options) and (dgIndicator in Options) and @@ -2738,8 +2731,6 @@ end; begin -// if gdFixed in AState then -// Canvas.Brush.Color := FixedColor; FCurrentDrawRow := ARow; Canvas.Font := Self.Font; if (DataLink <> nil) and DataLink.Active and (ACol >= 0) and @@ -2795,7 +2786,7 @@ end; end else - if not (csLoading in ComponentState) and //(FTitleButtons or (FixedCols > 0)) and + if not (csLoading in ComponentState) and (gdFixed in AState) and (dgTitles in Options) and (ARow < TitleOffset) then begin SavePen := Canvas.Pen.Color; @@ -3149,8 +3140,6 @@ end; end; -// Polaris - procedure TJvDBGrid.CalcSizingState(X, Y: Integer; var State: TGridState; var Index: Longint; var SizingPos, SizingOfs: Integer; var FixedInfo: TGridDrawInfo); @@ -3843,7 +3832,7 @@ // up with an infinite loop of error messages. This check must // be done in UseDefaultEditor - if ReadOnly or not (Control.Enabled and DataLink.DataSet.CanModify and DataLink.Edit) then + if ReadOnly or not (Control.Enabled and DataLink.DataSet.CanModify) then begin HideCurrentControl; Exit; @@ -3871,8 +3860,8 @@ R.BottomRight := ClientToScreen(R.BottomRight); R.BottomRight := TControl(Control.Parent).ScreenToClient(R.BottomRight); - // I removed this code because moving a control away from the topleft corner - // of the cell lets appear the cell and its focus rectangle behind. Fred. + // Fred: I removed this code because moving a control away from the topleft corner + // of the cell lets appear the cell and its focus rectangle behind. //if Control is TCustomEdit then //begin @@ -3930,10 +3919,6 @@ end; Control.BringToFront; Control.Show; - //if Assigned(GridControl) and not (GridControl.FitCell in [fcDesignSize, fcBiggest]) then - // { If the Control is shown for the first time, the bounds are not correct. - // Esp. "Height" is too large } - // Control.BoundsRect := R; if Self.Visible and Control.Visible and Self.Parent.Visible and GetParentForm(Self).Visible then begin This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ob...@us...> - 2006-10-18 15:39:26
|
Revision: 10984 http://svn.sourceforge.net/jvcl/?rev=10984&view=rev Author: obones Date: 2006-10-18 08:39:18 -0700 (Wed, 18 Oct 2006) Log Message: ----------- >From Fred: cleanup, see newsgroups for details. Modified Paths: -------------- trunk/jvcl/run/JvDBGrid.pas Modified: trunk/jvcl/run/JvDBGrid.pas =================================================================== --- trunk/jvcl/run/JvDBGrid.pas 2006-10-17 18:22:52 UTC (rev 10983) +++ trunk/jvcl/run/JvDBGrid.pas 2006-10-18 15:39:18 UTC (rev 10984) @@ -273,7 +273,6 @@ FChangeLinks: TObjectList; FShowMemos: Boolean; FAlwaysShowEditor: Boolean; - FInColExit: Boolean; procedure SetAutoSizeRows(Value: Boolean); procedure SetRowResize(Value: Boolean); @@ -602,23 +601,6 @@ Grid.InvalidateCell(I, Row); end; -type - TPublishedGrid = class(TDBGrid) - published - property Col; - property Row; - end; - -procedure SetIntGetterProp(Instance: TObject; const PropName: string; Value: Integer); -var - Info: PPropInfo; -begin - Info := GetPropInfo(TPublishedGrid, PropName); - if Info <> nil then - if Cardinal(Info.GetProc) and $FF000000 = $FF000000 then - PInteger(Cardinal(Instance) + (Cardinal(Info.GetProc) and $00FFFFFF))^ := Value; -end; - //=== { TInternalInplaceEdit } =============================================== {$IFDEF COMPILER6_UP} @@ -2038,7 +2020,7 @@ procedure TJvDBGrid.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var - Cell, LastCell: TGridCoord; + Cell: TGridCoord; MouseDownEvent: TMouseEvent; EnableClick: Boolean; CursorPos: TPoint; @@ -2059,8 +2041,6 @@ else begin Cell := MouseCoord(X, Y); - LastCell.X := Col; - LastCell.Y := Row; if (Button = mbRight) and (dgTitles in Options) and (dgIndicator in Options) and @@ -2132,29 +2112,7 @@ inherited MouseDown(Button, Shift, 1, Y) else inherited MouseDown(Button, Shift, X, Y); - if (Cell.X = LastCell.X) and (Cell.Y <> LastCell.Y) then - begin - // invoke missing ColExit and ColEnter - if not FInColExit then - begin - FInColExit := True; - try - SetIntGetterProp(Self, 'Col', LastCell.X); - SetIntGetterProp(Self, 'Row', LastCell.Y); - ColExit; - finally - FInColExit := False; - end; - if (Row <> LastCell.Y) then - Exit; - SetIntGetterProp(Self, 'Col', Cell.X); - SetIntGetterProp(Self, 'Row', Cell.Y); - end; - if not (dgAlwaysShowEditor in Options) then - HideEditor; - ColEnter; - end; - end; + end; MouseDownEvent := OnMouseDown; if Assigned(MouseDownEvent) then MouseDownEvent(Self, Button, Shift, X, Y); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ob...@us...> - 2006-10-20 14:09:42
|
Revision: 10987 http://svn.sourceforge.net/jvcl/?rev=10987&view=rev Author: obones Date: 2006-10-20 07:09:31 -0700 (Fri, 20 Oct 2006) Log Message: ----------- Mantis 3371: Fixed columns are now handled correctly when the indicator column is not present. Modified Paths: -------------- trunk/jvcl/run/JvDBGrid.pas Modified: trunk/jvcl/run/JvDBGrid.pas =================================================================== --- trunk/jvcl/run/JvDBGrid.pas 2006-10-19 18:27:21 UTC (rev 10986) +++ trunk/jvcl/run/JvDBGrid.pas 2006-10-20 14:09:31 UTC (rev 10987) @@ -1238,7 +1238,7 @@ FixCount := Min(FixCount, ColCount - 1); inherited FixedCols := FixCount; for I := 1 to Min(FixedCols, ColCount - 1) do - TabStops[I] := False; + TabStops[I + IndicatorOffset - 1] := False; end; FFixedCols := FixCount - IndicatorOffset; end; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ah...@us...> - 2006-10-24 17:36:13
|
Revision: 10989 http://svn.sourceforge.net/jvcl/?rev=10989&view=rev Author: ahuser Date: 2006-10-24 10:36:02 -0700 (Tue, 24 Oct 2006) Log Message: ----------- - Added VK_UP/VK_DOWN support - Included gdTabs in the default grid options (to keep default settings in sync with TDBGrid) - renamed PostOnEnter to PostOnEnterKey and defaults to TRUE (to keep default settings in sync with TDBGrid) - Rewritten ShowEditor bugfix Modified Paths: -------------- trunk/jvcl/run/JvDBGrid.pas Modified: trunk/jvcl/run/JvDBGrid.pas =================================================================== --- trunk/jvcl/run/JvDBGrid.pas 2006-10-24 17:33:20 UTC (rev 10988) +++ trunk/jvcl/run/JvDBGrid.pas 2006-10-24 17:36:02 UTC (rev 10989) @@ -74,7 +74,7 @@ const DefJvGridOptions = [dgEditing, dgTitles, dgIndicator, dgColumnResize, - dgColLines, dgRowLines, dgConfirmDelete, dgCancelOnExit]; + dgColLines, dgRowLines, dgTabs, dgConfirmDelete, dgCancelOnExit]; {$IFDEF BCB} {$NODEFINE DefJvGridOptions} @@ -233,7 +233,7 @@ FWord: string; FShowTitleHint: Boolean; FSortedField: string; - FPostOnEnter: Boolean; + FPostOnEnterKey: Boolean; FSelectColumn: TSelectColumn; FTitleArrow: Boolean; FTitlePopup: TPopupMenu; @@ -325,6 +325,7 @@ procedure SetShowMemos(const Value: Boolean); procedure SetBooleanEditor(const Value: Boolean); procedure SetScrollBars(const Value: TScrollStyle); + procedure ReadPostOnEnter(Reader: TReader); procedure SetControls(Value: TJvDBGridControls); procedure HideCurrentControl; @@ -482,7 +483,7 @@ property BeepOnError: Boolean read FBeepOnError write FBeepOnError default True; property AlternateRowColor: TColor read FAlternateRowColor write SetAlternateRowColor default clNone; property AlternateRowFontColor: TColor read FAlternateRowFontColor write SetAlternateRowFontColor default clNone; - property PostOnEnter: Boolean read FPostOnEnter write FPostOnEnter default False; + property PostOnEnterKey: Boolean read FPostOnEnterKey write FPostOnEnterKey default True; property SelectColumn: TSelectColumn read FSelectColumn write FSelectColumn default scDataBase; property SortedField: string read FSortedField write SetSortedField; property ShowTitleHint: Boolean read FShowTitleHint write FShowTitleHint default False; @@ -933,7 +934,7 @@ FAlternateRowFontColor := clNone; FSelectColumn := scDataBase; FTitleArrow := False; - FPostOnEnter := False; + FPostOnEnterKey := True; FAutoSizeColumnIndex := JvGridResizeProportionally; FSelectColumnsDialogStrings := TJvSelectDialogColumnStrings.Create; // Note to users: the second line may not compile on non western european @@ -2020,7 +2021,7 @@ procedure TJvDBGrid.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var - Cell: TGridCoord; + Cell, LastCell: TGridCoord; MouseDownEvent: TMouseEvent; EnableClick: Boolean; CursorPos: TPoint; @@ -2041,6 +2042,8 @@ else begin Cell := MouseCoord(X, Y); + LastCell.X := Col; + LastCell.Y := Row; if (Button = mbRight) and (dgTitles in Options) and (dgIndicator in Options) and @@ -2112,6 +2115,13 @@ inherited MouseDown(Button, Shift, 1, Y) else inherited MouseDown(Button, Shift, X, Y); + if (Col = LastCell.X) and (Row <> LastCell.Y) then + begin + { ColEnter is not invoked when switching between rows staying in the + same column. } + if FAlwaysShowEditor and not EditorMode then + ShowEditor; + end; end; MouseDownEvent := OnMouseDown; if Assigned(MouseDownEvent) then @@ -2357,7 +2367,7 @@ end; begin - if (Key = Cr) and PostOnEnter and not ReadOnly then + if (Key = Cr) and PostOnEnterKey and not ReadOnly then DataSource.DataSet.CheckBrowseMode; if not Assigned(FCurrentControl) then @@ -3272,8 +3282,14 @@ inherited DefineProperties(Filer); Filer.DefineProperty('AlternRowColor', ReadAlternateRowColor, nil, False); Filer.DefineProperty('AlternRowFontColor', ReadAlternateRowFontColor, nil, False); + Filer.DefineProperty('PostOnEnter', ReadPostOnEnter, nil, False); end; +procedure TJvDBGrid.ReadPostOnEnter(Reader: TReader); +begin + PostOnEnterKey := Reader.ReadBoolean; +end; + procedure TJvDBGrid.ReadAlternateRowColor(Reader: TReader); begin if Reader.ReadBoolean then @@ -3938,7 +3954,7 @@ if not DoKeyPress(TWMChar(Message)) then with TWMKey(Message) do begin - if (CharCode = VK_RETURN) and PostOnEnter then + if (CharCode = VK_RETURN) and PostOnEnterKey then begin CloseControl; DataSource.DataSet.CheckBrowseMode; @@ -3959,14 +3975,29 @@ end; end else + if Message.Msg = WM_KEYDOWN then begin + with TWMKey(Message) do + begin + if ((CharCode = VK_UP) or (CharCode = VK_DOWN)) and (KeyDataToShiftState(KeyData) = []) then + begin + CloseControl; + DataSource.DataSet.CheckBrowseMode; + PostMessage(Handle, WM_KEYDOWN, CharCode, KeyData); + end + else + FOldControlWndProc(Message); + end; + end + else + begin FOldControlWndProc(Message); - Case Message.Msg Of + case Message.Msg Of WM_GETDLGCODE: - Message.Result := Message.Result or DLGC_WANTTAB; + Message.Result := Message.Result or DLGC_WANTTAB or DLGC_WANTARROWS; CM_EXIT: HideCurrentControl; - End; + end; end; end; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ob...@us...> - 2006-11-03 16:43:16
|
Revision: 11001 http://svn.sourceforge.net/jvcl/?rev=11001&view=rev Author: obones Date: 2006-11-03 08:42:58 -0800 (Fri, 03 Nov 2006) Log Message: ----------- >From Fred: - Mantis 3971: Largeint added to list of pseudo boolean types - Removed code from Andreas where the enter key was seriously interfering with the rest of the logic - Fixed Escape key handling that did not cancel the edit in some instances. Modified Paths: -------------- trunk/jvcl/run/JvDBGrid.pas Modified: trunk/jvcl/run/JvDBGrid.pas =================================================================== --- trunk/jvcl/run/JvDBGrid.pas 2006-11-01 13:50:19 UTC (rev 11000) +++ trunk/jvcl/run/JvDBGrid.pas 2006-11-03 16:42:58 UTC (rev 11001) @@ -483,7 +483,7 @@ property BeepOnError: Boolean read FBeepOnError write FBeepOnError default True; property AlternateRowColor: TColor read FAlternateRowColor write SetAlternateRowColor default clNone; property AlternateRowFontColor: TColor read FAlternateRowFontColor write SetAlternateRowFontColor default clNone; - property PostOnEnterKey: Boolean read FPostOnEnterKey write FPostOnEnterKey default True; + property PostOnEnterKey: Boolean read FPostOnEnterKey write FPostOnEnterKey default False; property SelectColumn: TSelectColumn read FSelectColumn write FSelectColumn default scDataBase; property SortedField: string read FSortedField write SetSortedField; property ShowTitleHint: Boolean read FShowTitleHint write FShowTitleHint default False; @@ -934,7 +934,7 @@ FAlternateRowFontColor := clNone; FSelectColumn := scDataBase; FTitleArrow := False; - FPostOnEnterKey := True; + FPostOnEnterKey := False; FAutoSizeColumnIndex := JvGridResizeProportionally; FSelectColumnsDialogStrings := TJvSelectDialogColumnStrings.Create; // Note to users: the second line may not compile on non western european @@ -989,7 +989,7 @@ begin Result := (Field.DataType = ftBoolean); if (not Result) and Assigned(FOnCheckIfBooleanField) and - (Field.DataType in [ftSmallint, ftInteger, ftWord, ftString, ftWideString]) then + (Field.DataType in [ftSmallint, ftInteger, ftLargeint, ftWord, ftString, ftWideString]) then begin FStringForTrue := '1'; FStringForFalse := '0'; @@ -1006,18 +1006,14 @@ if FShowGlyphs and Assigned(Field) then begin case Field.DataType of - ftBytes, ftVarBytes, ftBlob: + ftBytes, ftVarBytes, ftBlob, ftTypedBinary: Result := Ord(gpBlob); ftGraphic: Result := Ord(gpPicture); - ftTypedBinary: - Result := Ord(gpBlob); ftParadoxOle, ftDBaseOle: Result := Ord(gpOle); - ftCursor: + ftCursor, ftReference, ftDataSet: Result := Ord(gpData); - ftReference, ftDataSet: - Result := Ord(gpData); ftMemo, ftFmtMemo: if not ShowMemos then Result := Ord(gpMemo); @@ -1035,7 +1031,7 @@ Result := Ord(gpUnChecked) else Result := Ord(gpChecked); - ftSmallint, ftInteger, ftWord: + ftSmallint, ftInteger, ftLargeint, ftWord: if EditWithBoolBox(Field) and not Field.IsNull then if Field.AsInteger = 0 then Result := Ord(gpUnChecked) @@ -3970,31 +3966,20 @@ EscapeKey := (CharCode = VK_ESCAPE); FOldControlWndProc(Message); if EscapeKey then + begin CloseControl; + if Assigned(SelectedField) and (SelectedField.OldValue <> SelectedField.Value) then + SelectedField.Value := SelectedField.OldValue; + end; end; end; end else - if Message.Msg = WM_KEYDOWN then begin - with TWMKey(Message) do - begin - if ((CharCode = VK_UP) or (CharCode = VK_DOWN)) and (KeyDataToShiftState(KeyData) = []) then - begin - CloseControl; - DataSource.DataSet.CheckBrowseMode; - PostMessage(Handle, WM_KEYDOWN, CharCode, KeyData); - end - else - FOldControlWndProc(Message); - end; - end - else - begin FOldControlWndProc(Message); case Message.Msg Of WM_GETDLGCODE: - Message.Result := Message.Result or DLGC_WANTTAB or DLGC_WANTARROWS; + Message.Result := Message.Result or DLGC_WANTTAB; CM_EXIT: HideCurrentControl; end; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ah...@us...> - 2006-11-12 08:32:52
|
Revision: 11012 http://svn.sourceforge.net/jvcl/?rev=11012&view=rev Author: ahuser Date: 2006-11-12 00:32:43 -0800 (Sun, 12 Nov 2006) Log Message: ----------- Added LeaveOnEnterKey property Modified Paths: -------------- trunk/jvcl/run/JvDBGrid.pas Modified: trunk/jvcl/run/JvDBGrid.pas =================================================================== --- trunk/jvcl/run/JvDBGrid.pas 2006-11-12 08:31:50 UTC (rev 11011) +++ trunk/jvcl/run/JvDBGrid.pas 2006-11-12 08:32:43 UTC (rev 11012) @@ -234,6 +234,7 @@ FShowTitleHint: Boolean; FSortedField: string; FPostOnEnterKey: Boolean; + FLeaveOnEnterKey: Boolean; FSelectColumn: TSelectColumn; FTitleArrow: Boolean; FTitlePopup: TPopupMenu; @@ -484,6 +485,7 @@ property AlternateRowColor: TColor read FAlternateRowColor write SetAlternateRowColor default clNone; property AlternateRowFontColor: TColor read FAlternateRowFontColor write SetAlternateRowFontColor default clNone; property PostOnEnterKey: Boolean read FPostOnEnterKey write FPostOnEnterKey default False; + property LeaveOnEnterKey: Boolean read FLeaveOnEnterKey write FLeaveOnEnterKey default True; property SelectColumn: TSelectColumn read FSelectColumn write FSelectColumn default scDataBase; property SortedField: string read FSortedField write SetSortedField; property ShowTitleHint: Boolean read FShowTitleHint write FShowTitleHint default False; @@ -935,6 +937,7 @@ FSelectColumn := scDataBase; FTitleArrow := False; FPostOnEnterKey := False; + FLeaveOnEnterKey := True; FAutoSizeColumnIndex := JvGridResizeProportionally; FSelectColumnsDialogStrings := TJvSelectDialogColumnStrings.Create; // Note to users: the second line may not compile on non western european @@ -2363,7 +2366,7 @@ end; begin - if (Key = Cr) and PostOnEnterKey and not ReadOnly then + if (Key = Cr) and (PostOnEnterKey or LeaveOnEnterKey) and not ReadOnly then DataSource.DataSet.CheckBrowseMode; if not Assigned(FCurrentControl) then @@ -3950,10 +3953,11 @@ if not DoKeyPress(TWMChar(Message)) then with TWMKey(Message) do begin - if (CharCode = VK_RETURN) and PostOnEnterKey then + if (CharCode = VK_RETURN) and (PostOnEnterKey or LeaveOnEnterKey) then begin CloseControl; - DataSource.DataSet.CheckBrowseMode; + if PostOnEnterKey then + DataSource.DataSet.CheckBrowseMode; end else if CharCode = VK_TAB then This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ah...@us...> - 2006-11-12 08:37:33
|
Revision: 11013 http://svn.sourceforge.net/jvcl/?rev=11013&view=rev Author: ahuser Date: 2006-11-12 00:37:26 -0800 (Sun, 12 Nov 2006) Log Message: ----------- Changed default LeaveOnEnterKey=True to False Modified Paths: -------------- trunk/jvcl/run/JvDBGrid.pas Modified: trunk/jvcl/run/JvDBGrid.pas =================================================================== --- trunk/jvcl/run/JvDBGrid.pas 2006-11-12 08:32:43 UTC (rev 11012) +++ trunk/jvcl/run/JvDBGrid.pas 2006-11-12 08:37:26 UTC (rev 11013) @@ -485,7 +485,7 @@ property AlternateRowColor: TColor read FAlternateRowColor write SetAlternateRowColor default clNone; property AlternateRowFontColor: TColor read FAlternateRowFontColor write SetAlternateRowFontColor default clNone; property PostOnEnterKey: Boolean read FPostOnEnterKey write FPostOnEnterKey default False; - property LeaveOnEnterKey: Boolean read FLeaveOnEnterKey write FLeaveOnEnterKey default True; + property LeaveOnEnterKey: Boolean read FLeaveOnEnterKey write FLeaveOnEnterKey default False; property SelectColumn: TSelectColumn read FSelectColumn write FSelectColumn default scDataBase; property SortedField: string read FSortedField write SetSortedField; property ShowTitleHint: Boolean read FShowTitleHint write FShowTitleHint default False; @@ -901,7 +901,6 @@ begin inherited Create(AOwner); inherited DefaultDrawing := False; - FAlwaysShowEditor := False; inherited Options := inherited Options - [dgAlwaysShowEditor]; // (obones): issue 3026: need to create FChangeLinks at the beginning @@ -930,14 +929,9 @@ FDefaultDrawing := True; FClearSelection := True; FAutoAppend := True; - FShowTitleHint := False; - FShowCellHint := False; FAlternateRowColor := clNone; FAlternateRowFontColor := clNone; FSelectColumn := scDataBase; - FTitleArrow := False; - FPostOnEnterKey := False; - FLeaveOnEnterKey := True; FAutoSizeColumnIndex := JvGridResizeProportionally; FSelectColumnsDialogStrings := TJvSelectDialogColumnStrings.Create; // Note to users: the second line may not compile on non western european @@ -947,16 +941,11 @@ '\xE9', '\xE8', '\xEA', '\xEB', '\xF4', '\xF6', '\xFB', '\xF9', '\xE2', '\xE0', '\xE4', '\xEE', '\xEF', '\xE7']; FControls := TJvDBGridControls.Create(Self); - FCurrentControl := nil; - FOldControlWndProc := nil; - FBooleanFieldToEdit := nil; FBooleanEditor := True; FStringForTrue := '1'; FStringForFalse := '0'; - FWordWrap := False; FAutoSizeRows := True; - FRowResize := False; FRowsHeight := DefaultRowHeight; FTitleRowHeight := RowHeights[0]; FShowMemos := True; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ob...@us...> - 2006-11-22 21:11:13
|
Revision: 11028 http://svn.sourceforge.net/jvcl/?rev=11028&view=rev Author: obones Date: 2006-11-22 13:11:12 -0800 (Wed, 22 Nov 2006) Log Message: ----------- LeaveOnEnterKey goes to the edit controls Modified Paths: -------------- trunk/jvcl/run/JvDBGrid.pas Modified: trunk/jvcl/run/JvDBGrid.pas =================================================================== --- trunk/jvcl/run/JvDBGrid.pas 2006-11-22 21:10:35 UTC (rev 11027) +++ trunk/jvcl/run/JvDBGrid.pas 2006-11-22 21:11:12 UTC (rev 11028) @@ -169,6 +169,7 @@ FControlName: string; FFieldName: string; FFitCell: TJvDBGridControlSize; + FLeaveOnEnterKey: Boolean; FDesignWidth: Integer; // value set when needed by PlaceControl FDesignHeight: Integer; // value set when needed by PlaceControl public @@ -177,6 +178,7 @@ property ControlName: string read FControlName write FControlName; property FieldName: string read FFieldName write FFieldName; property FitCell: TJvDBGridControlSize read FFitCell write FFitCell; + property LeaveOnEnterKey: Boolean read FLeaveOnEnterKey write FLeaveOnEnterKey; end; TJvDBGridControls = class(TCollection) @@ -234,7 +236,6 @@ FShowTitleHint: Boolean; FSortedField: string; FPostOnEnterKey: Boolean; - FLeaveOnEnterKey: Boolean; FSelectColumn: TSelectColumn; FTitleArrow: Boolean; FTitlePopup: TPopupMenu; @@ -485,7 +486,6 @@ property AlternateRowColor: TColor read FAlternateRowColor write SetAlternateRowColor default clNone; property AlternateRowFontColor: TColor read FAlternateRowFontColor write SetAlternateRowFontColor default clNone; property PostOnEnterKey: Boolean read FPostOnEnterKey write FPostOnEnterKey default False; - property LeaveOnEnterKey: Boolean read FLeaveOnEnterKey write FLeaveOnEnterKey default False; property SelectColumn: TSelectColumn read FSelectColumn write FSelectColumn default scDataBase; property SortedField: string read FSortedField write SetSortedField; property ShowTitleHint: Boolean read FShowTitleHint write FShowTitleHint default False; @@ -840,6 +840,7 @@ ControlName := TJvDBGridControl(Source).ControlName; FieldName := TJvDBGridControl(Source).FieldName; FitCell := TJvDBGridControl(Source).FitCell; + LeaveOnEnterKey := TJvDBGridControl(Source).LeaveOnEnterKey; FDesignWidth := 0; FDesignHeight := 0; end @@ -1625,7 +1626,7 @@ function UseDefaultEditor: Boolean; const - ude_DEFAULT_EDITOR = 0; + ude_DEFAULT_EDITOR = 0; ude_BOOLEAN_EDITOR = 1; ude_CUSTOM_EDITOR = 2; var @@ -1644,7 +1645,7 @@ // Is there an editor for the selected field ? F := SelectedField; Control := FControls.ControlByField(F.FieldName); - if Assigned(Control) then //and not (dgAlwaysShowEditor in inherited Options) then + if Assigned(Control) then Editor := ude_CUSTOM_EDITOR else if EditWithBoolBox(F) then @@ -1719,8 +1720,6 @@ end; begin - //if (dgAlwaysShowEditor in inherited Options) and not EditorMode then - // ShowEditor; Result := False; if (inherited CanEditShow) and Assigned(SelectedField) and (SelectedIndex >= 0) and (SelectedIndex < Columns.Count) then @@ -2355,7 +2354,7 @@ end; begin - if (Key = Cr) and (PostOnEnterKey or LeaveOnEnterKey) and not ReadOnly then + if (Key = Cr) and PostOnEnterKey and not ReadOnly then DataSource.DataSet.CheckBrowseMode; if not Assigned(FCurrentControl) then @@ -3936,13 +3935,15 @@ procedure TJvDBGrid.ControlWndProc(var Message: TMessage); var EscapeKey: Boolean; + CurrentEditor: TJvDBGridControl; begin if Message.Msg = WM_CHAR then begin if not DoKeyPress(TWMChar(Message)) then with TWMKey(Message) do begin - if (CharCode = VK_RETURN) and (PostOnEnterKey or LeaveOnEnterKey) then + CurrentEditor := FControls.ControlByName(FCurrentControl.Name); + if (CharCode = VK_RETURN) and (PostOnEnterKey or CurrentEditor.LeaveOnEnterKey) then begin CloseControl; if PostOnEnterKey then This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ob...@us...> - 2006-11-23 20:22:28
|
Revision: 11030 http://svn.sourceforge.net/jvcl/?rev=11030&view=rev Author: obones Date: 2006-11-23 12:22:24 -0800 (Thu, 23 Nov 2006) Log Message: ----------- Added ReduceFlicker property. Modified Paths: -------------- trunk/jvcl/run/JvDBGrid.pas Modified: trunk/jvcl/run/JvDBGrid.pas =================================================================== --- trunk/jvcl/run/JvDBGrid.pas 2006-11-23 12:09:20 UTC (rev 11029) +++ trunk/jvcl/run/JvDBGrid.pas 2006-11-23 20:22:24 UTC (rev 11030) @@ -207,6 +207,7 @@ FSizingOfs: Integer; FShowGlyphs: Boolean; FDefaultDrawing: Boolean; + FReduceFlicker: Boolean; FMultiSelect: Boolean; FSelecting: Boolean; FClearSelection: Boolean; @@ -228,7 +229,6 @@ {$ENDIF COMPILER6_UP} FOnTitleBtnClick: TTitleClickEvent; FOnTitleBtnDblClick: TTitleClickEvent; - FOnShowEditor: TJvDBEditShowEvent; FOnTopLeftChanged: TNotifyEvent; FSelectionAnchor: TBookmarkStr; FOnDrawColumnTitle: TDrawColumnTitleEvent; @@ -256,6 +256,11 @@ FOnShowCellHint: TJvCellHintEvent; FCharList: TCharList; FScrollBars: TScrollStyle; + FWordWrap: Boolean; + FChangeLinks: TObjectList; + FShowMemos: Boolean; + FOnShowEditor: TJvDBEditShowEvent; + FAlwaysShowEditor: Boolean; FControls: TJvDBGridControls; FCurrentControl: TWinControl; @@ -265,24 +270,18 @@ FOnCheckIfBooleanField: TJvDBCheckIfBooleanFieldEvent; FStringForTrue: string; FStringForFalse: string; - FWordWrap: Boolean; FAutoSizeRows: Boolean; FRowResize: Boolean; FRowsHeight: Integer; FTitleRowHeight: Integer; - - FChangeLinks: TObjectList; - FShowMemos: Boolean; - FAlwaysShowEditor: Boolean; - procedure SetAutoSizeRows(Value: Boolean); procedure SetRowResize(Value: Boolean); procedure SetRowsHeight(Value: Integer); procedure SetTitleRowHeight(Value: Integer); + procedure WriteCellText(ARect: TRect; DX, DY: Integer; const Text: string; Alignment: TAlignment; ARightToLeft: Boolean; Options: Integer = 0); - function GetImageIndex(Field: TField): Integer; procedure SetShowGlyphs(Value: Boolean); function GetStorage: TJvFormPlacement; @@ -507,6 +506,8 @@ property EditControls: TJvDBGridControls read FControls write SetControls; { AutoSizeRows: are rows resized automatically ? } property AutoSizeRows: Boolean read FAutoSizeRows write SetAutoSizeRows default True; + { ReduceFlicker: improve (but slow) the display when painting/scrolling ? } + property ReduceFlicker: Boolean read FReduceFlicker write FReduceFlicker default True; { RowResize: can rows be resized with the mouse ? } property RowResize: Boolean read FRowResize write SetRowResize default False; { RowsHeight: data rows height } @@ -928,6 +929,7 @@ FIniLink.OnLoad := IniLoad; FShowGlyphs := True; FDefaultDrawing := True; + FReduceFlicker := True; FClearSelection := True; FAutoAppend := True; FAlternateRowColor := clNone; @@ -2492,47 +2494,70 @@ DrawBitmap: TBitmap; B, R: TRect; Hold, DrawOptions: Integer; + + procedure DrawAText(CellCanvas: TCanvas); + begin + with CellCanvas do + begin + if Canvas.CanvasOrientation = coRightToLeft then + ChangeBiDiModeAlignment(Alignment); + DrawOptions := AlignFlags[Alignment] or RTL[ARightToLeft]; + if Options <> 0 then + DrawOptions := DrawOptions or Options; + if WordWrap then + DrawOptions := DrawOptions or DT_WORDBREAK; + if Brush.Style <> bsSolid then + Brush.Style := bsSolid; + FillRect(B); + SetBkMode(Handle, TRANSPARENT); + Windows.DrawText(Handle, PChar(Text), Length(Text), R, DrawOptions); + end; + end; + begin - DrawBitmap := TBitmap.Create; - try - DrawBitmap.Canvas.Lock; + if ReduceFlicker then + begin + // Use offscreen bitmap to eliminate flicker and + // brush origin tics in painting / scrolling. + DrawBitmap := TBitmap.Create; try - with DrawBitmap, ARect do { Use offscreen bitmap to eliminate flicker and } - begin { brush origin tics in painting / scrolling. } - Width := Max(Width, Right - Left); - Height := Max(Height, Bottom - Top); - R := Classes.Rect(DX, DY, Right - Left - 1, Bottom - Top - 1); - B := Classes.Rect(0, 0, Right - Left, Bottom - Top); - end; - with DrawBitmap.Canvas do - begin - Font := Canvas.Font; - Font.Color := Canvas.Font.Color; - Brush := Canvas.Brush; - Brush.Style := bsSolid; - FillRect(B); - SetBkMode(Handle, TRANSPARENT); + DrawBitmap.Canvas.Lock; + try + with DrawBitmap, ARect do + begin + Width := Max(Width, Right - Left); + Height := Max(Height, Bottom - Top); + R := Classes.Rect(DX, DY, Right - Left - 1, Bottom - Top - 1); + B := Classes.Rect(0, 0, Right - Left, Bottom - Top); + end; + with DrawBitmap.Canvas do + begin + Font := Canvas.Font; + Font.Color := Canvas.Font.Color; + Brush := Canvas.Brush; + end; + DrawAText(DrawBitmap.Canvas); if Canvas.CanvasOrientation = coRightToLeft then - ChangeBiDiModeAlignment(Alignment); - DrawOptions := AlignFlags[Alignment] or RTL[ARightToLeft]; - if Options <> 0 then - DrawOptions := DrawOptions or Options; - if WordWrap then - DrawOptions := DrawOptions or DT_WORDBREAK; - Windows.DrawText(Handle, PChar(Text), Length(Text), R, DrawOptions); + begin + Hold := ARect.Left; + ARect.Left := ARect.Right; + ARect.Right := Hold; + end; + Canvas.CopyRect(ARect, DrawBitmap.Canvas, B); + finally + DrawBitmap.Canvas.Unlock; end; - if Canvas.CanvasOrientation = coRightToLeft then - begin - Hold := ARect.Left; - ARect.Left := ARect.Right; - ARect.Right := Hold; - end; - Canvas.CopyRect(ARect, DrawBitmap.Canvas, B); finally - DrawBitmap.Canvas.Unlock; + DrawBitmap.Free; end; - finally - DrawBitmap.Free; + end + else + begin + // No offscreen bitmap - The display is faster but flickers + with ARect do + R := Classes.Rect(Left + DX, Top + DY, Right - 1, Bottom - 1); + B := ARect; + DrawAText(Canvas); end; end; @@ -2915,8 +2940,7 @@ {$IFDEF COMPILER10_UP} or (Field is TWideMemoField) {$ENDIF COMPILER10_UP} - ) - ) then + )) then begin if Assigned(Field.OnGetText) then MemoText := Field.DisplayText This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ou...@us...> - 2007-01-04 17:47:43
|
Revision: 11134 http://svn.sourceforge.net/jvcl/?rev=11134&view=rev Author: outchy Date: 2007-01-04 09:47:41 -0800 (Thu, 04 Jan 2007) Log Message: ----------- Mantis 3411 TJvDBGrid Feature Idea "AllowDelete" Modified Paths: -------------- trunk/jvcl/run/JvDBGrid.pas Modified: trunk/jvcl/run/JvDBGrid.pas =================================================================== --- trunk/jvcl/run/JvDBGrid.pas 2007-01-04 17:37:35 UTC (rev 11133) +++ trunk/jvcl/run/JvDBGrid.pas 2007-01-04 17:47:41 UTC (rev 11134) @@ -275,6 +275,7 @@ FRowResize: Boolean; FRowsHeight: Integer; FTitleRowHeight: Integer; + FCanDelete: Boolean; procedure SetAutoSizeRows(Value: Boolean); procedure SetRowResize(Value: Boolean); procedure SetRowsHeight(Value: Integer); @@ -501,6 +502,8 @@ default JvGridResizeProportionally; property SelectColumnsDialogStrings: TJvSelectDialogColumnStrings read FSelectColumnsDialogStrings write SetSelectColumnsDialogStrings; + { Allows user to delete things using the "del" key } + property CanDelete: Boolean read FCanDelete write FCanDelete default True; { EditControls: list of controls used to edit data } property EditControls: TJvDBGridControls read FControls write SetControls; @@ -952,6 +955,7 @@ FRowsHeight := DefaultRowHeight; FTitleRowHeight := RowHeights[0]; FShowMemos := True; + FCanDelete := True; end; destructor TJvDBGrid.Destroy; @@ -1377,7 +1381,7 @@ Exit; end; VK_DELETE: - if not ReadOnly and CanModify and not + if CanDelete and not ReadOnly and CanModify and not IsDataSetEmpty(DataLink.DataSet) then begin if DeletePrompt then This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ah...@us...> - 2007-01-16 19:00:51
|
Revision: 11153 http://svn.sourceforge.net/jvcl/?rev=11153&view=rev Author: ahuser Date: 2007-01-16 11:00:50 -0800 (Tue, 16 Jan 2007) Log Message: ----------- Added LeaveOnUpDownKey property to TJvDBGridControl that handles if the Up/Down key should be redirected to the grid Modified Paths: -------------- trunk/jvcl/run/JvDBGrid.pas Modified: trunk/jvcl/run/JvDBGrid.pas =================================================================== --- trunk/jvcl/run/JvDBGrid.pas 2007-01-16 18:57:52 UTC (rev 11152) +++ trunk/jvcl/run/JvDBGrid.pas 2007-01-16 19:00:50 UTC (rev 11153) @@ -170,6 +170,7 @@ FFieldName: string; FFitCell: TJvDBGridControlSize; FLeaveOnEnterKey: Boolean; + FLeaveOnUpDownKey: Boolean; FDesignWidth: Integer; // value set when needed by PlaceControl FDesignHeight: Integer; // value set when needed by PlaceControl public @@ -178,7 +179,8 @@ property ControlName: string read FControlName write FControlName; property FieldName: string read FFieldName write FFieldName; property FitCell: TJvDBGridControlSize read FFitCell write FFitCell; - property LeaveOnEnterKey: Boolean read FLeaveOnEnterKey write FLeaveOnEnterKey; + property LeaveOnEnterKey: Boolean read FLeaveOnEnterKey write FLeaveOnEnterKey default False; + property LeaveOnUpDownKey: Boolean read FLeaveOnUpDownKey write FLeaveOnUpDownKey default False; end; TJvDBGridControls = class(TCollection) @@ -845,6 +847,7 @@ FieldName := TJvDBGridControl(Source).FieldName; FitCell := TJvDBGridControl(Source).FitCell; LeaveOnEnterKey := TJvDBGridControl(Source).LeaveOnEnterKey; + LeaveOnUpDownKey := TJvDBGridControl(Source).LeaveOnUpDownKey; FDesignWidth := 0; FDesignHeight := 0; end @@ -3993,11 +3996,32 @@ end; end else + if Message.Msg = WM_KEYDOWN then begin + with TWMKey(Message) do + begin + CurrentEditor := FControls.ControlByName(FCurrentControl.Name); + if (CurrentEditor <> nil) and CurrentEditor.LeaveOnUpDownKey and + ((CharCode = VK_UP) or (CharCode = VK_DOWN)) and (KeyDataToShiftState(KeyData) = []) then + begin + CloseControl; + DataSource.DataSet.CheckBrowseMode; + PostMessage(Handle, WM_KEYDOWN, CharCode, KeyData); + end + else + FOldControlWndProc(Message); + end; + end + else + begin FOldControlWndProc(Message); case Message.Msg Of WM_GETDLGCODE: - Message.Result := Message.Result or DLGC_WANTTAB; + begin + CurrentEditor := FControls.ControlByName(FCurrentControl.Name); + if (CurrentEditor <> nil) and CurrentEditor.LeaveOnUpDownKey then + Message.Result := Message.Result or DLGC_WANTTAB or DLGC_WANTARROWS; + end; CM_EXIT: HideCurrentControl; end; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ah...@us...> - 2007-05-16 16:38:03
|
Revision: 11293 http://svn.sourceforge.net/jvcl/?rev=11293&view=rev Author: ahuser Date: 2007-05-16 09:37:58 -0700 (Wed, 16 May 2007) Log Message: ----------- Ability to override the DrawCell method. Modified Paths: -------------- trunk/jvcl/run/JvDBGrid.pas Modified: trunk/jvcl/run/JvDBGrid.pas =================================================================== --- trunk/jvcl/run/JvDBGrid.pas 2007-05-16 16:35:39 UTC (rev 11292) +++ trunk/jvcl/run/JvDBGrid.pas 2007-05-16 16:37:58 UTC (rev 11293) @@ -352,6 +352,8 @@ procedure CheckTitleButton(ACol, ARow: Longint; var Enabled: Boolean); dynamic; function SortMarkerAssigned(const AFieldName: string): Boolean; dynamic; function ChangeSortMarker(const Value: TSortMarker): Boolean; + procedure CallDrawCellEvent(ACol, ARow: Longint; ARect: TRect; AState: TGridDrawState); + procedure DoDrawCell(ACol, ARow: Longint; ARect: TRect; AState: TGridDrawState); virtual; procedure DrawCell(ACol, ARow: Longint; ARect: TRect; AState: TGridDrawState); override; procedure DrawDataCell(const Rect: TRect; Field: TField; State: TGridDrawState); override; { obsolete from Delphi 2.0 } @@ -2568,6 +2570,16 @@ end; end; +procedure TJvDBGrid.CallDrawCellEvent(ACol, ARow: Longint; ARect: TRect; AState: TGridDrawState); +begin + inherited DrawCell(ACol, ARow, ARect, AState); +end; + +procedure TJvDBGrid.DoDrawCell(ACol, ARow: Longint; ARect: TRect; AState: TGridDrawState); +begin + CallDrawCellEvent(ACol, ARow, ARect, AState); +end; + procedure TJvDBGrid.DrawCell(ACol, ARow: Longint; ARect: TRect; AState: TGridDrawState); const EdgeFlag: array [Boolean] of UINT = (BDR_RAISEDINNER, BDR_SUNKENINNER); @@ -2728,7 +2740,7 @@ Canvas.Font := DrawColumn.Font; end; - inherited DrawCell(ACol, ARow, ARect, AState); + DoDrawCell(ACol, ARow, ARect, AState); with ARect do if FTitleArrow and (ARow = 0) and (ACol = 0) and (dgIndicator in Options) and (dgTitles in Options) then This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ah...@us...> - 2007-08-17 15:30:53
|
Revision: 11464 http://jvcl.svn.sourceforge.net/jvcl/?rev=11464&view=rev Author: ahuser Date: 2007-08-17 08:30:38 -0700 (Fri, 17 Aug 2007) Log Message: ----------- - Added XP Theming support (property UseXPThemes default True) - Added Bugfix for TDBGrid.ColWidthsChanged (LayoutChanged/DataChange is invoked for every columns regardless if it was resized or not) Modified Paths: -------------- trunk/jvcl/run/JvDBGrid.pas Modified: trunk/jvcl/run/JvDBGrid.pas =================================================================== --- trunk/jvcl/run/JvDBGrid.pas 2007-08-17 14:16:10 UTC (rev 11463) +++ trunk/jvcl/run/JvDBGrid.pas 2007-08-17 15:30:38 UTC (rev 11464) @@ -198,6 +198,14 @@ TCharList = set of Char; + TJvGridPaintInfo = record + MouseInCol: Integer; // the column that the mouse is in + ColPressed: Boolean; // a column has been pressed + ColPressedIdx: Integer; // idx of the pressed column + ColSizing: Boolean; // currently sizing a column + ColMoving: Boolean; // currently moving a column + end; + TJvDBGrid = class(TJvExDBGrid) private FAutoSort: Boolean; @@ -276,13 +284,21 @@ FRowsHeight: Integer; FTitleRowHeight: Integer; FCanDelete: Boolean; + + // XP Theming + FUseXPThemes: Boolean; + FPaintInfo: TJvGridPaintInfo; + FCell: TGridCoord; // currently selected cell + procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER; + procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE; + procedure SetAutoSizeRows(Value: Boolean); procedure SetRowResize(Value: Boolean); procedure SetRowsHeight(Value: Integer); procedure SetTitleRowHeight(Value: Integer); procedure WriteCellText(ARect: TRect; DX, DY: Integer; const Text: string; - Alignment: TAlignment; ARightToLeft: Boolean; Options: Integer = 0); + Alignment: TAlignment; ARightToLeft: Boolean; FixCell: Boolean; Options: Integer = 0); function GetImageIndex(Field: TField): Integer; procedure SetShowGlyphs(Value: Boolean); function GetStorage: TJvFormPlacement; @@ -337,6 +353,13 @@ function DoKeyPress(var Msg: TWMChar): Boolean; procedure SetWordWrap(Value: Boolean); procedure NotifyLayoutChange(const Kind: TJvDBGridLayoutChangeKind); + + // XP Theming + procedure SetUseXPThemes(Value: Boolean); + {$IFDEF JVCLThemesEnabled} + function ColumnOffset: Integer; // col offset used for calculations. Is 1 if indicator is being displayed + function ValidCell(ACell: TGridCoord): Boolean; + {$ENDIF JVCLThemesEnabled} protected FCurrentDrawRow: Integer; procedure MouseLeave(Control: TControl); override; @@ -355,6 +378,11 @@ procedure DrawCell(ACol, ARow: Longint; ARect: TRect; AState: TGridDrawState); override; procedure DrawDataCell(const Rect: TRect; Field: TField; State: TGridDrawState); override; { obsolete from Delphi 2.0 } + + function BeginColumnDrag(var Origin: Integer; var Destination: Integer; const MousePt: TPoint): Boolean; override; + procedure ColumnMoved(FromIndex: Integer; ToIndex: Integer); override; + function AllowTitleClick: Boolean; virtual; + {$IFDEF COMPILER6_UP} procedure EditChanged(Sender: TObject); dynamic; {$ENDIF COMPILER6_UP} @@ -384,6 +412,7 @@ var ASortMarker: TBitmap; IsDown: Boolean; var Offset: Integer; var DefaultDrawText, DefaultDrawSortMarker: Boolean); virtual; procedure ColEnter; override; + procedure ColExit; override; function DoMouseWheel(Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint): Boolean; override; @@ -408,12 +437,10 @@ procedure PlaceControl(Control: TWinControl; ACol, ARow: Integer); virtual; procedure RowHeightsChanged; override; - public constructor Create(AOwner: TComponent); override; destructor Destroy; override; - procedure DefaultDataCellDraw(const Rect: TRect; Field: TField; - State: TGridDrawState); + procedure DefaultDataCellDraw(const Rect: TRect; Field: TField; State: TGridDrawState); procedure DisableScroll; procedure EnableScroll; function ScrollDisabled: Boolean; @@ -431,6 +458,7 @@ procedure CloseControl; // Hide the current edit control and give the focus to the grid procedure InitializeColumnsWidth(const MinWidth, MaxWidth: Integer; const DisplayWholeTitle: Boolean; const FixedWidths: array of Integer); + procedure MouseWheelHandler(var Message: TMessage); override; procedure RegisterLayoutChangeLink(Link: TJvDBGridLayoutChangeLink); procedure UnregisterLayoutChangeLink(Link: TJvDBGridLayoutChangeLink); @@ -525,6 +553,8 @@ property ShowMemos: Boolean read FShowMemos write SetShowMemos default True; { BooleanEditor: if true, a checkbox is used to edit boolean fields } property BooleanEditor: Boolean read FBooleanEditor write SetBooleanEditor default True; + { UseXPThemes: if true, the grid is painted in the active XP theme style } + property UseXPThemes: Boolean read FUseXPThemes write SetUseXPThemes default True; { OnCheckIfBooleanField: event used to treat integer fields and string fields as boolean fields } property OnCheckIfBooleanField: TJvDBCheckIfBooleanFieldEvent read FOnCheckIfBooleanField write FOnCheckIfBooleanField; { OnColumnResized: event triggered each time a column is resized with the mouse } @@ -553,7 +583,10 @@ JvDBLookup, {$ENDIF COMPILER6_UP} JvVCL5Utils, - JvConsts, JvResources, JvDBUtils, JvJCLUtils, JvJVCLUtils, + JvConsts, JvResources, JvThemes, JvDBUtils, JvJCLUtils, JvJVCLUtils, + {$IFDEF COMPILER7_UP} + GraphUtil, // => TScrollDirection, DrawArray(must be after JvJVCLUtils) + {$ENDIF COMPILER7_UP} JvAppStoragePropertyEngineDB, JvDBGridSelectColumnForm; {$R JvDBGrid.res} @@ -562,6 +595,9 @@ TBookmarks = class(TBookmarkList); TGridPicture = (gpBlob, gpMemo, gpPicture, gpOle, gpObject, gpData, gpNotEmpty, gpMarkDown, gpMarkUp, gpChecked, gpUnChecked, gpPopup); + {$IFNDEF COMPILER7_UP} + TScrollDirection = (sdLeft, sdRight, sdUp, sdDown); + {$ENDIF ~COMPILER7_UP} const GridBmpNames: array [TGridPicture] of PChar = @@ -610,6 +646,40 @@ Grid.InvalidateCell(I, Row); end; +{$IFNDEF COMPILER7_UP} + {$IFDEF JVCLThemesEnabled} +procedure DrawArrow(ACanvas: TCanvas; Direction: TScrollDirection; + Location: TPoint; Size: Integer); +const + ArrowPts: array[TScrollDirection, 0..2] of TPoint = + (((X:1; Y:0), (X:0; Y:1), (X:1; Y:2)), + ((X:0; Y:0), (X:1; Y:1), (X:0; Y:2)), + ((X:0; Y:1), (X:1; Y:0), (X:2; Y:1)), + ((X:0; Y:0), (X:1; Y:1), (X:2; Y:0))); +var + I: Integer; + Pts: array[0..2] of TPoint; + OldWidth: Integer; + OldColor: TColor; +begin + if ACanvas = nil then exit; + OldColor := ACanvas.Brush.Color; + ACanvas.Brush.Color := ACanvas.Pen.Color; + Move(ArrowPts[Direction], Pts, SizeOf(Pts)); + for I := 0 to 2 do + Pts[I] := Point(Pts[I].x * Size + Location.X, Pts[I].y * Size + Location.Y); + with ACanvas do + begin + OldWidth := Pen.Width; + Pen.Width := 1; + Polygon(Pts); + Pen.Width := OldWidth; + Brush.Color := OldColor; + end; +end; + {$ENDIF JVCLThemesEnabled} +{$ENDIF ~COMPILER7_UP} + //=== { TInternalInplaceEdit } =============================================== {$IFDEF COMPILER6_UP} @@ -959,6 +1029,16 @@ FTitleRowHeight := RowHeights[0]; FShowMemos := True; FCanDelete := True; + + // XP Theming + FUseXPThemes := True; + FPaintInfo.ColPressed := False; + FPaintInfo.MouseInCol := -1; + FPaintInfo.ColPressedIdx := -1; + FPaintInfo.ColMoving := False; + FPaintInfo.ColSizing := False; + FCell.X := -1; + FCell.Y := -1; end; destructor TJvDBGrid.Destroy; @@ -1174,11 +1254,57 @@ end; procedure TJvDBGrid.ColWidthsChanged; + + { VCL BUGFIX: + The TCustomDBGrid.ColWidthsChanged method invokes DataLink.LayoutChanged/DataSource.OnDataChange + for every column, regardless if it was resized or not. + + This causes a db-aware component or an DataSource.OnDataChange event handler to + be triggered very often even if there was no actual change. This becomes worse + when the assigned DataSet contains many visible fields (=>columns) and the DataChange + event is used to update details data. } + + procedure FixedInheritedColWidthsChanged; + var + I, ChangeCount: Integer; + begin + //inherited TCustomGrid.ColWidthsChanged; + inherited RowHeightsChanged; // does the same that TCustomGrid.ColWidthsChanged does. + + if (Datalink.Active or (Columns.State = csCustomized)) and + AcquireLayoutLock then + try + ChangeCount := 0; + for I := IndicatorOffset to ColCount - 1 do + if Columns[I - IndicatorOffset].Width <> ColWidths[I] then + begin + Inc(ChangeCount); + if ChangeCount > 1 then // we have what we need + Break; + end; + if ChangeCount > 0 then + begin + if ChangeCount > 1 then + DataLink.DataSet.DisableControls; + try + for I := IndicatorOffset to ColCount - 1 do + if Columns[I - IndicatorOffset].Width <> ColWidths[I] then + Columns[I - IndicatorOffset].Width := ColWidths[I]; + finally + if ChangeCount > 1 then + DataLink.DataSet.EnableControls; + end; + end; + finally + EndLayout; + end; + end; + var ACol: Longint; begin ACol := Col; - inherited ColWidthsChanged; + FixedInheritedColWidthsChanged; if DataLink.Active and (FixedCols > 0) then Col := Min(Max(CalcLeftColumn, ACol), ColCount - 1); DoMinColWidth; @@ -1580,6 +1706,15 @@ procedure TJvDBGrid.Paint; begin + {$IFDEF JVCLThemesEnabled} + if UseXPThemes and ThemeServices.ThemesEnabled then + begin + // reset the inherited options but remove the goFixedVertLine and goFixedHorzLine values + // as that causes the titles and indicator panels to have a black border + TStringGrid(Self).Options := TStringGrid(Self).Options - [goFixedVertLine]; + TStringGrid(Self).Options := TStringGrid(Self).Options - [goFixedHorzLine]; + end; + {$ENDIF JVCLThemesEnabled} inherited Paint; if not (csDesigning in ComponentState) and (dgRowSelect in Options) and DefaultDrawing and Focused then @@ -2033,6 +2168,31 @@ end; FAcquireFocus := False; try + { XP Theming } + {$IFDEF JVCLThemesEnabled} + if not (csDesigning in ComponentState) and UseXPThemes and ThemeServices.ThemesEnabled then + begin + FPaintInfo.ColSizing := Sizing(X, Y); + if not FPaintInfo.ColSizing then + begin + FPaintInfo.ColPressedIdx := -1; + FPaintInfo.ColPressed := False; + if AllowTitleClick then + FPaintInfo.MouseInCol := -1; + Cell := MouseCoord(X, Y); + if (Button = mbLeft) and (Cell.X >= IndicatorOffset) and (Cell.Y >= 0) and AllowTitleClick then + begin + FPaintInfo.ColPressed := Cell.Y < TitleOffset; + if FPaintInfo.ColPressed then + FPaintInfo.ColPressedIdx := Columns[RawToDataColumn(Cell.X)].Index + ColumnOffset; + if ValidCell(FCell) then + InvalidateCell(FCell.X, FCell.Y); + FCell := Cell; + end; + end; + end; + {$ENDIF JVCLThemesEnabled} + if Sizing(X, Y) then inherited MouseDown(Button, Shift, X, Y) else @@ -2188,7 +2348,39 @@ end; procedure TJvDBGrid.MouseMove(Shift: TShiftState; X, Y: Integer); +{$IFDEF JVCLThemesEnabled} +var + Cell: TGridCoord; + MouseInCol: Integer; +{$ENDIF JVCLThemesEnabled} begin + { XP Theming } + {$IFDEF JVCLThemesEnabled} + if not (csDesigning in ComponentState) and UseXPThemes and ThemeServices.ThemesEnabled then + begin + if not FPaintInfo.ColSizing and not FPaintInfo.ColMoving then + begin + FPaintInfo.MouseInCol := -1; + Cell := MouseCoord(X, Y); + if (Cell.X >= IndicatorOffset) and (Cell.Y >= 0) then + begin + if (Cell.Y < TitleOffset) then + begin + MouseInCol := Columns[RawToDataColumn(Cell.X)].Index + ColumnOffset; + if MouseInCol <> FPaintInfo.MouseInCol then + begin + InvalidateCell(Cell.X, Cell.Y); + FPaintInfo.MouseInCol := MouseInCol; + end; + end + end; + if ValidCell(FCell) then + InvalidateCell(FCell.X, FCell.Y); + FCell := Cell; + end; + end; + {$ENDIF JVCLThemesEnabled} + if FTracking then TrackButton(X, Y); inherited MouseMove(Shift, X, Y); @@ -2252,6 +2444,17 @@ else inherited MouseUp(Button, Shift, X, Y); DoAutoSizeColumns; + + { XP Theming } + {$IFDEF JVCLThemesEnabled} + if UseXPThemes and ThemeServices.ThemesEnabled then + begin + FPaintInfo.ColSizing := False; + FPaintInfo.ColMoving := False; + FPaintInfo.ColPressedIdx := -1; + Invalidate; + end; + {$ENDIF JVCLThemesEnabled} end; procedure TJvDBGrid.WMRButtonUp(var Msg: TWMMouse); @@ -2490,7 +2693,7 @@ end; procedure TJvDBGrid.WriteCellText(ARect: TRect; DX, DY: Integer; const Text: string; - Alignment: TAlignment; ARightToLeft: Boolean; Options: Integer = 0); + Alignment: TAlignment; ARightToLeft: Boolean; FixCell: Boolean; Options: Integer = 0); const AlignFlags: array [TAlignment] of Integer = (DT_LEFT or DT_EXPANDTABS or DT_NOPREFIX, @@ -2513,16 +2716,21 @@ DrawOptions := DrawOptions or Options; if WordWrap then DrawOptions := DrawOptions or DT_WORDBREAK; - if Brush.Style <> bsSolid then - Brush.Style := bsSolid; - FillRect(B); + {$IFDEF JVCLThemesEnabled} + if not FixCell or not (UseXPThemes and ThemeServices.ThemesEnabled) then + {$ENDIF JVCLThemesEnabled} + begin + if Brush.Style <> bsSolid then + Brush.Style := bsSolid; + FillRect(B); + end; SetBkMode(Handle, TRANSPARENT); Windows.DrawText(Handle, PChar(Text), Length(Text), R, DrawOptions); end; end; begin - if ReduceFlicker then + if ReduceFlicker {$IFDEF JVCLThemesEnabled} and not (UseXPThemes and ThemeServices.ThemesEnabled) {$ENDIF} then begin // Use offscreen bitmap to eliminate flicker and // brush origin tics in painting / scrolling. @@ -2574,8 +2782,76 @@ end; procedure TJvDBGrid.DoDrawCell(ACol, ARow: Longint; ARect: TRect; AState: TGridDrawState); +{$IFDEF JVCLThemesEnabled} +const + ArrowDirection: array [TCanvasOrientation] of TScrollDirection = (sdRight, sdLeft); +var + Details: TThemedElementDetails; + lCaptionRect: TRect; + lCellRect: TRect; + PenRecall: TPenRecall; +{$ENDIF JVCLThemesEnabled} begin - CallDrawCellEvent(ACol, ARow, ARect, AState); + {$IFDEF JVCLThemesEnabled} + if UseXPThemes and ThemeServices.ThemesEnabled then + begin + lCellRect := ARect; + if ThemeServices.ThemesEnabled and (ARow = 0) and (ACol - ColumnOffset >= 0) and (dgTitles in Options) then + begin + lCaptionRect := ARect; + if not FPaintInfo.ColPressed or (FPaintInfo.ColPressedIdx <> ACol) then + begin + if (FPaintInfo.MouseInCol = -1) or (FPaintInfo.MouseInCol <> ACol) or (csDesigning in ComponentState) then + Details := ThemeServices.GetElementDetails(thHeaderItemNormal) + else + Details := ThemeServices.GetElementDetails(thHeaderItemHot); + lCellRect.Right := lCellRect.Right + 1; + lCellRect.Bottom := lCellRect.Bottom + 1; + end + else if AllowTitleClick then + begin + Details := ThemeServices.GetElementDetails(thHeaderItemPressed); + InflateRect(lCaptionRect, -1, 1); + end + else + begin + if FPaintInfo.MouseInCol = ACol then + Details := ThemeServices.GetElementDetails(thHeaderItemHot) + else + Details := ThemeServices.GetElementDetails(thHeaderItemNormal); + end; + ThemeServices.DrawElement(Canvas.Handle, Details, lCellRect); + end + else if (ACol = 0) and (dgIndicator in Options) and ThemeServices.ThemesEnabled then + begin + // indicator column + if ARow < TitleOffset then + Details := ThemeServices.GetElementDetails(thHeaderItemNormal) + else + Details := ThemeServices.GetElementDetails(thHeaderRoot); + lCellRect.Right := lCellRect.Right + 1; + lCellRect.Bottom := lCellRect.Bottom + 1; + ThemeServices.DrawElement(Canvas.Handle, Details, lCellRect); + // draw the indicator + if (Datalink.Active) and (ARow - TitleOffset = Datalink.ActiveRecord) then + begin + PenRecall := TPenRecall.Create(Canvas.Pen); + try + Canvas.Pen.Color := clWhite; + DrawArrow(Canvas, ArrowDirection[Canvas.CanvasOrientation], Point(lCellRect.Left + 4, lCellRect.Top + 3), 5); + Canvas.Pen.Color := clBlack; + DrawArrow(Canvas, ArrowDirection[Canvas.CanvasOrientation], Point(lCellRect.Left + 3, lCellRect.Top + 3), 5); + finally + PenRecall.Free; + end; + end; + end + else + CallDrawCellEvent(ACol, ARow, ARect, AState); + end + else + {$ENDIF JVCLThemesEnabled} + CallDrawCellEvent(ACol, ARow, ARect, AState); end; procedure TJvDBGrid.DrawCell(ACol, ARow: Longint; ARect: TRect; AState: TGridDrawState); @@ -2723,7 +2999,7 @@ else TitleSpace := TextRect.Bottom - TextRect.Top - Canvas.TextHeight('^g'); WriteCellText(TextRect, MinOffs, Max(MinOffs, TitleSpace div 2), Caption, Alignment, - IsRightToLeft, TitleOptions); + IsRightToLeft, True, TitleOptions); end; end; @@ -2828,9 +3104,14 @@ Down := FPressed and FTitleButtons and (FPressedCol = DrawColumn); if FTitleButtons or ([dgRowLines, dgColLines] * Options = [dgRowLines, dgColLines]) then begin - DrawEdge(Canvas.Handle, TitleRect, EdgeFlag[Down], BF_BOTTOMRIGHT); - DrawEdge(Canvas.Handle, TitleRect, EdgeFlag[Down], BF_TOPLEFT); - InflateRect(TitleRect, -1, -1); + {$IFDEF JVCLThemesEnabled} + if not (UseXPThemes and ThemeServices.ThemesEnabled) then + {$ENDIF JVCLThemesEnabled} + begin + DrawEdge(Canvas.Handle, TitleRect, EdgeFlag[Down], BF_BOTTOMRIGHT); + DrawEdge(Canvas.Handle, TitleRect, EdgeFlag[Down], BF_TOPLEFT); + InflateRect(TitleRect, -1, -1); + end; end; Canvas.Font := TitleFont; Canvas.Brush.Color := FixedColor; @@ -2860,7 +3141,12 @@ OffsetRect(TitleRect, 1, 1); ARect := TitleRect; if (DataLink = nil) or not DataLink.Active then - Canvas.FillRect(TitleRect) + begin + {$IFDEF JVCLThemesEnabled} + if not (UseXPThemes and ThemeServices.ThemesEnabled) then + {$ENDIF JVCLThemesEnabled} + Canvas.FillRect(TitleRect); + end else if DrawColumn <> nil then begin @@ -2904,7 +3190,7 @@ end; end else - WriteCellText(ARect, MinOffs, MinOffs, '', taLeftJustify, IsRightToLeft); + WriteCellText(ARect, MinOffs, MinOffs, '', taLeftJustify, False, IsRightToLeft); finally Canvas.Pen.Color := SavePen; end; @@ -2960,7 +3246,7 @@ else MemoText := Field.AsString; WriteCellText(Rect, 2, 2, MemoText, Column.Alignment, - UseRightToLeftAlignmentForField(Field, Column.Alignment)); + UseRightToLeftAlignmentForField(Field, Column.Alignment), False); end else DefaultDrawColumnCell(Rect, DataCol, Column, State); @@ -3651,6 +3937,16 @@ begin FTitleColumn := Column; inherited TitleClick(Column); + if AllowTitleClick then + begin + FPaintInfo.ColPressed := False; + FPaintInfo.ColPressedIdx := -1; + {$IFDEF JVCLThemesEnabled} + if UseXPThemes and ThemeServices.ThemesEnabled then + if ValidCell(FCell) then + InvalidateCell(FCell.X, FCell.Y); + {$ENDIF JVCLThemesEnabled} + end; end; procedure TJvDBGrid.SetSortedField(const Value: string); @@ -4128,6 +4424,106 @@ end; end; +procedure TJvDBGrid.SetUseXPThemes(Value: Boolean); +begin + if Value <> FUseXPThemes then + begin + FUseXPThemes := Value; + Invalidate; + end; +end; + +{$IFDEF JVCLThemesEnabled} +function TJvDBGrid.ColumnOffset: Integer; +begin + if dgIndicator in Options then + Result := 1 + else + Result := 0; +end; + +function TJvDBGrid.ValidCell(ACell: TGridCoord): Boolean; +begin + Result := (ACell.X <> -1) and (ACell.Y <> -1); +end; +{$ENDIF JVCLThemesEnabled} + +function TJvDBGrid.BeginColumnDrag(var Origin: Integer; var Destination: Integer; const MousePt: TPoint): Boolean; +begin + Result := inherited BeginColumnDrag(Origin, Destination, MousePt); + FPaintInfo.ColMoving := Result; +end; + +procedure TJvDBGrid.CMMouseEnter(var Message: TMessage); +{$IFDEF JVCLThemesEnabled} +var + Cell: TGridCoord; + lPt: TPoint; +{$ENDIF JVCLThemesEnabled} +begin + {$IFDEF JVCLThemesEnabled} + lPt := Point(Mouse.CursorPos.X, Mouse.CursorPos.Y); + Cell := MouseCoord(lPt.X, lPt.Y); + if UseXPThemes and ThemeServices.ThemesEnabled then + if (dgTitles in Options) and (Cell.Y = 0) then + InvalidateCell(Cell.X, Cell.Y); + {$ENDIF JVCLThemesEnabled} +end; + +procedure TJvDBGrid.CMMouseLeave(var Message: TMessage); +begin + {$IFDEF JVCLThemesEnabled} + if UseXPThemes and ThemeServices.ThemesEnabled then + if ValidCell(FCell) then + InvalidateCell(FCell.X, FCell.Y); + {$ENDIF JVCLThemesEnabled} + FCell.X := -1; + FCell.Y := -1; + FPaintInfo.MouseInCol := -1; + FPaintInfo.ColPressedIdx := -1; +end; + +procedure TJvDBGrid.ColExit; +begin + inherited ColExit; + FPaintInfo.MouseInCol := -1; + {$IFDEF JVCLThemesEnabled} + if UseXPThemes and ThemeServices.ThemesEnabled then + if ValidCell(FCell) then + InvalidateCell(FCell.X, FCell.Y); + {$ENDIF JVCLThemesEnabled} +end; + +function TJvDBGrid.AllowTitleClick: Boolean; +begin + Result := Assigned(FOnTitleBtnClick) or AutoSort; +end; + +procedure TJvDBGrid.ColumnMoved(FromIndex, ToIndex: Integer); +begin + inherited ColumnMoved(FromIndex, ToIndex); + FPaintInfo.ColMoving := False; + {$IFDEF JVCLThemesEnabled} + if UseXPThemes and ThemeServices.ThemesEnabled then + Invalidate; + {$ENDIF JVCLThemesEnabled} +end; + +procedure TJvDBGrid.MouseWheelHandler(var Message: TMessage); +var + LastRow: Integer; +begin + { Fix MouseWheel indicator bug } + LastRow := Row; + inherited MouseWheelHandler(Message); + if (Row <> LastRow) and (DataLink <> nil) and DataLink.Active then + begin + DataLink.DataSet.MoveBy(Row - LastRow); + InvalidateCell(IndicatorOffset - 1, LastRow); + end; +end; + + initialization {$IFDEF UNITVERSIONING} RegisterUnitVersion(HInstance, UnitVersioning); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |