반응형

uses 
shellapi; 

{...} 

Procedure ShellExecute_AndWait(FileName:String;Params:String); 
var 
exInfo : TShellExecuteInfo; 
Ph : DWORD; 
begin 
FillChar( exInfo, Sizeof(exInfo), 0 ); 
with exInfo do 
begin 
cbSize:= Sizeof( exInfo ); 
fMask := SEE_MASK_NOCLOSEPROCESS or SEE_MASK_FLAG_DDEWAIT; 
Wnd := GetActiveWindow(); 
ExInfo.lpVerb := 'open'; 
ExInfo.lpParameters := PChar(Params); 
lpFile:= PChar(FileName); 
nShow := SW_SHOWNORMAL; 
end; 
if ShellExecuteEx(@exInfo) then 
begin 
Ph := exInfo.HProcess; 
end 
else 
begin 
ShowMessage(SysErrorMessage(GetLastError)); 
exit; 
end; 
while WaitForSingleObject(ExInfo.hProcess, 50) <> WAIT_OBJECT_0 do 
Application.ProcessMessages; 
CloseHandle(Ph); 
end; 

procedure TForm1.Button1Click(Sender: TObject); 
begin 
ShellExecute_AndWait('FileName','Parameter'); 
end; 

반응형
반응형

선택한 셀 내용을 엑셀 시트에 복사하기 (CTRL+C)
셀 색상을 바꿔놓았다면 셀 선택 시 텍스트 및 바탕이 하얗게 표시 되버리는 문제가 생긴다
해결법은 아래와 같이 gdSelected = false 일경우만 색이 바뀌게 해놓으면 정상적으로 표시 된다
procedure TAForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin

    if (ARow = 0) or (ACol=0) or (ACol=0) or (ACol=1) then
    begin
      if (State <> [gdSelected]) then //선택한 셀이 하얗게 되는것을 방지
      begin
        Canvas.Brush.Color := clInactiveCaptionText;   // 배경색을 바꿀때 사용
        canvas.TextRect(Rect, Rect.Left, Rect.Top, cells[ACol, ARow]);
      end;

    end;

end;

procedure TAForm1.StringGrid1KeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var
  CopyString : String;
  item_Index,Column_Index : Integer;
  i,j : Integer;
  sRec : TGridRect;
begin
  if (Shift = [ssCtrl]) and (Key = 67)then
  begin
    CopyString := '';
    sRec := TStringGrid(Sender).Selection;
    //클립보드 복사(Ctrl+C)


    For i := sRec.Top to sRec.Bottom do
    begin

      for j:= sRec.Left to sRec.Right Do
      begin
        CopyString := CopyString + TStringGrid(Sender).Cells[j,i] +#9;
      end;
      CopyString := CopyString + #13#10;
    end;

    Clipboard.SetTextBuf(PChar(CopyString));

  end;

end;

반응형
반응형

엑셀 화일을 직접 저장하는 방법은 모르겠지만

셀에 내용입력, 셀병합, 테두리 지정, 수식 지정, 도움말 입력, 이미지 삽입등의 방법은 이 안에 다 있습니다.

필요한 부분 요약해서 참조하도록 하세요.

저도 정리를 하다 만 소스라서 좀 지저분 하기는 합니다.

그리고 부분적으로 삭제를 했기때문에

표가 아래쪽은 좀 깨질 수도 있으니 그저 참조만 하시길...

이해해 주시기 바래요.



procedure TMainForm.Button_Result_ExcelViewClick(Sender: TObject);

var

     LCID, I        : Integer;

     Sheet   : Variant;

     Format         : OleVariant;

     GraphTop, GraphLeft : Integer;

     oRng : OleVariant;

     DirName : String;

     ImageFile : String;

