 d44499f582
			
		
	
	
		d44499f582
		
	
	
	
	
		
			
			git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@6050 8e941d3f-bd1b-0410-a28a-d453659cc2b4
		
			
				
	
	
		
			169 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			ObjectPascal
		
	
	
	
	
	
			
		
		
	
	
			169 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			ObjectPascal
		
	
	
	
	
	
| {*****************************************************************************
 | |
|                                SemaphorDBGrid.pas
 | |
|                              -------------------
 | |
|                              Lazarus LCL Component
 | |
|                           First Release: January 2005
 | |
| 
 | |
|   Author: Salvatore Coppola - Calabria (Italy)
 | |
|  *****************************************************************************
 | |
|   See the file COPYING.modifiedLGPL.txt, included in this distribution,
 | |
|   for details about the license.
 | |
|  *****************************************************************************
 | |
|  }
 | |
| 
 | |
| {ABSTRACT
 | |
| SEMAFORO (Semaphor) in Italian Language means Traffic Lights. If Semaphor is
 | |
| set to true,when TSemaphorDBGrid detect in a non Fixed Cells a string like
 | |
| StringGreen or StringYellow or StringRed, it show a colored sign in the
 | |
| corrispondent cells (shape choosed in SemaphorShape). It can be Case Sensitive
 | |
| (SemaphorCaseSensitive). If Semaphor is false, nothing happen.
 | |
| 
 | |
| That's all
 | |
| Enjoy! Salvatore
 | |
| }
 | |
| 
 | |
| unit SemaphorDBGrids;
 | |
| 
 | |
| {$mode objfpc} {$H+}
 | |
| 
 | |
| interface
 | |
| 
 | |
| uses
 | |
|   Classes, SysUtils, LResources, LCLProc, LCLIntf, LCLType, Forms, Controls,
 | |
|   Graphics, Dialogs, Grids, DBGrids;
 | |
| 
 | |
| type
 | |
|   TSemaphorShape=(ssTopBar, ssBottomBar, ssLeftBar, ssRigthBar, ssTopLeftSquare,
 | |
|                   ssTopRigthSquare, ssBottomLeftSquare, ssBottomRigth, ssDisk);
 | |
| 
 | |
| type
 | |
|   TSemaphorDBGrid = class(TdbGrid)
 | |
|   private
 | |
|     FSemaphor : boolean;
 | |
|     FStringRed : string;
 | |
|     FStringYellow : string;
 | |
|     FStringGreen : string;
 | |
|     FSemaphorShape : TSemaphorShape;
 | |
|     FSemaphorCaseSensitive : boolean;
 | |
|     procedure SetSemaphorShape(Value : TSemaphorShape);
 | |
|   protected
 | |
|     procedure DrawCell(aCol,aRow: Integer; aRect: TRect; aState:TGridDrawState); override;
 | |
|   public
 | |
|     constructor Create(AOwner: TComponent); override;
 | |
|   published
 | |
|     property Semaphor : boolean read FSemaphor write FSemaphor;
 | |
|     property StringRed : string read FStringRed write FStringRed;
 | |
|     property StringYellow : string read FStringYellow write FStringYellow;
 | |
|     property StringGreen : string read FStringGreen write FStringGreen;
 | |
|     property SemaphorShape : TSemaphorShape read FSemaphorShape write SetSemaphorShape;
 | |
|     property SemaphorCaseSensitive : boolean read FSemaphorCaseSensitive write FSemaphorCaseSensitive;
 | |
|   end;
 | |
| 
 | |
| procedure Register;
 | |
| 
 | |
| implementation
 | |
| 
 | |
| {$R semaphordbgridicon.res}
 | |
| 
 | |
| procedure TSemaphorDBGrid.SetSemaphorShape(Value : TSemaphorShape);
 | |
| begin
 | |
|   FSemaphorShape:=Value;
 | |
|   invalidate
 | |
| end;
 | |
| 
 | |
| procedure TSemaphorDBGrid.DrawCell(aCol,aRow: Integer; aRect: TRect; aState:TGridDrawState);
 | |
| const dr=4;
 | |
| var Rect:TRect;
 | |
| begin
 | |
|   inherited DrawCell(aCol,aRow,aRect,aState);
 | |
|   if not Semaphor then
 | |
|     exit;
 | |
|   Rect:=CellRect(aCol,aRow);
 | |
|   case SemaphorShape of
 | |
|     ssTopBar: Rect.Bottom:=Rect.Top+dr-1;
 | |
|     ssBottomBar:Rect.Top:=Rect.Bottom-dr;
 | |
|     ssLeftBar:Rect.Right:=rect.Left+dr-1;
 | |
