::: 델파이 Tip&Trick :::

델파이 Tip&Trick 성격에 맞지 않는 광고,비방,질문의 글은 즉시 삭제하며
내용을 복사하여 사용할 경우 반드시 이곳(http://www.howto.pe.kr)을 출처로 명시하여 주세요


Category

  김영대(2003-03-05 21:17:14, Hit : 5066, Vote : 1321
 DB그리드 Row Height를 조절할 수 있는 콤포넌트

// 작성자: 전철호 (jeonchulho@hanmail.net)

// 만든이 : 전철호
// 상업용으로 사용하는것을 금합니다.
// 주기능 : Row Height를 조절할수 있고 Fixed 타이틀 부분
//          Caption을 가운데 정열을 하고 데이타 Row부분에서는
//          숫자 필드를 자동으로 오른쪽 정열을 하게 합니다.
//          그리고 데이타 필드 타입을 한글명으로 출력해줍니다.
unit jgrid;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Grids, DBGrids, DB;

type
TCellStyle = (csRaised,csLowered,csNone);

type
TJeonDBGrid = class(TDBGrid)
private
   { Private declarations }
   function DispTypeValue(Fld : TField) : string;
   procedure DrawRect(ARect : TRect; p1, p2 : TColor);
   procedure CellRaised(ARect : TRect);
   procedure CellLowered(ARect : TRect);
protected
   { Protected declarations }
   FDBgridSize  : integer;
   FSelColor    : TColor;
   FCellStyle   : TCellStyle;
   FOnMouseDown : TMouseEvent;
   FOnMouseUp   : TMouseEvent;

   procedure SetCellStyle(value : TCellStyle);
   procedure LayoutChanged; override;
   procedure DrawDataCell(const Rect: TRect; Field : TField; State: TGridDrawState); override;
   procedure DrawCell(ACol, ARow: Longint;ARect: TRect; AState: TGridDrawState); override;
   procedure ColumnMoved(FromIndex, ToIndex: Longint); override;
   procedure ColWidthsChanged; override;
public
   { Public declarations }
   GridRow : integer;
   GridCol : integer;
   constructor Create(AOwner : TComponent); override;
   destructor Destroy; override;
   procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
   procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
published
   { Published declarations }
   property Cellstyle : TCellStyle read FCellStyle write SetCellStyle;
   property SelColor  : TColor read FSelColor write FSelColor default clWhite;
   property DbgridSize : integer read FDBgridSize write FDBgridSize default 8;
   property OnMouseDown read FOnMouseDown write FOnMouseDown;
   property OnMouseUp read FOnMouseUp write FOnMouseUp;
end;

procedure Register;

implementation

procedure Register;
begin
RegisterComponents('인력개발', [TJeonDBGrid]);
RegisterClasses([TJeonDBGrid]);
end;

constructor TJeonDBGrid.Create(AOwner : TComponent);
begin
inherited Create(AOwner);
GridRow   := 0;
GridCol   := 0;
Color     := clBtnFace;
SelColor  := clWhite;
CellStyle := csNone;
DbGridSize:= 8;
end;

destructor TJeonDBGrid.Destroy;
begin
inherited Destroy;
end;

function TJeonDBGrid.DispTypeValue(Fld : TField) : string;
begin
case Fld.DataType of
   ftUnknown : Result := Fld.DisplayText;
   ftString  : Result := Fld.DisplayText;
   ftSmallint,ftInteger
             : Result := FormatFloat('#,##0 ',Fld.AsInteger);
   ftWord, ftFloat
             : Result := FormatFloat('#,##0 ',Fld.AsFloat);
   ftBoolean : if Fld.AsBoolean then
                 Result := '(참)'
               else
                 Result := '(거짓)';
   ftCurrency, ftBCD, ftDate, ftTime, ftDateTime, ftBytes, ftVarBytes, ftAutoInc
             : Result := Fld.DisplayText;
   ftBlob    : Result := '(그림)';
   ftMemo    : Result := '(메모)';
   ftGraphic : Result := '(그래픽)';
   ftFmtMemo : Result := '[메모]';
   ftParadoxOle : Result := 'Ole(Paradox)';
   ftDBaseOle   : Result := 'Ole(Base)';
   ftTypedBinary: Result := '(이진자료)';
   ftCursor     : Result := '커서(Oracle)';
end;
end;

procedure TJeonDBGrid.Layoutchanged;
var
nRow : integer;
begin
if FDBgridSize <> 0 then
   DefaultRowHeight := Canvas.TextHeight('W') + FDBgridSize
else
   DefaultRowHeight := Canvas.TextHeight('W') + 8;
if dgTitles in Options then
   RowHeights[0] := Canvas.TextHeight('W') + 8;

TopLeftChanged;

nRow := Height div DefaultRowHeight;

if DataLink.Active then
   begin
     if nRow <= RowCount then
       RowCount := nRow;
   end;
inherited Layoutchanged;
Invalidate;
end;

procedure TJeonDBGrid.ColumnMoved(FromIndex, ToIndex: Longint);
begin
inherited ColumnMoved(FromIndex, ToIndex);
Layoutchanged;
end;

procedure TJeonDBGrid.ColWidthsChanged;
begin
inherited ColWidthsChanged;
Layoutchanged;
end;

procedure TJeonDBGrid.DrawRect(ARect : TRect; p1, p2 : TColor);
begin
with ARect do
   begin
     Canvas.Pen.Color := p1 ;
     Canvas.PolyLine([Point(Left+1, Bottom - 1), Point(Left+1, Top), Point(Right, Top)]);
     Canvas.Pen.Color := p2;
     Canvas.PolyLine([Point(Left+1, Bottom - 1), Point(right,bottom-1), Point(Right, Top)]);
   end;
end;

procedure TJeonDBGrid.CellRaised(ARect : TRect);
begin
DrawRect(ARect,clWindow,clBtnShadow);
end;

procedure TJeonDBGrid.CellLowered(ARect : TRect);
begin
DrawRect(ARect,clBtnShadow,clWindow);
end;

procedure TJeonDBGrid.DrawCell(ACol, ARow: Longint; ARect: TRect; AState: TGridDrawState);
var
Rect       : TRect;
Col        : integer;
Caption    : string;
begin
inherited DrawCell(ACol, ARow, ARect, AState);
GridRow := ARow;
GridCol := ACol;

if (ARow = 0) and ([dgTitles] * Options = [dgTitles]) then
   begin
     Canvas.Brush.Color := FixedColor;
     Canvas.Font        := Self.TitleFont;
     Canvas.FillRect(ARect);

     Rect       := ARect;
     Rect.Top   := Rect.Top  + 4;
     Rect.Left  := Rect.Left + 4;

     if ([dgIndicator] * Options = [dgIndicator]) then
       Col := ACol-1
     else
       Col := ACol;

     if Assigned(Fields[Col]) then
       Caption := Fields[Col].DisplayLabel
     else
       Caption := '제목';

     DrawText(Canvas.Handle, PChar(Caption), StrLen(PChar(Caption)), Rect,
              (DT_EXPANDTABS or DT_VCENTER or DT_CENTER) );

     case FCellStyle of
      csRaised  : CellRaised(ARect);
      csLowered : CellLowered(ARect);
     end;
   end;
end;

procedure TJeonDBGrid.DrawDataCell(Const Rect: TRect; Field : TField; State: TGridDrawState);
var
ARect      : TRect;
Caption    : string;
const
Alignments : array[TAlignment] of Word = (DT_LEFT, DT_RIGHT, DT_CENTER);
begin
inherited DrawDataCell(Rect,Field,State);

if gdSelected in State then
   Canvas.Brush.Color := SelColor
else
   Canvas.Brush.Color := Color;

Canvas.Font := Self.Font;
Canvas.FillRect(Rect);

Caption := DispTypeValue(Field);

ARect      := Rect;
ARect.Top  := Rect.Top + 4;
ARect.Left := Rect.Left + 4;

if (Field.DataType = ftSmallint) or
    (Field.DataType = ftInteger) or
    (Field.DataType = ftWord) or
    (Field.DataType = ftFloat) then
  Field.Alignment := taRightJustify;

DrawText(Canvas.Handle, PChar(Caption), StrLen(PChar(Caption)), ARect,
          (DT_EXPANDTABS or DT_VCENTER or Alignments[Field.Alignment]) );
case FCellStyle of
    csRaised  : CellRaised(Rect);
    csLowered : CellLowered(Rect);
end;
end;

procedure TJeonDBGrid.SetCellStyle(Value : TCellStyle);
begin
if (FCellstyle <> value) then
   FCellstyle:=value;
if (csDesigning in Componentstate) then
   Invalidate;
end;

procedure TJeonDBGrid.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if Assigned(FOnMouseDown) then
   FOnMouseDown(Self, Button, Shift, X, Y);
inherited MouseDown(Button, Shift, X, Y);
end;

procedure TJeonDBGrid.MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
//ShowMessage(IntToStr(DefaultRowHeight)+'/'+IntToStr(RowCount));
if Assigned(FOnMouseUp) then
   FOnMouseUp(Self, Button, Shift, X, Y);
inherited MouseUp(Button, Shift, X, Y);
end;

end.





731   [COM/OLE] 윈도우즈 "검색: 파일 또는 폴더" 화면  김영대 2004/07/25 4817 1345
730   [일반/컴포넌트] StringGrid - multiline text  김영대 2003/03/07 5751 1345
729   [시스템] 내 프로그램의 실행 우선순의 바꾸기  김영대 2004/07/24 4935 1344
728   [일반/컴포넌트] 리스트뷰에서 동적으로 칼럼삭제하기  김영대 2003/03/05 4977 1344
727   [일반/컴포넌트] TStringGrid 인쇄하기  김영대 2003/03/07 5410 1343
726   [COM/OLE] TWebBrowser 에서 새창을 열때 cookie 공유되게 하기  김영대 2004/11/24 6514 1340
725   [일반/컴포넌트] 투명한 Bitmaps 인쇄  김영대 2003/03/07 5708 1340
724   [윈도우즈 API] TaskBar의 다양한 기능제어  김영대 2003/03/07 4976 1339
723   [일반/컴포넌트] Caption Bar위에 버튼 올리기  김영대 2003/03/05 4862 1336
722   [일반/컴포넌트] 폼에 자석효과 주기 (Delphi 6 이하)  김영대 2005/08/04 6249 1335
721   [윈도우즈 API] 세로 타이틀바 만들기  김영대 2004/08/04 4876 1334
720   [시스템] DOS 명령어 실행하고 결과 받아오기 (Win2k,XP)  김영대 2004/08/03 5597 1334
719   [일반/컴포넌트] QuickReport에서 프린터 바꾸어서 출력하기  김영대 2003/03/06 5378 1334
718   [윈도우즈 API] 바탕화면의 모든 창 최소화하기  김영대 2006/02/28 5555 1333
717   [시스템] IP address 바꾸기  김영대 2003/03/07 5329 1332
716   [시스템] System, User, GDI Resource  김영대 2003/03/07 4561 1331
715   [시스템] CD-ROM 문 열기/닫기  김영대 2003/03/04 4696 1331
714   [일반/컴포넌트] 문자열의 암호화(Password 처리) & INI 파일  김영대 2003/03/06 5817 1330
713   [윈도우즈 API] 프린터 스풀러에 대기중인 job의 수  김영대 2003/03/04 4494 1330
712   [네트웍/인터넷] Internet에 연결중인지 여부를 알려면...  김영대 2003/03/04 5163 1329
711   [일반/컴포넌트] StringGrid의 중간에 제목 Cell 두기  김영대 2003/03/07 5262 1328
710   [윈도우즈 API] 폼의 최대/최소화 막기  김영대 2003/03/06 4927 1327
709   [시스템] PrintScreen 키가 눌렸는지 검사하기  김영대 2003/03/04 4260 1327
708   [시스템] 프린터의 "용지 공급" 리스트 구하기  김영대 2003/03/07 4607 1326
707   [시스템] Sleep 중에도 타이머 이벤트 발생시키기  김영대 2004/08/09 5722 1325
706   [윈도우즈 API] 작업표시줄이 자동 숨김인지 검사  김영대 2003/03/04 5005 1325
705   [윈도우즈 API] 도구모음 Bar는 어떻게 만드는지...  김영대 2003/03/04 4680 1325
704   [일반/컴포넌트] 실행파일에서 잃어버린 DFM 파일 뽑아내기  김영대 2004/08/17 4994 1324
703   [일반/컴포넌트] WMF 를 BMP 로 변환하기  김영대 2003/03/07 4299 1324
702   [일반/컴포넌트] DateTimePicker 의 표시형식(format) 바꾸기  김영대 2003/03/04 5558 1323
701   [윈도우즈 API] 키보드의 임의키 발생  김영대 2003/03/04 5146 1323
700   [일반/컴포넌트] TMemo 스크롤 다운 시키기  김영대 2003/03/29 4567 1322
699   [윈도우즈 API] 윈도우즈 탐색기와의 연동  김영대 2003/03/04 5411 1322
  [데이터베이스] DB그리드 Row Height를 조절할 수 있는 콤포넌트  김영대 2003/03/05 5066 1321
697   [윈도우즈 API] Application의 최소화시 Zooming 효과 주기  김영대 2003/03/05 4465 1321
696   [시스템] Windows NT 에서 한글 NT인지 영문 NT인지 구분하는 방법  김영대 2003/03/04 5087 1321
695   [데이터베이스] WAVE 파일을 테이블에 저장하고 불러와서 연주하기  김영대 2003/03/05 4708 1319
694   [시스템] NTFS 파일 시스템 사용 여부  김영대 2004/08/25 5025 1317
693   [일반/컴포넌트] 주어진 년,월,주의 다음주  김영대 2003/03/05 4333 1317
692   [윈도우즈 API] 파일의 확장명으로 실행화일 연결  김영대 2003/03/04 4958 1316

[1][2][3][4][5][6] 7 [8][9][10]..[25] [다음 10개]
 

Copyright 1999-2019 Zeroboard / skin by zero