begin

     DirName := 'C:\...\...\' + FileNameEdit.Text;

     LCID := 0;

     If DirectoryExists(DirName) = False Then

     Begin

          CreateDir(DirName);

          ChDir(DirName);

          if IOResult <> 0 then  MessageDlg('Cannot find directory', mtWarning, [mbOk], 0);

     End;



     ExcelApplication1.Connect; //엑셀을 가동한다(InVisible 상태)

     ExcelWorkbook1.connectto(ExcelApplication1.workbooks.add(TOleEnum(xlWBATWorksheet), LCID));

     ExcelWorksheet1.connectto(ExcelWorkbook1.worksheets.item['Sheet1'] as _worksheet );

 

     //워크시트 이름 변경

     ExcelWorksheet1.Name := AnalEdit.Text;// '엑셀 쉬트 이름 '

 

     ExcelApplication1.DisplayAlerts[LCID] := False;

     ExcelApplication1.Visible[LCID] := true;

 

     Sheet := ExcelApplication1.WorkBooks[ExcelApplication1.Workbooks.Count].WorkSheets[ExcelWorkbook1.Worksheets.Count];

 

     ExcelWorksheet1.Range[Sheet.Cells[1,1],Sheet.Cells[1,1]].VerticalAlignment := xlHAlignCenter;

     ExcelWorksheet1.Range[Sheet.Cells[1,1],Sheet.Cells[1,1]].HorizontalAlignment := xlHAlignCenter;

     ExcelWorksheet1.Range[Sheet.Cells[1,1],Sheet.Cells[1,1]].Value := 'Drop Watcher Test';

     ExcelWorksheet1.Range[Sheet.Cells[1,1],Sheet.Cells[2,18]].MergeCells := true;

     ExcelWorksheet1.Range[Sheet.Cells[1,1],Sheet.Cells[2,18]].borders.LineStyle := 1;

     ExcelApplication1.Range['A1','A1'].borders.Color := clNavy;

     ExcelApplication1.Range['A1','A1'].Interior.Color := clYellow;

     ExcelApplication1.Range['A1','A1'].borders.lineStyle := 1;

     ExcelApplication1.Range[Sheet.Cells[1,1],Sheet.Cells[2,18]].font.bold := true;

     ExcelApplication1.Range[Sheet.Cells[1,1],Sheet.Cells[2,18]].font.Size := 20;

     ExcelApplication1.Range[Sheet.Cells[1,1],Sheet.Cells[2,18]].font.Name := '굴림체';

     ExcelApplication1.Range[Sheet.Cells[1,1],Sheet.Cells[2,18]].VerticalAlignment := xlHAlignCenter;

     Sheet.Cells[1,1] := 'Drop Watcher Test ';



     ExcelApplication1.Range[Sheet.Cells[ 4, 1 ],Sheet.Cells[ 81, 18 ]].font.Size := 9;

     ExcelApplication1.Range[Sheet.Cells[ 4, 1 ],Sheet.Cells[ 81, 18 ]].font.Name := '굴림체';

     ExcelApplication1.Range[Sheet.Cells[ 4, 1 ],Sheet.Cells[ 81, 18 ]].HorizontalAlignment := xlHAlignCenter;

     ExcelApplication1.Range[Sheet.Cells[ 4, 1 ],Sheet.Cells[ 81, 18 ]].VerticalAlignment := xlHAlignCenter;

     ExcelApplication1.Range[Sheet.Cells[ 4, 1 ],Sheet.Cells[ 81, 18 ]].font.bold := True;



     ExcelApplication1.Range[Sheet.Cells[ 4, 1 ],Sheet.Cells[ 261, 18 ]].font.Size := 9;

     ExcelApplication1.Range[Sheet.Cells[ 4, 1 ],Sheet.Cells[ 261, 18 ]].font.Name := '굴림체';

     ExcelApplication1.Range[Sheet.Cells[ 4, 1 ],Sheet.Cells[ 261, 18 ]].HorizontalAlignment := xlHAlignCenter;

     ExcelApplication1.Range[Sheet.Cells[ 4, 1 ],Sheet.Cells[ 261, 18 ]].VerticalAlignment := xlHAlignCenter;

     ExcelApplication1.Range[Sheet.Cells[ 4, 1 ],Sheet.Cells[ 261, 6 ]].borders.lineStyle := 1;

     ExcelApplication1.Range[Sheet.Cells[ 4, 1 ],Sheet.Cells[ 261, 18 ]].font.bold := True;



     ExcelApplication1.Range[Sheet.Cells[ 4, 1 ],Sheet.Cells[ 5, 6 ]].font.Color:= clWhite;

     ExcelApplication1.Range[Sheet.Cells[ 4, 1 ],Sheet.Cells[ 5, 6 ]].borders.Color := clNavy;

     ExcelApplication1.Range[Sheet.Cells[ 4, 1 ],Sheet.Cells[ 5, 6 ]].Interior.Color := clBlue;



     ExcelApplication1.Range[Sheet.Cells[ 6, 1 ],Sheet.Cells[ 261, 1 ]].borders.lineStyle := 1;

     ExcelApplication1.Range[Sheet.Cells[ 6, 1 ],Sheet.Cells[ 261, 1 ]].borders.Color := clBlack;

     ExcelApplication1.Range[Sheet.Cells[ 6, 1 ],Sheet.Cells[ 261, 1 ]].Interior.Color := clYellow;



     ExcelWorksheet1.Range[Sheet.Cells[4,1],Sheet.Cells[4,6]].MergeCells := true;



     GraphTop := 5;



     Sheet.Cells[ GraphTop-1, 1 ].Value := '항  목';

     Sheet.Cells[   GraphTop, 1 ].Value := 'No';

     Sheet.Cells[   GraphTop, 2 ].Value := '부  피(pl)';

     Sheet.Cells[   GraphTop, 3 ].Value := '좌  우(um)';  //Sheet.Cells[   GraphTop, 3 ].Memo := '';

     Sheet.Cells[   GraphTop, 3 ].AddComment( '수평 좌우 편차거리');

     Sheet.Cells[   GraphTop, 4 ].Value := '상  하(um)';

     Sheet.Cells[   GraphTop, 4 ].AddComment( '수직 상하 편차거리');

     Sheet.Cells[   GraphTop, 5 ].Value := '속 도(m/s)';

     Sheet.Cells[   GraphTop, 6 ].Value := '각  도(˚)';



     Format := '0';       ExcelApplication1.Range[Sheet.Cells[ 6, 1 ],Sheet.Cells[ 261, 1 ]].NumberFormatLocal   := Format;

     Format := '#,##0.0'; ExcelApplication1.Range[Sheet.Cells[ 6, 2 ],Sheet.Cells[ 261, 6 ]].NumberFormatLocal   := Format;



     For I := 1 to xxx do

     Begin

          Sheet.Cells[ GraphTop + I, 1 ].Value := Formatfloat('000', I );      // Nozzle No

          Sheet.Cells[ GraphTop + I, 2 ].Value := Formatfloat('0.0', m_DropTailVolume       [I] ); // 부피

          Sheet.Cells[ GraphTop + I, 3 ].Value := Formatfloat('0.0', m_DropTailStraightness [I] );  // 좌우편차

          Sheet.Cells[ GraphTop + I, 4 ].Value := Formatfloat('0.0', m_DropTailLength       [I] ); // 드랍간 거리

          Sheet.Cells[ GraphTop + I, 5 ].Value := Formatfloat('0.0', m_DropTailSpeed        [I] ); // 드랍 속도

          Sheet.Cells[ GraphTop + I, 6 ].Value := Formatfloat('0.0', m_DropAngle            [I] ); // 휘어짐 각도

     End;



     GraphTop := 4; GraphLeft := 8;



     ExcelWorksheet1.Range[Sheet.Cells[GraphTop  ,GraphLeft],Sheet.Cells[GraphTop+1,GraphLeft+10]].VerticalAlignment := xlHAlignCenter;

     ExcelWorksheet1.Range[Sheet.Cells[GraphTop  ,GraphLeft],Sheet.Cells[GraphTop+1,GraphLeft+10]].HorizontalAlignment := xlHAlignCenter;

     ExcelWorksheet1.Range[Sheet.Cells[GraphTop  ,GraphLeft],Sheet.Cells[GraphTop+1,GraphLeft+10]].Value := 'Test 환경';

     ExcelWorksheet1.Range[Sheet.Cells[GraphTop  ,GraphLeft],Sheet.Cells[GraphTop+1,GraphLeft+10]].MergeCells := true;

     ExcelWorksheet1.Range[Sheet.Cells[GraphTop  ,GraphLeft],Sheet.Cells[GraphTop+1,GraphLeft+10]].borders.LineStyle := 1;

     ExcelWorksheet1.Range[Sheet.Cells[GraphTop  ,GraphLeft],Sheet.Cells[GraphTop+1,GraphLeft+10]].borders.Color  := clBlack;

     ExcelWorksheet1.Range[Sheet.Cells[GraphTop  ,GraphLeft],Sheet.Cells[GraphTop+1,GraphLeft+10]].Interior.Color := clYellow;

     ExcelWorksheet1.Range[Sheet.Cells[GraphTop  ,GraphLeft],Sheet.Cells[GraphTop+6,GraphLeft+10]].borders.lineStyle := 1;

     ExcelWorksheet1.Range[Sheet.Cells[GraphTop+2,GraphLeft],Sheet.Cells[GraphTop+6,GraphLeft+10]].Interior.Color := $00DEFEE3;

     ExcelWorksheet1.Range[Sheet.Cells[GraphTop  ,GraphLeft],Sheet.Cells[GraphTop+6,GraphLeft+10]].font.bold := true;

     ExcelWorksheet1.Range[Sheet.Cells[GraphTop  ,GraphLeft],Sheet.Cells[GraphTop  ,GraphLeft+10]].font.Size := 12;

     ExcelWorksheet1.Range[Sheet.Cells[GraphTop+2,GraphLeft],Sheet.Cells[GraphTop+6,GraphLeft+10]].font.Size := 9;

     ExcelWorksheet1.Range[Sheet.Cells[GraphTop  ,GraphLeft],Sheet.Cells[GraphTop+6,GraphLeft+10]].font.Name := '굴림체';

           

     Format := '#,##0.0';

     ExcelApplication1.Range[Sheet.Cells[GraphTop+11,GraphLeft+1],Sheet.Cells[GraphTop+15,GraphLeft+9]].NumberFormatLocal   := Format;

     Format := '0';

     ExcelApplication1.Range[Sheet.Cells[GraphTop+11,GraphLeft+6],Sheet.Cells[GraphTop+11,GraphLeft+6]].NumberFormatLocal   := Format;

     Format := '#,##0.0%';

     ExcelApplication1.Range[Sheet.Cells[GraphTop+11,GraphLeft+5],Sheet.Cells[GraphTop+15,GraphLeft+5]].NumberFormatLocal   := Format;

     ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



     GraphTop := GraphTop + 17;



     ExcelWorksheet1.Range[Sheet.Cells[GraphTop,GraphLeft],Sheet.Cells[GraphTop+102,GraphLeft+10]].VerticalAlignment := xlHAlignCenter;

     ExcelWorksheet1.Range[Sheet.Cells[GraphTop,GraphLeft],Sheet.Cells[GraphTop+102,GraphLeft+10]].HorizontalAlignment := xlHAlignCenter;



     for I :=  0 to 4 do

     Begin

  case I of

            0: ExcelWorksheet1.Range[Sheet.Cells[(I*20)+GraphTop,GraphLeft],Sheet.Cells[(I*20)+GraphTop,GraphLeft+10]].Value := '부  피(pl)';

            1: Begin

              ExcelWorksheet1.Range[Sheet.Cells[(I*20)+GraphTop,GraphLeft],Sheet.Cells[(I*20)+GraphTop,GraphLeft+10]].Value := '좌  우(um)';

        Sheet.Cells[   (I*20)+GraphTop,GraphLeft ].AddComment( '수평 좌우 편차거리');

             End;

            2: Begin

              ExcelWorksheet1.Range[Sheet.Cells[(I*20)+GraphTop,GraphLeft],Sheet.Cells[(I*20)+GraphTop,GraphLeft+10]].Value := '상  하(um)';

        Sheet.Cells[   (I*20)+GraphTop,GraphLeft ].AddComment( '수직 상하 편차거리');

             End;

            3: ExcelWorksheet1.Range[Sheet.Cells[(I*20)+GraphTop,GraphLeft],Sheet.Cells[(I*20)+GraphTop,GraphLeft+10]].Value := '속  도(m/s)';

            4: ExcelWorksheet1.Range[Sheet.Cells[(I*20)+GraphTop,GraphLeft],Sheet.Cells[(I*20)+GraphTop,GraphLeft+10]].Value := '각  도(˚)';

          end;



      ExcelWorksheet1.Range[Sheet.Cells[(I*20)+GraphTop  ,GraphLeft],Sheet.Cells[(I*20)+GraphTop   ,GraphLeft+10]].MergeCells := true;

      ExcelWorksheet1.Range[Sheet.Cells[(I*20)+GraphTop+1,GraphLeft],Sheet.Cells[(I*20)+GraphTop+18,GraphLeft+10]].MergeCells := true;

      ExcelWorksheet1.Range[Sheet.Cells[(I*20)+GraphTop  ,GraphLeft],Sheet.Cells[(I*20)+GraphTop+18,GraphLeft+10]].borders.LineStyle := 1;

      ExcelWorksheet1.Range[Sheet.Cells[(I*20)+GraphTop  ,GraphLeft],Sheet.Cells[(I*20)+GraphTop   ,GraphLeft+10]].borders.Color  := clBlack;

      ExcelWorksheet1.Range[Sheet.Cells[(I*20)+GraphTop  ,GraphLeft],Sheet.Cells[(I*20)+GraphTop   ,GraphLeft+10]].Interior.Color := clYellow;

      ExcelWorksheet1.Range[Sheet.Cells[(I*20)+GraphTop  ,GraphLeft],Sheet.Cells[(I*20)+GraphTop+18,GraphLeft+10]].font.bold := true;

      ExcelWorksheet1.Range[Sheet.Cells[(I*20)+GraphTop  ,GraphLeft],Sheet.Cells[(I*20)+GraphTop+18,GraphLeft+10]].font.Size := 12;

      ExcelWorksheet1.Range[Sheet.Cells[(I*20)+GraphTop  ,GraphLeft],Sheet.Cells[(I*20)+GraphTop+18,GraphLeft+10]].font.Name := '굴림체';



   oRng := Sheet.Cells[(I*20)+GraphTop+1,GraphLeft].Select;

          case I of

            0: ImageFile := VolumeGraph;

            1: ImageFile := StraightGraph;

            2: ImageFile := LengthGraph;

            3: ImageFile := SpeedGraph;

            4: ImageFile := AngleGraph;

          end;

      if FileExists(ImageFile) then

      begin

           oRng := Sheet.Pictures.Insert(ImageFile).ShapeRange;

               //oRng := Sheet.

        oRng.ScaleWidth (1, False, 1);

        oRng.ScaleHeight (1, false, 1);

               //////////// Excel 2007에서는 아래처럼 코딩 필요 ///////////////////////////////////////////////////////////////////////////////////////

               //oSheet.Shapes.AddPicture(gsAppDir + `\Logo\` + sCode + `.jpg`, msOTrue, msoTrue, Left:=0, Top:=(iPage*775)+0, Width:=148, Height:=55);

      end;

     End;

     Sheet.Cells[1,1].Select;



     //숫자형 포맷

   //Format := '_-* #,##0.0_-;-* #,##0.0_-;_-* "-"???_-;_-@_-';

   //ExcelApplication1.Range['B1','B1'].NumberFormatLocal := Format;



   //ExcelWorksheet1.Range['F3', 'H8'].Formula := '=RAND()*10';

   //ExcelWorksheet1.Range['F9', 'F9'].Formula := '=SUM(F3:F8)';

   //패턴변경

   //=============================================================================================================================

   //for i := 1 to 18 do

   //begin

      //ExcelWorksheet1.Range['D'+inttostr(i+24),'D'+inttostr(i+24)].Interior.Pattern := i;

      //ExcelWorksheet1.Range['E'+inttostr(i+24),'E'+inttostr(i+24)].Value := 'Interior.Pattern := '+inttostr(i);

   //end;

   //=============================================================================================================================

                  //

