본문 바로가기

분류 전체보기1019

프로그램에서 DOS 명령어 처리 프로그램에서 DOS 명령어 처리 1. 콘솔창(DOS창) 창 안띄우기 2. 끝날때까지 기다리기(실행이 끝난것을 감지하기) 3. 출력되는 내용을 화일로 저장하기 procedure TForm1.Button1Click(Sender: TObject); var msg: string; begin // 1.Dos 명령 일괄처리 파일에서 명령어를 불러오고() if not RunDosCmd('cmd c:\out.txt', Msg, true) then ShowMessage(msg) else ShowMsg(Msg); // 2.현재 도스 명령어를 실행하고, 결과를 파일로 저장('C/\out.txt) if not RunDosCmd('Dir/w >c:\out.txt', Msg, true) then ShowMessage(msg) e.. 2023. 12. 29.
Delphi Open ToolsAPI (3) Delphi Open ToolsAPI 모듈의 정의 모듈을 쉽게 표현하자면 대표 파일을 가진 편집 단위라고 보면 된다. 프로젝트 그룹, 프로젝트, 유닛, 폼유닛등이 모두 모듈이다. 하나 혹은 그 이상의 파일이 하나의 모듈을 구성한다. 폼이 있는 유닛이 대표적인 경우인데 예를들어 Unit1.pas는 Unit1.dfm와 함께 두개의 파일로 구성되어 있으며 대표파일은 Unit1.pas다. 프로젝트나 프로젝트 그룹등도 하나의 모듈로 취급된다. 모듈을 찾거나 여는 등의 작업은 파일명을 통해 이루어지는데 이를 대표파일이로 정의하자 (이를 지칭할만한 뚜렷한 이름이생각나지 않는다) . 대표파일로는 *.pas, *.bpg, *.dpr,*.dpk가 있다. 델파이에 프로젝트 그룹과 프로젝트가 로드된 상태에서 모듈의 파일명을 .. 2023. 12. 26.
Delphi Open ToolsAPI (2) Delphi Open ToolsAPI Delphi Open ToolsAPI 메뉴의 OnClick등의 이벤트는 오브젝트의 메쏘드를 필요로 한다. 따라서 무작정 빈 유닛을 기준으로 삼아 작성하기 보다는 DataModule을 기반으로 하는 것이 좋다. 혹은 자신이 아예 새로운 오브젝트 클래스를 작성할 생각이라면 그렇게 해도 좋다. 여하간 이벤트가 필요하거나 혹은 컴퍼넌트가 필요한 경우 메인모듈은 오브젝트를 기반으로 작성하는 것이 좋다. 필자가 제시하는 방법은 DataModule이 메인 모듈이 되고 기타 옵션적용등을 위해 필요한 폼은 메인모듈에서 생성해서 보여주는 것이다. 될 수 있으면 Form을 메인모듈로 잡지 않는 것이 좋다. DataMoudle 보다 리소스를 더 많이 잡아먹을 것이기 때문이다. 다음의 사항.. 2023. 12. 19.
Delphi Open ToolsAPI Delphi Open ToolsAPI 자고 일어나면 빌딩이 선다. 이 새삼스럽지 않은 기적은 철골구조와 조립식 컨크리트에 의해 이루어진다. 철골이 올라가는가 하면 금새 벽이 붙여지고 며칠 안가 빌딩이 완성된다. 이런 조립형태의 접근방식은 빠른 결과물을 보게 해준다. 이런 조립형태의 개발방식은 RAD(고속개발)툴의 근간을 이루고 있다. 델파이에서 조립식 컨크리트의 역할은 컴퍼넌트가 담당한다. 그리고 굳건하게 이런 컴퍼넌트 중심의 개발환경을 뒷받침하고 있는 철골구조가 바로 IDE(통합개발환경)이다. 보다 빠르고 시각화된 개발환경을 제공하기 위해서 일찌감치 IDE(통합개발환경)라는 위대한 환경을 제시해 왔다. IDE를 통해 단순 컴파일러가 아니라 개발툴이라는 당시로서는 진보적 개념을 처음 도입한 것은 볼랜드였.. 2023. 12. 14.
델파이 디버깅용 콘솔창 만들기 델파이 디버깅용 콘솔창 만들기 폼이 실행되면서 콘솔창을 한개 만든뒤, 폼위에 있는 마우스 좌표를 콘솔창에 실시간으로 출력하는 예이다 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); private { Private de.. 2023. 12. 11.
델파이 메세지다이어로그(MessageDialog) 원하는 키 받기 델파이 메세지다이어로그(MessageDialog) 원하는 키 받기 . . . private { Private declarations } protected public { Public declarations } Procedure HelpBoKeyPress(Sender : TObject; var Key : Char); end; var Form1: TForm1; LegalKeys : String; procedure TForm1.Button1Click(Sender: TObject); Var S : String; Begin LegalKeys := 'ABC123'; S := '원하는 항목을 선택하세요!'#13#13'' + ' A 키눌러라'#13'' + ' B.키눌러라'#13'' + ' C.키눌러라'#13'' + '.. 2023. 11. 30.
컴포넌튼 만들기(초간단) 컴포넌튼 만들기 TLabel 을 상속받어, 기본 Default 배경이 검은색으로 설정되는 컴포넌트입니다. unit BlackLabel; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TBlackLabel = class(TLabel) private { Private declarations } protected { Protected declarations } public constructor create(aOwner: TComponent); override; published { Published declarations } end; procedure Register; i.. 2023. 11. 29.
메인 메뉴에 팝업메뉴 달기 메인 메뉴에 팝업메뉴 달기 unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Menus; type TForm1 = class(TForm) MainMenu1: TMainMenu; PopupMenu1: TPopupMenu; N11: TMenuItem; N21: TMenuItem; N31: TMenuItem; N41: TMenuItem; N123121: TMenuItem; N122221: TMenuItem; N44441: TMenuItem; N33331: TMenuI.. 2023. 11. 28.
프린터 목록 불러오기 / 기본프린터 불러오기 프린터 목록 불러오기 / 기본프린터 불러오기 uses Printers, Messages; function GetDefaultPrinter : string; var ResStr : array[0..255] of char; begin GetProfileString('Windows','device','',ResStr,255); Result := StrPas(ResStr); end; procedure SetDefaultPrinter(NewDefPrinter : string); var ResStr : array[0..255] of char; begin StrPCopy(ResStr,NewdefPrinter); WriteProfileString ('windows', 'device', ResStr); StrCopy (.. 2023. 11. 24.
이클립스(eclipse)디버깅 단축키 이클립스(eclipse)디버깅 단축키 F3 : 클래스, 메소드가 선언된 위치로 이동 F11 : 디버그 모드 실행(Debug) F5 : 디버깅시 선택된 행의 메소드 내부로 이동 F6 : 디버깅시 선택된 행의 다음 라인 이동 F7 : 디버깅시 실행중인 메소드 외부로 이동 F8 : 디버깅시 다음 Break Point로 이동 Ctrl + F11 : 실행모드로 실행(Run) Ctrl + Shift + C : 한줄 주석(//) 처리 또는 해제 Ctrl + Shift + / : 블록 주석(/* */) 처리 또는 해제 Ctrl + Shift + F : 코드 형식 정리 Ctrl + Shift + O : import 자동 추가/ 삭제 Ctrl + Shift + L : 프로젝트내 문자열 검색 Ctrl + Shift + R .. 2023. 11. 23.
델파이 툴 메뉴 생성 (현재 프로젝트 경로 열기) 델파이 툴 메뉴 생성 델파이 메뉴 Tools -> Configure Tools 메뉴 클릭 ​ Add 버튼 클릭 ​ Tilte : 현재 프로젝트 경로 열기 Program : Explorer.exe Parameters : $PATH($EXENAME),/e OK 클릭​ 결과 메뉴가 생성된걸 알수있다. 클릭하면 해당 프로젝트 경로로 탐색기가 열린다 . ​ 소스코드 에디터에 활성화되어있는 파일(Unit)명은 $EDNAME 이다 (다른 에디터로 유닛을 열때 좋겠..) 파일명만 전달할려면 $NAMEONLY(파일명) 2023. 11. 22.
윈도우 사용자 이름 알아내기 윈도우 사용자 이름 알아내기 function GetCurrentUserName : string; const cnMaxUserNameLen = 254; var sUserName : string; dwUserNameLen : DWord; begin dwUserNameLen := cnMaxUserNameLen-1; SetLength(sUserName, cnMaxUserNameLen); GetUserName(PChar(sUserName), dwUserNameLen); SetLength(sUserName, dwUserNameLen); Result := sUserName; end; procedure TForm1.Button1Click(Sender: TObject); begin ShowMessage(GetCurren.. 2023. 11. 17.
델파이 UTF-8 델파이 UTF-8 UTF-8 UCS Transferation Format 의 약자로 Unicode를 위한 가변 길이 문자 인코딩 방식 중 하나이다. Unicode는 전 세계의 모든 문자를 표현하기 위한 표준을 제공하는 국제적인 문자 집합이다. UTF-8은 이러한 Unicode 문자를 바이트로 효과적으로 표현하는 방법 중 하나로, 많은 컴퓨터 시스템에서 표준으로 사용되고 있다. UTF-8 특징 가변 길이 인코딩: UTF-8은 각 문자를 1바이트부터 4바이트까지 가변 길이로 인코딩한다. 기본적으로 ASCII 문자는 1바이트로 인코딩되며, 이는 기존의 ASCII 문자 집합과의 하위 호환성을 제공한다. 다른 언어의 문자는 더 많은 바이트로 표현된다. ASCII 호환성: UTF-8은 ASCII 문자 집합과 완벽하.. 2023. 11. 15.
Case문으로 문자 비교하기 Case문으로 문자 비교하기 uses System.TypInfo type TSameText = (ChrMove, MapLoad, MapLoad2, FadeOut, FadeIn, SetNPC, NPCMove); .... implementation .... procedure TForm1.Button1Click(Sender: TObject); var strTemp : string; begin strTemp := 'FadeIn'; case GetEnumValue(TypeInfo(TSameText), strTemp) of 0: ShowMessage('0'); 1: ShowMessage('1'); 2: ShowMessage('2'); 3: ShowMessage('3'); 4: ShowMessage('4'); 5: .. 2023. 11. 8.
정해진 시간에 없어지는 MessageBox 정해진 시간에 없어지는 MessageBox 정해진 시간에 없어지는 MessageBox procedure MessageBoxTimerProc(hWnd: HWND; uMsg: UINT; idEvent: UINT; Time: DWORD); stdcall; ... procedure MessageBoxTimerProc(hWnd: HWND; uMsg: UINT; idEvent: UINT; Time: DWORD); begin PostQuitMessage(0); end; function TimedMessageBox(hwndParent: HWND; ptszMessage: LPCTSTR; ptszTitle: LPCTSTR; flags: UINT; dwTimeout: DWORD): Integer; var idTimer: U.. 2023. 11. 6.
델파이 RS232 통신 RS232 통신 RS232 RS-232는 시리얼 통신을 위한 표준 통신 프로토콜. 이것은 전자 장치 간에 데이터를 송수신하는 데 사용되며, 초기에는 컴퓨터 및 주변 장치 간의 통신을 위해 개발되다. 전압 레벨 RS-232는 양방향 통신을 위해 표준 전압 레벨을 정의다. 이것은 대부분 양의 전압과 음의 전압 사이의 차이로 데이터를 나타낸다. 전형적인 레벨은 +12V와 -12V 또는 +5V와 -5V와 같은 값을 가진다. 비동기 통신 RS-232는 비동기 통신을 기반으로 하며, 데이터를 보낼 때 시작 비트와 정지 비트를 사용하여 데이터 프레임을 형성합니다. 이를 통해 데이터의 시작과 끝을 정의하고 데이터 비트를 보내는 장치 간의 동기화를 가능하게 한다. 다중 데이터 송수신 RS-232는 여러 데이터 비트를 전.. 2023. 11. 3.
최상위 윈도우 얻기 최상위 윈도우 얻기 현재 윈도우상에서 최상위에 떠있는 이름을 알려주는 함수 function OKTopWindowText: string; var WinName: array[0..144] of char; begin FillChar(WinName, 145, 0); GetWindowText(GetForegroundWindow, WinName, 144); SetLength(Result, StrLen(WinName)); Result := StrPas(WinName); end; 2023. 11. 1.
동적으로 메뉴(TMenuItem) 만들고 클릭 이벤트 만들기 동적으로 메뉴(TMenuItem) 만들고 클릭 이벤트 만들기 아래와 같이 popMenuSkin MenuItem에 서브 MenuItem을 동적으로 추가할 수 있다. // Create Dynamic MenuItem var skinCount: Integer; MI: array of TMenuItem; begin skinCount := 3 for i := popMenuSkin.Count - 1 downto 0 do popMenuSkin.Remove(popMenuSkin.Items[i]); SetLength(MI, skinCount); for i := 0 to skinCount do begin MI[i] := TMenuItem.Create(Self); MI[i].Caption := IntToStr(i); MI[i.. 2023. 10. 31.
누수 일기 2편 누수업체 누수업체 현황 정리 2023년 6월경 장마때 밑에집에서 첫번째 민원발생 7월경 2차 민원발생 6~7초마다 일정하게 물방울이 떨어진다. 하루양 대략 1~1.5리터 건물 : 30년차 다세대 빌라 위에 그림처럼 화장실 위치 아랫층에 누수가 발생중에 있다. (실제는 누수발생위치 천장을 뜯어보니 석회화가 되어 아마도 오랫동안 발생한거같음) 업체선정 아랫집에서 2차 민원 후 사태의 심각성을 깨닫고 빠른 해결을 위해 누수전문가를 얼릉찾아 해결해드리고 싶었다. 동네 누수전문가도 물론 좋긴하지만 동네사람이라는 타이틀의 불편함에 일단 제외하고 늘 이용하던 숨고를 통해 업체를 찾아보기로 결정했다. 숨고를 통해 의뢰를 올렸고 여러 전문가의 견적을 받아 보았다. 그중에 제일 평가가 좋은사람으로 선정하고 원하는 날짜(주.. 2023. 10. 29.
델파이 숫자 한글변환 델파이 숫자 한글변환 첫번째 함수 function IntToHanguel( Value: Int64 ) : String; const NumberChar: array['0'..'9'] of String = ( '영','일','이','삼','사','오','육','칠','팔','구' ); LevelChar: array[0..3] of String = ( '', '십','백','천' ); DecimalChar: array[0..5] of String = ( '','만','억','조','경','현' ); var S : String; UseDecimal : Boolean; i, Level: Integer; begin Result := ''; S := IntToStr( Value ); UseDecimal := Fals.. 2023. 10. 27.