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

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


Category

  김영대(2003-03-05 21:17:14, Hit : 5849, Vote : 1334
 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   [윈도우즈 API] TaskBar의 다양한 기능제어  김영대 2003/03/07 4991 1351
730   [시스템] 오직 하나의 프로그램만 실행...  김영대 2003/03/04 5019 1351
729   [시스템] 파일(들)을 클립보드로 복사하여 탐색기에서 붙여넣기 하기  김영대 2003/04/10 5297 1350
728   [일반/컴포넌트] StringGrid - multiline text  김영대 2003/03/07 5780 1349
727   [윈도우즈 API] 델파이에서 시간을 기다리는 함수  김영대 2003/03/04 5867 1349
726   [일반/컴포넌트] Search and Select  김영대 2004/08/03 5154 1348
725   [일반/컴포넌트] TStringGrid 인쇄하기  김영대 2003/03/07 5424 1347
724   [일반/컴포넌트] 리스트뷰에서 동적으로 칼럼삭제하기  김영대 2003/03/05 5002 1347
723   [COM/OLE] 윈도우즈 "검색: 파일 또는 폴더" 화면  김영대 2004/07/25 4829 1345
722   [시스템] 내 프로그램의 실행 우선순의 바꾸기  김영대 2004/07/24 4947 1344
721   [COM/OLE] TWebBrowser 에서 새창을 열때 cookie 공유되게 하기  김영대 2004/11/24 6576 1343
720   [시스템] Windows NT 에서 한글 NT인지 영문 NT인지 구분하는 방법  김영대 2003/03/04 5149 1343
719   [윈도우즈 API] 바탕화면의 모든 창 최소화하기  김영대 2006/02/28 5581 1341
718   [일반/컴포넌트] 투명한 Bitmaps 인쇄  김영대 2003/03/07 5722 1340
717   [시스템] DOS 명령어 실행하고 결과 받아오기 (Win2k,XP)  김영대 2004/08/03 5608 1339
716   [일반/컴포넌트] 폼에 자석효과 주기 (Delphi 6 이하)  김영대 2005/08/04 6361 1338
715   [일반/컴포넌트] 실행파일에서 잃어버린 DFM 파일 뽑아내기  김영대 2004/08/17 5008 1338
714   [시스템] CD-ROM 문 열기/닫기  김영대 2003/03/04 4730 1338
713   [윈도우즈 API] 세로 타이틀바 만들기  김영대 2004/08/04 4896 1337
712   [일반/컴포넌트] 문자열의 암호화(Password 처리) & INI 파일  김영대 2003/03/06 5864 1337
711   [시스템] IP address 바꾸기  김영대 2003/03/07 5351 1336
710   [시스템] System, User, GDI Resource  김영대 2003/03/07 4591 1334
  [데이터베이스] DB그리드 Row Height를 조절할 수 있는 콤포넌트  김영대 2003/03/05 5849 1334
708   [데이터베이스] Save DBGrid To Excel  김영대 2003/03/06 6027 1333
707   [윈도우즈 API] 프린터 스풀러에 대기중인 job의 수  김영대 2003/03/04 4531 1333
706   [시스템] 조합중인 한글 얻기  김영대 2004/09/06 5986 1332
705   [일반/컴포넌트] StringGrid의 중간에 제목 Cell 두기  김영대 2003/03/07 5278 1332
704   [일반/컴포넌트] DateTimePicker 의 표시형식(format) 바꾸기  김영대 2003/03/04 6204 1331
703   [COM/OLE] TWebBrowser에 직접 HTML 소스코드 넣기  김영대 2004/12/26 6396 1330
702   [시스템] Sleep 중에도 타이머 이벤트 발생시키기  김영대 2004/08/09 5744 1330
701   [시스템] PrintScreen 키가 눌렸는지 검사하기  김영대 2003/03/04 4271 1330
700   [네트웍/인터넷] Internet에 연결중인지 여부를 알려면...  김영대 2003/03/04 5171 1330
699   [시스템] 윈도우즈 사용자 계정 정보 구하기  김영대 2004/08/03 5149 1328
698   [윈도우즈 API] 윈도우즈 탐색기와의 연동  김영대 2003/03/04 5482 1328
697   [시스템] 프린터의 "용지 공급" 리스트 구하기  김영대 2003/03/07 4620 1327
696   [윈도우즈 API] 폼의 최대/최소화 막기  김영대 2003/03/06 4943 1327
695   [일반/컴포넌트] WMF 를 BMP 로 변환하기  김영대 2003/03/07 4317 1326
694   [윈도우즈 API] 작업표시줄이 자동 숨김인지 검사  김영대 2003/03/04 5035 1326
693   [윈도우즈 API] 키보드의 임의키 발생  김영대 2003/03/04 5213 1326
692   [윈도우즈 API] 도구모음 Bar는 어떻게 만드는지...  김영대 2003/03/04 4693 1325

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

Copyright 1999-2019 Zeroboard / skin by zero