//  이미지를 삽입할경우 실제파일을 기록해야 되기 때문에 주석처리 했습니다.

//  실제 파일과 경로명 기록하고 주석푸시고 실행해보세요 ^^

//   백그라운드 이미지

//  //ExcelWorksheet1.SetBackgroundPicture('C:\My Documents\My Pictures\couplevssolo(6).jpg');

//  //이미지 입력

//  Selection := Sheet.Pictures.Insert('C:\My Documents\My Pictures\302492_2.jpg');

//  //이미지위치조절

//  Selection.ShapeRange.IncrementLeft(243);

//  Selection.ShapeRange.IncrementTop(605);



   //차트용 오브젝트 생성

   //ChObj := (ExcelWorksheet1.ChartObjects(EmptyParam, lcid) as ChartObjects).Add(600, 10, 400, 250);

   //ExcelChart1.ConnectTo(ChObj.Chart as _Chart);

   //데이터 범위(데이터뿐만아니라 가로축 세로축에 찍힐 주석값까지 포함해야함)

   //Rnge := ExcelWorksheet1.Range['E2','H8']; // the data range, including titles

   //차트타입

   //ChType := TOleEnum(xl3DColumn);

   //ExcelChart1.ChartWizard(Rnge, ChType, EmptyParam, xlColumns, 1, 1, True,

     //                     ExcelWorksheet1.Range['A1', 'A1'].Text, // The chart title

     //                     '번호', '점수', EmptyParam, lcid);

   //Ax := ExcelChart1.Axes(xlValue, xlPrimary, lcid) as Axis;

   //Ax.AxisTitle.Font.FontStyle := '굴림체';



   //자동으로 컬럼의 폭을 맞춘다.

   //ExcelWorksheet1.Columns.AutoFit;