|     ssRigthBar:Rect.Left:=rect.Right-dr;
 | |
|     ssTopLeftSquare:begin
 | |
|       Rect.Bottom:=Rect.Top+dr;
 | |
|       Rect.Right:=Rect.Left+dr;
 | |
|     end;
 | |
|     ssTopRigthSquare:begin
 | |
|       Rect.Bottom:=Rect.Top+dr;
 | |
|       Rect.Left:=Rect.Right-dr-1;
 | |
|     end;
 | |
|     ssBottomLeftSquare:begin
 | |
|       Rect.Top:=Rect.Bottom-dr-1;
 | |
|       Rect.Right:=Rect.Left+dr;
 | |
|     end;
 | |
|     ssBottomRigth:begin
 | |
|       Rect.Top:=Rect.Bottom-dr-1;
 | |
|       Rect.Left:=Rect.Right-dr-1;
 | |
|     end;
 | |
|     ssDisk:begin
 | |
|       Rect.Bottom:=Rect.Top+2*dr-1;
 | |
|       Rect.Left:=Rect.Right-2*dr+1-1;
 | |
|     end;
 | |
|   end;
 | |
|   case SemaphorCaseSensitive of
 | |
|     false: if (UpperCase(GetEditText(aCol,aRow))=UpperCase(StringGreen))and((aCol>FixedCols-1)and(aRow>FixedRows-1)) then begin
 | |
|       Canvas.Brush.Color:=clGreen;
 | |
|       if not(SemaphorShape=ssDisk) then
 | |
|         Canvas.Rectangle(Rect)
 | |
|       else
 | |
|         Canvas.Ellipse(Rect);
 | |
|     end else if(UpperCase(GetEditText(aCol,aRow))=UpperCase(StringRed))and((aCol>FixedCols-1)and(aRow>FixedRows-1)) then begin
 | |
|       Canvas.Brush.Color:=clRed;
 | |
|       if not(SemaphorShape=ssDisk) then
 | |
|         Canvas.Rectangle(Rect)
 | |
|       else
 | |
|         Canvas.Ellipse(Rect);
 | |
|     end else if(UpperCase( GetEditText(aCol,aRow))=UpperCase(StringYellow))and((aCol>FixedCols-1)and(aRow>FixedRows-1)) then begin
 | |
|       Canvas.Brush.Color:=clYellow;
 | |
|       if not(SemaphorShape=ssDisk) then
 | |
|         Canvas.Rectangle(Rect)
 | |
|       else
 | |
|         Canvas.Ellipse(Rect);
 | |
|     end;
 | |
|     true: if (GetEditText(aCol,aRow)=StringGreen)and((aCol>FixedCols-1)and(aRow>FixedRows-1)) then begin
 | |
|       Canvas.Brush.Color:=clGreen;
 | |
|       if not(SemaphorShape=ssDisk) then
 | |
|         Canvas.Rectangle(Rect)
 | |
|       else
 | |
|         Canvas.Ellipse(Rect);
 | |
|     end else if(GetEditText(aCol,aRow)=StringRed)and((aCol>FixedCols-1)and(aRow>FixedRows-1)) then begin
 | |
|       Canvas.Brush.Color:=clRed;
 | |
|       if not(SemaphorShape=ssDisk) then
 | |
|         Canvas.Rectangle(Rect)
 | |
|       else
 | |
|         Canvas.Ellipse(Rect);
 | |
|     end else if(GetEditText(aCol,aRow)=StringYellow)and((aCol>FixedCols-1)and(aRow>FixedRows-1)) then begin
 | |
|       Canvas.Brush.Color:=clYellow;
 | |
|       if not(SemaphorShape=ssDisk) then
 | |
|         Canvas.Rectangle(Rect)
 | |
|       else
 | |
|         Canvas.Ellipse(Rect);
 | |
|     end;
 | |
|   end;
 | |
| end;
 | |
| 
 | |
| constructor TSemaphorDBGrid.Create(AOwner: TComponent);
 | |
| begin
 | |
|   inherited Create(AOwner);
 | |
|   Semaphor:=False;
 | |
|   StringRed:='no';
 | |
|   StringYellow:='maybe';
 | |
|   StringGreen:='yes';
 | |
|   SemaphorShape:=ssDisk;
 | |
|   SemaphorCaseSensitive:=False;
 | |
| end;
 | |
| 
 | |
| procedure Register;
 | |
| begin
 | |
|   RegisterComponents('Data Controls',[TSemaphorDBGrid]);
 | |
| end;
 | |
| 
 | |
| end.
 | |
| 
 | |
| 
 |