본문 바로가기

델파이474

프로그램간 메세지 전송 프로그램간 메세지 전송 1. 개요 - 독립된 다른 응용 프로그램간의 메시지 교환을 통해 프로그램을 제어 해 본다. 2. 처리 방법 - Windows의 메시지인 WM_COPYDATA 를 이용한다. - 데이터 교환을 위해 CopyDataStruct 구조체를 이용한다. - SendMessage API를 이용한다. 가. 메시지를 교환 하고자 하는 델파이 프로젝트 양쪽의 유닛에 messages 를 Uses 절에 추가한다. 나. 메시지를 보내는 쪽 Unit - 메시지를 받을 응용 프로그램의 핸들을 얻는다. (FindWindow 이용) - CopyDataStruct 구조체에 보낼 정보를 채운다. - SendMessage를 이용해 받는쪽 윈도우 핸들에 WM_CopyData 메시지를 CopyDataStruct 구조체와 .. 2022. 4. 11.
델파이에서 MS Speech-API(SAPI) 사용 델파이에서 MS Speech-API(SAPI) 사용 사용법 TSpVoice, TSpObjectToken 클래스 필요 위 설치후 ActiveX에서 추가함 목소리 받아오기 목소리 목록을 받아서 콤보에 설정함. procedure TfConfig.FormCreate(Sender: TObject); var SOTokenVoice: ISpeechObjectToken; // See the MS SAPI SDK for info on SOTokenVoices:ISpeechObjectTokens; // registry tokens that hold resources i: Integer; begin SpVoice1.EventInterests := SVEAllEvents; SOTokenVoices := SpVoice1.Get.. 2022. 4. 6.
윈도우 종료(재시작) 3가지 방법 윈도우 종료(재시작) 3가지 방법 Title: Shutdown Computer by 3 Solution Question: how i can shutdown computer in windows NT family? Answer: // ALI EBRAHIMI DORCHEH (ebr_ali@yahoo.com) //------------- Solution 1----------------- procedure TForm1.Button1Click(Sender: TObject); begin ExitWindowsEx(EWX_FORCE and EWX_SHUTDOWN,0); //EWX_SHUTDOWN for shutdown //EWX_REBOOT for reboot //EWX_LOGOFF for logoff end; //--.. 2022. 4. 5.
프로세스가 살아있는지 검사 / 프로세스 죽이기 프로세스가 살아있는지 검사, 프로세스 죽이기 // uses 에 TlHelp32 추가 function IsRunningProcess(const ProcName: String) : Boolean; var Process32: TProcessEntry32; SHandle: THandle; Next: Boolean; begin Result:=False; Process32.dwSize:=SizeOf(TProcessEntry32); SHandle :=CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0); // 프로세스 리스트를 돌면서 매개변수로 받은 이름과 같은 프로세스가 있을 경우 True를 반환하고 루프종료 if Process32First(SHandle, Process32) the.. 2022. 4. 1.
실행파일명으로 프로세스(TASK) 죽이기 실행파일명으로 프로세스(TASK) 죽이기 function KillTask(ExeFileName: string): Integer; const PROCESS_TERMINATE = $0001; var ContinueLoop: BOOL; FSnapshotHandle: THandle; FProcessEntry32: TProcessEntry32; begin Result := 0; FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); FProcessEntry32.dwSize := SizeOf(FProcessEntry32); ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32); while.. 2022. 3. 31.
레지스트리 읽고 쓰기 레지스트리 읽고 쓰기 uses Registry < 추가 var Reg :TRegistry; RString : String; Begin // 읽기 Reg := TRegistry.Create; Reg.RootKey := HKEY_LOCAL_MACHINE; // Root Reg.OpenKey(`\Software\AhnLab\V3Lite\`,True); RString := Reg.ReadString(`InstallPath`); Reg.Free; ShowMessage(RString); // 쓰기 Reg := TRegistry.Create; Reg.RootKey := HKEY_LOCAL_MACHINE; // Root Reg.OpenKey(`\Software\AhnLab\V3Lite\`,True); Reg.Write.. 2022. 3. 29.
윈도우버전별 바탕화면 경로 알아내기 윈도우버전별 바탕화면 경로 알아내기 uses ShFolder,ShlObj; function GetSystemDirectory(Dir: Integer): String; var Path: PChar; begin Result:=''; GetMem(Path, MAX_PATH); SHGetFolderPath(0, Dir, 0, 0, Path); Result:=Copy(Path, 0, Length(Path)); FreeMem(Path); end; 사용 예제 var path : String begin path := GetSystemDirectory(CSIDL_PROFILE); end; --------------------------------------------------------------------------.. 2022. 3. 28.
Delphi Tip Delphi Tip 임시 스트링 리스트 사용 임시 스트링 리스트를 사용하는 것이 어떤경우 훨씬 빠른 결과를 나타낼 수 있다. ListBox1.Clear; Ini := TIniFile.Create('win.ini'); ReadSection('Colors', ListBox1.Items); Ini.Free; 위와같이 하는 대신에 이렇게 해 보자. StrList := TStringList.Create; ListBox1.Clear; Ini := TIniFile.Create('win.ini'); ReadSection('Colors', StrList); Ini.Free; ListBox1.Items.Assign(StrList); StrList.Free 리소스로부터 비트맵 로드 MyBitmap.Handle := Load.. 2022. 3. 24.
쓰레드 추가설명 델파이 쓰레드 객체는 TThread 객체를 상속 하고 필요한 실행 코드는 Excute 를 오버라이드하여 구현하며 생성후 Resume 하여 작업을 시작한다. type TExThread = class(TThread) protected procedure Execute; override; end; { TExThread } procedure TExThread.Execute; begin inherited; while not Terminated do begin Synchronize( procedure() begin frmHillThread.mConsole.lines.Add('Time:' + TimeToStr(Now)); end); Sleep(1000); end; end; Thread 기본 사용법 Thread prio.. 2022. 3. 23.
안드로이드에서 MessagDlg 사용방법(주의 점) 안드로이드에서 MessagDlg 사용방법(주의 점) Blockin dialogs not implemented on this platform. ❑ 원인 안드로이드에서는 블로킹 대화상자를 지원하지 않습니다. 하지만 컴파일 시 오류가 나지 않기 때문에 구현 시 주의가 필요합니다. ❑ 해결방안 ACloseDialogProc 파라메터가 있는 MessageDlg 함수를 이용해야 합니다. ACloseDialogProc은 MessageDlg에서 버튼을 누른 이후의 동작을 가진 익명메소드 입니다. 아래 예제를 참고하세요. unit uMain; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.T.. 2022. 3. 11.
외부프로그램위치변경 외부프로그램위치변경 setwindowpos(핸들값, HWND_TOPMOST, 353, 388, 800, 502 , SWP_DRAWFRAME ); 2022. 3. 10.
왕초보를 위한 아주 기본적인 Tips 왕초보를 위한 아주 기본적인 Tips 1. 데이터 저장 및 누적 내용 : 메모1에 텍스트를 추가하고 싶을때 memo1.lines.add('추가할 내용'); 그리고 데이터 누적 var i,a:integer; begin a:=a+i; end; 2. RGB Color 색상값 이용하기(레드 그린 블루) Form1.Color:=RGB($FF,$99,$CC); // 분홍색 3. 최소화 비활성화(프로퍼티에도 있음) Form1.bordericons:=form1.bordericons-[biMinimize]; 4. 라벨 글자위치 정가운데 프로퍼티에서 Alignment를 taCenter , Layout을 tiCenter으로 한다. 5. MonthCalendar에서 날짜 클릭시 그 날짜를 에디트박스에 불러온다. procedu.. 2022. 3. 7.
델파이 완벽한 인터넷 체크 uses Winapi.WinInet, IdIcmpClient,IdGlobal; function Ping: Boolean; var IcmpClient: TIdIcmpClient; begin Button1.Enabled := False; Result:= False; if ftCheckInternetPing then begin IcmpClient:= TIdIcmpClient.Create(Nil); IcmpClient.ReceiveTimeout:= 2000; // 1~3초 사이면 충분 합니다. IcmpClient.Host:= '8.8.8.8'; // 구글 아이피로 설정 해뒀고 다른데 쓰셔도 됩니다. IcmpClient.PacketSize:= 24; try IcmpClient.Ping; if IcmpClient... 2022. 2. 25.
윈도우 포커스 및 최상위로 올리기/활성화 윈도우 포커스 및 최상위로 올리기/활성화 원래 SetForegroundWindow() 함수를 쓰면 윈도우가 앞으로 나오던 것이 win98 부터 처리 방식이 바뀌어서 사용자 입력 포커스를 os 에서 관리하기 시작하면서 해당 api 가 원래대로 작동을 하지 않게 되었습니다. MSDN 에 보면 다음과 같은 경우에만 앞으로 기어나온다고 설명되어 있습니다. Quote: Windows 98/Me: The system restricts which processes can set the foreground window. A process can set the foreground window only if one of the following conditions is true: - The process is the fo.. 2022. 2. 23.
외부 프로그램 실행하고 대기하기 외부 프로그램 실행하고 대기하기 = ShowModal과 비슷 외부 프로그램을 실행 후 실행한 프로그램이 종료될때까지 대기상태(루프)에 들어간다. 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.lpVe.. 2022. 2. 22.
시스템 대기모드/화면 보호기/모니터 끄기 이벤트 감지하기 시스템 대기모드/화면 보호기/모니터 끄기 이벤트 감지하기 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Registry, Inifiles; type TForm1 = class(TForm) Memo1: TMemo; private { Private declarations } public { Public declarations } procedure WMSyscommandBroadcast(var Msg: TMessage); message WM_SYSCOMMAND; procedure WMPowerBroadcast(var Msg: TMessage).. 2022. 2. 17.
문자열에서 특정 문자까지 자르기 문자열에서 특정 문자까지 자르기 Uses 절에 StrUtils 추가 AnsiLeftStr(값, AnsiPos('|', 값) - 1) AnsiLeftStr : 왼쪽 부터 시작 AnsiPos:= 앞쪽 파라메타 값의 위치 값 리턴 2022. 2. 16.
델파이 로고(logo) 관리 델파이 로고(logo) 관리 문제 1 - Runtime상에서 변수명을 보고 싶다 프로그램을 짜다 보면 중간에 어떠한 변수가 가지는 값을 확인해 보고 싶은 경우가 있습니다. 디버깅중이라면 컴파일러 IDE상에서 해당 변수를 보면 되겠지만 디버깅이 아닌 Runtime인 경우에는 해당 변수의 값을 보기가 힘이 듭니다. 해결 1 - printf를 이용해서 디버깅을 한다 이러한 경우에 가장 많이 사용하게 되는 것이 바로 출력과 관련된 API(printf, MessageBox 등)입니다. int i; // blah blah printf("i=%d", i); 자, 이렇게 실시간으로 특정 변수의 값을 출력을 해서 Runtime상에서 변수의 값을 확인하게 됩니다. 문제 2 - 디버깅 다 끝났다, 그런데 언제 디버깅 코드를.. 2022. 2. 15.
스크롤박스의 스크롤 제어 방법 스크롤박스의 스크롤 제어 방법 스크롤 박스 이벤트 속성중...마우스휠다운,업에 작성한다. ScrollBox1.VertScrollBar.Position := ScrollBox1.VertScrollBar.Position-30; 그리고 object inspector의 HorzScrollBar와 VertScrollBar의 Smooth과 ThumbSize를 True로 설정한다. 다른 속성중 Position이 스크롤 위치 값이다.. 2022. 2. 14.
윈도우 바탕화면 경로(주소) 값 알아내기 윈도우 바탕화면 경로(주소) 값 알아내기 Uses Shlobj function TForm1.GetProgramFilesDir: String; const CSIDL_PROGRAM_FILES = $0000; var pidl: PItemIDList; Path: array [0..MAX_PATH-1] of char; begin if Succeeded(SHGetSpecialFolderLocation(Application.Handle, CSIDL_PROGRAM_FILES, pidl)) then begin if SHGetPathFromIDList(pidl, Path) then Result := StrPas(path); end; end; 원하는 폴더 주소를 상수로 설정한다. CSIDL_DESKTOP = $0000; C.. 2022. 2. 11.