end;


반응형
반응형

// 지정한 폴더의 파일 리스트 가져오기 : 서브 폴더 검색 대응

function FindFiles(const sPath, sMask: string; slFiles: TStringList; bSubDir: boolean): integer;
var
  iFindResult: integer;
 srSchRec : TSearchRec;
begin
  result := 0;

  iFindResult := FindFirst(sPath + sMask, faAnyFile - faDirectory, srSchRec);
  while iFindResult = 0 do
  begin
    slFiles.Add(sPath + srSchRec.Name);
    iFindResult := FindNext(srSchRec);
  end;
  FindClose(srSchRec);

  if bSubDir then
  begin
    iFindResult := FindFirst(sPath + '*.*', faDirectory, srSchRec);
    while iFindResult = 0 do
    begin
      if (srSchRec.Name <> '.') and (srSchRec.Name <> '..') then
        result := result + FindFiles(sPath + srSchRec.Name + '\', sMask, slFiles, TRUE);
      iFindResult := FindNext(srSchRec);
    end;
    FindClose(srSchRec);
  end;
end;




procedure TForm1.Button1Click(Sender: TObject);
var
  sl: TStringList;
begin
  Button1.Enabled := false;
  sl := TStringList.Create;
  sl.Clear;
  FindFiles('D:\Data\', '*.doc', sl, True);
  Listbox1.Items := sl;
  sl.Free;
  Button1.Enabled := True;
end;


출처 : http://wwwi.tistory.com/294


반응형
반응형


델파이 Library path와 Browsing path에서  썼듯이 정말 고생한 건데...델파이 5를 Win7 32bit에 설치하고 컴포넌트를 설치하다보면 문제없이 잘 설치되는가 보면 bpl 파일에 접근할 수 없다는 에러를 토하면서 설치가 안되는 경우가 있다.
음...VirtualTree 의 Theme Manager 같은 경우에는 설치는 된 것 같았는데...델파이를 재실행하면...설치한 컴포넌트가 사라진다.
Component - Install Packages 메뉴로 설치된 패키지를 확인하면 해당 패키지의 체크 박스가 해제되어 있는 것을 볼 수 있었다.

델마당에 질답란에 질문도 올리고...결국 구글링해서 해결했다.
방법은 좀 허망한데...윈도우 환경 변수 Path 에 bpl 폴더를 추가해주면 된다.
예를 들어 Win7 32bit 에서 델파이 5를 사용하는 경우
C:\Program Files\Borland\Delphi5\Projects\Bpl
와 같은 경로를 추가해주면 된다. 뭐...델파이 5를 설치한 경로나...BPL 을 저장한 경로가 다르다면 그에 맞게 적절하게 추가하면 된다.

정말...허망하지 아니한가...;

아...추가로 경로 추가하고서도 접근이 안된다고 뜬다면 우선 해당 bpl 파일과 dcp 파일을 삭제하고 다시 컴파일 한 후 생성된 bpl파일과 dcp 파일을 선택하고 Take Ownership 해준다.
...솔직히 경로 추가만 하면 이 짓은 일명 '뻘짓'이 될 확률이 크다.


Dark-Ryu님의 이글루 Dark-Ryu

출처 : http://darkryu.egloos.com/m/3409064

반응형
반응형

[강좌] Object Repository/ Template 사용법 2000년 4월 12일 수요일 오전 5시 45분
hitel 김병희 ( 017 - 264 - 4995 )
---------------------------------------------------------------------------

이 내용은 델파이5 엔터프라이즈를 참고한 것이다.
이전 버전 사용자에게도 혹 참고가 될지 모르겠다.
* 아래 설명을 보면 오브젝트 리파지토리를 사용할 필요는 별도 설명이 불필요할 것
이다.
초보자라고 겁내지 말고 지금 당장, 언제나 오브젝트 리파지토리를 사용하자.
불필요하면 언제든지 지워버릴 수 있다.
델파이를 재설치할 때는 아래의 3개 파일을 백업/복구하는 것이 중요할 것 같다.

===============
< 기본 사항 >
템플릿 = 모듈화된 오브젝트 // 필요하면 가져다가 붙여서 부속처럼 사용할 수 있는
객체
Object Repository = 객체 저장소 = 템플릿을 넣어두는 창고
* 디스크에 저장되는 Object Repository 파일 = delphi5\bin\delphi32.dro, delphi3
2.dmt, delphi.dct
* 델파이 제거 전에 위 3 파일을 백업 -> 재설치 후 복구해주어야 만들어둔 것을 쓸
수 있다.
===============
< 템플릿 종류 및 저장/사용 >
템플릿 종류 : 1. 폼 템플릿 2. 프로젝트 템플릿 3. 메뉴 템플릿 4. 컴포넌트 템플
릿
템플릿 저장 방법/사용방법 : 각 템플릿마다 다소 차이가 있다.
===============
< 1. 폼 템플릿 저장 및 사용 >
= 저장 // delphi32.dro 파일
1) 폼의 유닛파일 저장 // 저장되지 않은 폼은 템플릿에 넣을 수 없다.
2) 폼 위에서 오른클릭 -> Add to Repository 선택
3) 필요한 사항 지정, Browse=아이콘 선택, [OK]
* 폼은 Forms 페이지에 저장하기도 하지만, 나만의 페이지를 만들어 저장해둘 수도
있다.
= 메인폼, New폼 지정
1) Tools/Repository 메뉴
2) 페이지 및 오브젝트 선택
3) New Form 또는 Main Form 체크
4) [OK]
* New Form 체크한 경우 -> File/New Form 메뉴 선택시마다 사용됨
* Main Form 체크한 경우 -> New Project 시작시마다 사용됨
= 일반 폼 사용
1) File/New 메뉴
2) 페이지 선택
3) 폼 오브젝트 선택
4) Copy/Inherit/Use 중 하나의 옵션 선택
5) [OK]
* 델파이가 기본 제공하는 폼 템플릿에는 Copy 이외의 옵션이 먹히지 않는다.
===============
< 템플릿 옵션 - Copy/Inherit/Use >
Copy : 템플릿과 독립된 사본을 만들어준다.
Inherit : 템플릿의 원본이 변경되면 따라서 변경되는 자식을 만들어준다.
Use : 템플릿 원본을 사용한다. 변경하면 템플릿에 그대로 반영된다.
===============
< 2. 프로젝트 템플릿 저장 및 사용 >
= 저장 // delphi32.dro 파일
1) 프로젝트 저장
2) Project\Add to Repository 선택
3) 필요한 사항 지정, Browse=아이콘 선택, [OK]
= 사용
1) 프로젝트를 저장할 폴더 준비
2) File/New 메뉴
3) Projects 페이지 선택
4) 폼 오브젝트 선택
5) Copy/Inherit/Use 중 하나의 옵션 선택
6) [OK]
7) 프로젝트를 저장할 폴더 선택
* 프로젝트 템플릿에는 Copy 이외의 옵션이 먹히지 않는다.
===============
<3. 메뉴 템플릿 저장 및 사용 >
= 저장 // delphi32.dmt 파일
1) TMainMenu 아이템 더블클릭(또는 오른클릭 ...) -> 메뉴 디자이너
2) 메뉴 디자이너에서 오른클릭 -> Save As Template
3) 저장할 이름 입력, [OK]
* 메뉴 모양만 저장되고, 연결된 이벤트 핸들러는 저장되지 않는다.
= 사용
1) 메뉴 디자이너에서 오른클릭 -> Insert From Template
2) 메뉴 선택, [OK]
===============
< 4. 컴포넌트 템플릿 저장 및 사용 >
= 저장 // delphi.dct 파일
1) 저장할 컴포넌트 1개 이상 선택
* Edit/Select All 메뉴를 사용하면 모든 컴포넌트를 선택할 수 있다.
2) Component/Create Component Template 메뉴
3) 컴포넌트 이름 입력, 페이지 지정, Change.. 아이콘 지정, [OK]
= 사용
1) 컴포넌트 팔레트 페이지 선택
2) 컴포넌트 선택
===============
---------------------------------------------------------------------------
[강좌] Object Repository/ Template 사용법
2000년 4월 12일 수요일 오전 5시 49분
k8z7@hitel 김병희 ( 017 - 264 - 4995 )
---------------------------------------------------------------------------

반응형
반응형

출처:

http://blog.naver.com/PostView.nhn?blogId=timeofline&logNo=140098964103


BDE_Alias.ZIP




 

읽기, 추가, 삭제 포함.

 

예제를 만들어 소스화일과 같이 첨부한다.

다들 수고하고 감기 조심하자.

 

 

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, DBTables, ExtCtrls, Grids;

type
  TForm1 = class(TForm)
    Button1: TButton;
    ComboBox1: TComboBox;
    Label1: TLabel;
    Label2: TLabel;
    memo1: TMemo;

    RadioGroup1: TRadioGroup;
    procedure Button1Click(Sender: TObject);
    procedure value_loading(Aname : string);
    procedure value_writing;
    procedure ComboBox1Change(Sender: TObject);
    procedure RadioGroup1Click(Sender: TObject);
    procedure FormActivate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}


procedure TForm1.FormActivate(Sender: TObject);
begin
 RadioGroup1Click(Sender);
end;

procedure TForm1.RadioGroup1Click(Sender: TObject);
 var
  CurrentAliases: TStringList;
begin
 case RadioGroup1.ItemIndex of
 0,2 : begin
        ComboBox1.Style := csDropDownList;
        CurrentAliases := TStringList.Create;
        try
         Session.GetAliasNames(CurrentAliases) ;
         ComboBox1.Items:= CurrentAliases;
        finally
         CurrentAliases.Free;
        end;

        IF ComboBox1.Items.Count > 0 then
         begin
          ComboBox1.ItemIndex := 0;
          ComboBox1.OnChange(Sender);
         end;
       end;
   1 : begin
        ComboBox1.Clear;
        ComboBox1.Items.Add('ERPDB');
        ComboBox1.SetFocus;
        ComboBox1.ItemIndex := 0;
        ComboBox1.SelectAll;
        ComboBox1.Style := csDropDown;
       end;
 end;
end;

procedure TForm1.ComboBox1Change(Sender: TObject);
begin
 Case RadioGroup1.ItemIndex of
 0, 2 : begin
        if ComboBox1.ItemIndex <> -1 then
        value_loading(ComboBox1.text);
        end;
 end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Case RadioGroup1.ItemIndex of
    0 : RadioGroup1.OnClick(Sender);
    1 : begin
         IF Trim(ComboBox1.Text) <> '' then
         value_writing
         else
          ShowMessage('Alias명 또는 Params List를 확인하세요');
        end;
    2 : begin
         IF ComboBox1.ItemIndex <> -1 then
         begin
          IF MessageDlg('Alias('+ComboBox1.Text+')를 정말 삭제하시겠습니까?' +#13#13+ '삭제된 Alias는 복구되지 않습니다.',mtWarning,mbOKCancel,0) = mrOK then
          begin
          Session.DeleteAlias(ComboBox1.Text);
          ShowMessage('Alias('+ComboBox1.Text+')가 삭제되었습니다.');
          RadioGroup1.OnClick(Sender);
          end;
         end else
          ShowMessage('삭제할 Alias가 선택되지 않았습니다.');
        end;
  end;
end;

procedure TForm1.value_loading(Aname : string);
var
  sMaybeAlias : string;
  ParamList : TStringList;
begin
 if ComboBox1.ItemIndex <> -1 then
 begin
  sMaybeAlias := ComboBox1.Text;
  if Session.isAlias(sMaybeAlias) then
  begin
    ParamList := TStringList.Create;
    try
     Session.GetAliasParams(sMaybeAlias, ParamList) ;
     //     ListBox1.Items := ParamList;
     memo1.Lines := ParamList;
    finally
     ParamList.Free;
    end;
  end
  else
  ShowMessage(sMaybeAlias) ;
 end;
end;

procedure TForm1.value_writing;
var NewAliasParams : TStringList;
    AliasName : string;
    i : Integer;
    s : string;
begin
  ComboBox1.text := Trim(ComboBox1.text);
  AliasName:=ComboBox1.text;

  IF Session.IsAlias(AliasName) then
  Case MessageDlg('이미 Alias : '+AliasName+' 가 존재합니다.'+#13#13+'삭제한 후 진행할까요?' +#13#13+ '삭제된 Alias는 복구되지 않습니다.',mtWarning,mbOKCancel,0) of
  mrOk     : Session.DeleteAlias(AliasName);
  mrCancel : Exit;
  end;

  NewAliasParams := TStringList.create;
  try
    for i := 0 to memo1.Lines.Count-1 do
    begin
     s := memo1.Lines.Strings[i];
     if (Trim(s) <> '') and (Trim(Copy(s,1,Pos('=',s)-1)) <> '') and (Trim(Copy(s, Pos('=',s)+1 , Length(s))) <> '') then
      NewAliasParams.Values[ Trim(Copy(s,1,Pos('=',s)-1)) ] := Trim(Copy(s, Pos('=',s)+1 , Length(s)));
    end;

    Session.AddAlias(AliasName, 'MSSQL', NewAliasParams) ;
    Session.SaveConfigFile;
    ShowMessage('Alias : '+ AliasName +' 이 정상적으로 등록되었습니다.');
    {
    NewAliasParams.Values['DATABASE NAME'] := 'DBname';
    NewAliasParams.Values['SERVER NAME'] := '192.168.0.1';
    NewAliasParams.Values['USER NAME'] := 'sa';
    NewAliasParams.Values['OPEN MODE'] := 'READ/WRITE';
    NewAliasParams.Values['SCHEMA CACHE SIZE'] := '8';
    NewAliasParams.Values['BLOB EDIT LOGGING'] := '';
    NewAliasParams.Values['LANGDRIVER'] := '';
    NewAliasParams.Values['SQLQRYMODE'] := '';
    NewAliasParams.Values['SQLPASSTHRU MODE'] := 'SHARED AUTOCOMMIT';
    NewAliasParams.Values['DATE MODE'] := '0';
    NewAliasParams.Values['SCHEMA CACHE TIME'] := '-1';
    NewAliasParams.Values['MAX QUERY TIME'] := '300';
    NewAliasParams.Values['MAX ROWS'] := '-1';
    NewAliasParams.Values['BATCH COUNT'] := '200';
    NewAliasParams.Values['ENABLE SCHEMA CACHE'] := 'FALSE';
    NewAliasParams.Values['SCHEMA CACHE DIR'] := '';
    NewAliasParams.Values['HOST NAME'] := '';
    NewAliasParams.Values['APPLICATION NAME'] := '';
    NewAliasParams.Values['NATIONAL LANG NAME'] := '';
    NewAliasParams.Values['ENABLE BCD'] := 'FALSE';
    NewAliasParams.Values['TDS PACKET SIZE'] := '4096';
    NewAliasParams.Values['BLOBS TO CACHE'] := '64';
    NewAliasParams.Values['BLOB SIZE'] := '32';
    Session.AddAlias(AliasName, 'MSSQL', NewAliasParams) ;
    Session.SaveConfigFile;
    }
  except
    on E: Exception do
    MessageDlg(E.Message, mtWarning, [mbOK], 0);
  end;
 NewAliasParams.Free;
end;

end.

 

 

반응형
반응형

열거형 타입 ( Delphi enum type )

type
  TDatabaseType
    = (dbtMSSQL, dbtOracle, dbtCUBRID, dbtSybase, dbtNone);

  TDatabaseSet = set of TDatabaseType;

const
  StrDatabaseNames : array[TDatabaseType] of String
    = ('MSSQL', 'Oracle', 'CUBRID', 'Sybase', 'None');

 함수  내용
 Typeinfo  열거형의 형정보(TypeInfo)에 대한 포인터 반환
 GetEnumName  열거형의 각 멤버를 문자열로 반환
 GetEnumValue  
 Ord  
 Pred  
 Succ  
 Dec  
 Inc  
 Low  


procedure TForm1.Button1Click(Sender: TObject);
var
  DatabaseType : TDatabaseType;
begin
  // GetEnumValue : String to Enum
  DatabaseType := TDatabaseType(GetEnumValue(TypeInfo(TDatabaseType), 'dbtOracle'));

  // GetEnumName : Enum to String
  ShowMessage(GetEnumName(TypeInfo(TDatabaseType), Ord(DatabaseType))); // dbtOracle

  // Ord
  ShowMessage(IntToStr(Ord(dbtOracle))); // 1

  // Dec
  Dec(DatabaseType);
  ShowMessage(GetEnumName(TypeInfo(TDatabaseType), Ord(DatabaseType))); // dbtMSSQL

  // Inc
  Inc(DatabaseType);
  ShowMessage(GetEnumName(TypeInfo(TDatabaseType), Ord(DatabaseType))); // dbtOracle

  // Low, High / Loop
  for DatabaseType := Low(TDatabaseType) to High(TDatabaseType) do
    ShowMessage(GetEnumName(TypeInfo(TDatabaseType), Ord(DatabaseType)));
end;

- end -

출처: http://bluexmas.tistory.com/187


반응형
반응형