From: <ah...@us...> - 2007-05-16 16:04:03
|
Revision: 11284 http://svn.sourceforge.net/jvcl/?rev=11284&view=rev Author: ahuser Date: 2007-05-16 09:03:58 -0700 (Wed, 16 May 2007) Log Message: ----------- New component TJvDBCheckBox introducing the OnChange/OnChanging events Added Paths: ----------- trunk/jvcl/run/JvDBCheckBox.pas Added: trunk/jvcl/run/JvDBCheckBox.pas =================================================================== --- trunk/jvcl/run/JvDBCheckBox.pas (rev 0) +++ trunk/jvcl/run/JvDBCheckBox.pas 2007-05-16 16:03:58 UTC (rev 11284) @@ -0,0 +1,125 @@ +unit JvDBCheckBox; + +interface + +uses + Windows, Messages, SysUtils, Classes, Contnrs, Controls, DB, DBCtrls; + +type + TJvDBCheckBoxChangingEvent = procedure(Sender: TObject; var Allow: Boolean) of object; + + TJvDBCheckBox = class(TDBCheckBox) + private + FDirectEdit: Boolean; + FOnChange: TNotifyEvent; + FOnChanging: TJvDBCheckBoxChangingEvent; + FOrgDataChange: TNotifyEvent; + FDataChanging: Integer; + FToggling: Integer; + FOldValue: Variant; + + procedure CMExit(var Message: TCMExit); message CM_EXIT; + function GetDataLink: TFieldDataLink; + protected + procedure DataChange(Sender: TObject); + + procedure Toggle; override; + function DoChanging: Boolean; virtual; + procedure DoChange; virtual; + procedure KeyPress(var Key: Char); override; + public + constructor Create(AOwner: TComponent); override; + published + property DirectEdit: Boolean read FDirectEdit write FDirectEdit default True; + property OnChanging: TJvDBCheckBoxChangingEvent read FOnChanging write FOnChanging; + property OnChange: TNotifyEvent read FOnChange write FOnChange; + end; + +implementation + +{ TJvDBCheckBox } + +constructor TJvDBCheckBox.Create(AOwner: TComponent); +begin + inherited Create(AOwner); + FDirectEdit := True; + FOrgDataChange := GetDataLink.OnDataChange; + GetDataLink.OnDataChange := DataChange; +end; + +procedure TJvDBCheckBox.CMExit(var Message: TCMExit); +begin + if DirectEdit then + begin + if GetDataLink.Active and (Field <> nil) then + FOldValue := Field.Value; + DoExit // TWinControl behaviour + end + else + inherited; +end; + +procedure TJvDBCheckBox.DoChange; +begin + if Assigned(FOnChange) then + FOnChange(Self); +end; + +procedure TJvDBCheckBox.Toggle; +begin + if FDataChanging = 0 then + begin + if not DoChanging then + Exit; + end; + + Inc(FToggling); + try + inherited Toggle; + if DirectEdit and (FDataChanging = 0) and GetDataLink.Active and GetDataLink.Editing then + GetDataLink.UpdateRecord; + finally + Dec(FToggling); + end; + + if FDataChanging = 0 then + DoChange; +end; + +function TJvDBCheckBox.DoChanging: Boolean; +begin + Result := True; + if Assigned(FOnChanging) then + FOnChanging(Self, Result); +end; + +function TJvDBCheckBox.GetDataLink: TFieldDataLink; +begin + Result := TFieldDataLink(Perform(CM_GETDATALINK, 0, 0)); +end; + +procedure TJvDBCheckBox.KeyPress(var Key: Char); +begin + case Key of + #27: + if (Field <> nil) and (DataSource <> nil) and (DataSource.State in [dsEdit, dsInsert]) then + Field.Value := FOldValue; + end; + inherited KeyPress(Key); +end; + +procedure TJvDBCheckBox.DataChange(Sender: TObject); +begin + if (FToggling = 0) and DirectEdit and (Field <> nil) then + FOldValue := Field.Value; + + Inc(FDataChanging); + try + FOrgDataChange(Sender); + finally + Dec(FDataChanging); + end; +end; + +end. + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ah...@us...> - 2007-09-17 23:13:49
|
Revision: 11512 http://jvcl.svn.sourceforge.net/jvcl/?rev=11512&view=rev Author: ahuser Date: 2007-09-17 16:13:41 -0700 (Mon, 17 Sep 2007) Log Message: ----------- Fixed missing MPL header and UnitVersioning Modified Paths: -------------- trunk/jvcl/run/JvDBCheckBox.pas Modified: trunk/jvcl/run/JvDBCheckBox.pas =================================================================== --- trunk/jvcl/run/JvDBCheckBox.pas 2007-09-17 22:37:27 UTC (rev 11511) +++ trunk/jvcl/run/JvDBCheckBox.pas 2007-09-17 23:13:41 UTC (rev 11512) @@ -1,8 +1,38 @@ +{----------------------------------------------------------------------------- +The contents of this file are subject to the Mozilla Public License +Version 1.1 (the "License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at +http://www.mozilla.org/MPL/MPL-1.1.html + +Software distributed under the License is distributed on an "AS IS" basis, +WITHOUT WARRANTY OF ANY KIND, either expressed or implied. See the License for +the specific language governing rights and limitations under the License. + +The Original Code is: JvDBCheckBox.pas, released on 2007-06-28. + +The Initial Developer of the Original Code is Andreas Hausladen [andreas dott hausladen att gmx dott de] +Portions created by Andreas Hausladen are Copyright (C) 2007 Andreas Hausladen. +All Rights Reserved. + +Contributor(s): - + +You may retrieve the latest version of this file at the Project JEDI's JVCL home page, +located at http://jvcl.sourceforge.net + +Known Issues: +-----------------------------------------------------------------------------} +// $Id$ + unit JvDBCheckBox; +{$I jvcl.inc} + interface uses + {$IFDEF UNITVERSIONING} + JclUnitVersioning, + {$ENDIF UNITVERSIONING} Windows, Messages, SysUtils, Classes, Contnrs, Controls, DB, DBCtrls; type @@ -35,6 +65,16 @@ property OnChange: TNotifyEvent read FOnChange write FOnChange; end; +{$IFDEF UNITVERSIONING} +const + UnitVersioning: TUnitVersionInfo = ( + RCSfile: '$URL$'; + Revision: '$Revision$'; + Date: '$Date$'; + LogPath: 'JVCL\run' + ); +{$ENDIF UNITVERSIONING} + implementation { TJvDBCheckBox } @@ -121,5 +161,14 @@ end; end; +initialization + {$IFDEF UNITVERSIONING} + RegisterUnitVersion(HInstance, UnitVersioning); + {$ENDIF UNITVERSIONING} + +finalization + {$IFDEF UNITVERSIONING} + UnregisterUnitVersion(HInstance); + {$ENDIF UNITVERSIONING} + end. - This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |