<´Ù¸¥ ÇÁ·Î±×·¥½ÇÇà ½ÃŲÈÄ WaitÇϱâ>
How do I execute a program and have my code wait until it is finished?
//-------A: Here is the 16 bit version:
uses Wintypes,WinProcs,Toolhelp,Classes,Forms;
Function
WinExecAndWait(Path : string; Visibility : word) : word;
var
InstanceID
: THandle;
PathLen : integer;
begin
{
inplace conversion of a String to a PChar }
PathLen
:= Length(Path);
Move(Path[1],Path[0],PathLen);
Path[PathLen]
:= #00;
{ Try to run the application }
InstanceID
:= WinExec(@Path,Visibility);
if InstanceID< 32
then { a value less than 32 indicates an Exec error }
WinExecAndWait
:= InstanceID
else begin
Repeat
Application.ProcessMessages;
until
Application.Terminated or (GetModuleUsage(InstanceID) = 0);
WinExecAndWait
:= 32;
end;
end;
//--------- Here is
the 32 bit version:
function WinExecAndWait32(FileName:String;
Visibility : integer):integer;
var
zAppName:array[0..512]
of char;
zCurDir:array[0..255] of char;
WorkDir:String;
StartupInfo:TStartupInfo;
ProcessInfo:TProcessInformation;
begin
StrPCopy(zAppName,FileName);
GetDir(0,WorkDir);
StrPCopy(zCurDir,WorkDir);
FillChar(StartupInfo,Sizeof(StartupInfo),#0);
StartupInfo.cb
:= Sizeof(StartupInfo);
StartupInfo.dwFlags
:= STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow
:= Visibility;
if not CreateProcess(nil,
zAppName,
{ pointer to command line string }
nil,
{
pointer to process security attributes }
nil,
{ pointer to thread security attributes }
false,
{ handle inheritance
flag }
CREATE_NEW_CONSOLE or {
creation flags }
NORMAL_PRIORITY_CLASS,
nil,
{
pointer to new environment block }
nil,
{
pointer to current directory name }
StartupInfo,
{ pointer to STARTUPINFO }
ProcessInfo)
then Result := -1 { pointer to PROCESS_INF }
else
begin
WaitforSingleObject(ProcessInfo.hProcess,INFINITE);
GetExitCodeProcess(ProcessInfo.hProcess,Result);
end;
end;
EDITBOX °°Àºµ¥¼ Űº¸µå ÀÔ·Â Á¦ÇÑÀ» ÇÒ¶§ ¿µ¹®(´ë.¼Ò¹®ÀÚ)¸¦ °¡¸®±â À§ÇØ ´ëºÎºÐÀÌ keypress ³ª keyup ¶Ç´Â keydown EVENT¿¡¼ ó¸® ÇÏ´Â °ÍÀ¸·Î ¾Ë°í ÀÖ½À´Ï´Ù.
Á» ¹¹¶ö±î ??? ¾à°£ ¹«½ÄÇÑ ¹æ¹ýÀÌ¿´Áö¿ä.... ¼Ò½ºÄڵ嵵 ÁöÀúºÐÇØ Áö°í.......
EditChange Event¿¡¼ ´ÙÀ½°ú °°Àº ¹æ¹ýÀ» ±ÇÇÕ´Ï´Ù.
procedure _MYForm.WoonoEdit1Change(Sender : TObject);
begin
WoonoEdit1.CharCase
:= clLowerCase;
// ÀÔ·Â ¹ÞÀ»¶§
¹«Á¶°Ç ¿µ¹® ¼Ò¹®ÀÚ·Î ¹Þ´Â´Ù.
end;
ecLowerCase : ¸ðµç ¿µ¹®ÀÚ¸¦ ¼Ò¹®ÀÚ·Î ¹Þ´Â´Ù.
ecUpperCase :
¸ðµç ¿µ¹®ÀÚ¸¦ ´ë¹®ÀÚ·Î ¹Þ´Â´Ù.
ecNormal :
¸ðµç ¿µ¹®ÀÚ¸¦ º¸Åë »óÅ·ΠÀ¯ÁöÇÑ´Ù.
<ÆÄÀÏÁ¤º¸(»ý¼º,º¯°æ,Á¢±ÙÀÏÀÚ,¼Ó¼º,Á¾·ù...)>
¾Æ·¡ ¼Ò½º´Â ÆÄÀÏÀÇ °¢Á¾ Á¤º¸¸¦ Àоî¿À´Â ·çƾÀε¥ ¿ÏÀüÈ÷ ¸ðµâȰ¡ µÈ °ÍÀº ¾Æ´ÏÁö¸¸, ÆÄÀÏÀÇ »ý¼º,º¯°æ,Á¢±ÙÀÏÀÚ¸¦ Àд ºÎºÐÀÌ ÀÖ¾î ¿Ã¸³´Ï´Ù
function FileSize(hi,lo: integer) :longint;
begin
Result
:= (hi * MAXDWORD) + lo;
end;
// This function
retrieves the last time, the given file was written to disk
function
GetLocalTime(a:tfiletime):string;
var
mtm:
TSystemTime;
at: TFileTime;
ds,ts:
ShortString;
begin
filetimetolocalfiletime(a,at);
filetimetosystemtime(at,mtm);
SetLength(ds,
GetDateFormat(LOCALE_USER_DEFAULT, 0, @mtm, NIL, @ds[1], 255) - 1);
SetLength(ts,
GetTimeFormat(LOCALE_USER_DEFAULT, time_noseconds, @mtm, NIL,
@ts[1],
255) - 1);
Result:=ds+' '+ts;
end;
procedure
TFileInfoForm.GetFileInfo(FileName: String);
var
SHFinfo:
TSHFileInfo;
FindData: TWin32FindData; FindHandle
:THandle;
begin
L_FileName.Caption :=
ExtractFileName(FileName); // ÆÄÀϸí(Name)
ShGetFileInfo(PChar(FileName),
0, SHFinfo, SizeOf(SHFinfo), // ÆÄÀÏÁ¾·ù¸¸ ¾Ë¾Æ³½´Ù
SHGFI_TYPENAME);
L_Filetype.Caption
:= SHFinfo.szTypeName; // ÆÄÀÏÁ¾·ù(Type)
FindHandle
:= Windows.FindFirstFile(PChar(FileName), FindData);
try
L_Filesize.Caption
:= FloatToStr(Trunc(FileSize(FindData.nFileSizeHigh,
FindData.nFileSizeLow) / 1024))+' KB ('+ IntToStr(FileSize(FindData.nFileSizeHigh,
FindData.nFileSizeLow))+' Bytes)';
OldAttributes
:= FileGetAttr(FileName); // ÆÄÀÏÀÇ ¼Ó¼º(attribute)
CB_ReadOnly.Checked
:= (OldAttributes and faReadOnly) = faReadOnly;
CB_Archive.Checked
:= (OldAttributes and faArchive) = faArchive;
CB_System.Checked
:= (OldAttributes and faSysFile) = faSysFile;
CB_Hidden.Checked
:= (OldAttributes and faHidden) = faHidden;
L_Created.Caption
:= GetLocalTime(FindData.ftCreationTime); // ÆÄÀÏ»ý¼ºÀÏ(Created)
L_Modified.Caption
:= GetLocalTime(FindData.ftLastWriteTime); // ÆÄÀϺ¯°æÀÏ(Modified)
L_LastAccess.Caption
:= GetLocalTime(FindData.ftLastAccessTime);
//
ÆÄÀÏÁ¢±ÙÀÏ(LastAccess)
finally
Windows.FindClose(FindHandle);
end;
end;
¿ì¼± uses ¿¡ JPEG ¸¦ Ãß°¡ÇÑ´Ù.
procedure TForm1.Button1Click(Sender : TObjcect);
var
TempImg : TImage;
Jpg : TJPEGImage;
begin
TempImg:=TImage.Create(Self);
with TempImg do
begin
Width:=PaintBox1.Width;
TempImg.Height:=PaintBox1.Height;
end;
Jpg:=TJPEGImage.Create;
with PaintBox1 do
begin
BitBlt(TempImg.Canvas.Handle,0,0,Width,Height,Canvas.Handle,0,0,SrcCopy);
end;
TempImg.Picture.Bitmap.SaveToFile('TempImg.bmp');
Jpg.Assign(TempImg.Picture.Bitmap);
//Bitmap
FileÀ» JpegÆÄÀÏ·Î
Jpg.SaveToFile('TestImg.jpg');
TempImg.Free;
Jpg.Free;
end;
´Ù¸¥ ¹æ¹ý(ÇÔ¼ö ÀÌ¿ë -
õ¸®¾È ·ù´Ô²²¼ ¿Ã¸° ÇÔ¼ö)
* Source
Implementation
uses
JPeg;
procedure LoadJPeg(FileName:String; PicIn:TPicture);
var
JPegImage : TJPegImage;
begin
JPegImage:= TJPegImage.Create;
JPegImage.LoadFromFile(FileName);
PicIn.Assign(JPegImage);
JPegImage.Free;
end;
procedure TForm1.Button1Click(Sender : TObject);
begin
if OpenDialog1.Execute then
LoadJPeg(OpenDialog1.Filename,
Image1.Picture);
//JPEGÆÄÀÏÀ»
·ÎµåÇÏ¿© Image1¿¡ º¸¿©ÁÜ
end;
<Image ÄÄÆ÷³ÍÆ® À§¿¡ ±Û¾¾¾²±â>
procedure TForm1.Button1Click(Sender: TObject);
var
OldBkMode : integer;
begin
Image1.Picture.Bitmap.Canvas.Font.Color :=
clRed;
OldBkMode :=
SetBkMode(Image1.Picture.Bitmap.Canvas.Handle, TRANSPARENT);
Image1.Picture.Bitmap.Canvas.TextOut(10, 10,
'Hi, I am Park');
SetBkMode(Image1.Picture.Bitmap.Canvas.Handle,
OldBkMode);
end;
<ÆÄÀÏÀÇ ³¯Â¥¿Í ½Ã°£À» ¾Ë¾Æ³»±â>
¾Æ·¡ ÇÔ¼ö¸¦ ÀÌ¿ëÇÕ´Ï´Ù.
function GetFileDate(TheFileName: string): string;
var
FHandle: integer;
begin
FHandle := FileOpen(TheFileName, 0);
try
Result :=
DateTimeToStr(FileDateToDateTime(FileGetDate(FHandle)));
finally
FileClose(FHandle);
end;
end;
<µå¶óÀ̺꿡 µð½ºÅ© Á¸Àç¿©ºÎ ¾Ë¾Æ³»±â>
function DriveReady(Drive : char):Boolean;
var
OldErrorMode : word;
OldDir : string;
begin
OldErrorMode:=
SetErrorMode(SEM_NOOPENFILEERRORBOX);
GetDir(0, OldDir);
Result:= True;
try
ChDir(Drive + ':\');
except
Result:= False
end;
ChDir(OldDir);
SetErrorMode(OldErrorMode);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if DriveReady('A') then
ShowMessage('Drive is Ready')
else ShowMessage('Drive not Ready');
end;
procedure TForm1.Button1Click(Sender: TObject);
var
DeskTop : TCanvas ;
begin
DeskTop := TCanvas.Create ;
try
with DeskTop do
Handle := GetWindowDC
(GetDesktopWindow) ;
with PaintBox1.Canvas do
CopyRect (Rect (0, 0, Width, Height), DeskTop,
Rect (0, 0, Width, Width))
finally
DeskTop.Free
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
MyBmp: TBitmap;
begin
MyBmp := TBitmap.Create;
with MyBmp do begin
Height := PaintBox1.Height;
Width := PaintBox1.Width;
Canvas.CopyRect (Rect (0, 0, Width,
Height), PaintBox1.Canvas, Rect (0, 0, Width, Height));
SaveToFile('c:\Grim.bmp');
end;
MyBmp.Free;
end;
¼ÖÁ÷È÷ ¹Ì¸®º¸±â¶ó±â º¸´Ù´Â ÅØ½ºÆ® ÆÄÀÏÀÇ
³»¿ëÀ» BitmapÆÄÀÏ·Î º¯È¯ÇÏ¿© ÀúÀåÇÕ´Ï´Ù.
procedure TForm1.Button1Click(Sender: TObject);
var
Bmp : TBitmap;
Line : string;
I : integer;
ch : char;
F : TextFile;
begin
I := 0;
Bmp := TBitmap.Create;
with Bmp do begin
Width := ClientRect.Right;
Height := ClientRect.Bottom;
AssignFile(F,
'c:\mytext.txt'); {ÀúÀåÇϰíÀÚ
ÇÏ´Â ÆÄÀϸíÀ» »ðÀÔ}
Reset(F);
repeat
Inc(I);
Line := '';
repeat
Read(F,
ch);
Line
:= Line+ch;
until ch= #10;
Canvas.TextOut(10,
I*20, Copy(Line, 1, Length(Line)-2));
until EOF(F);
CloseFile(F);
BitBlt(Canvas.Handle, 0, 0, Width, Height,
GetDc(Handle), ClientRect.Left, ClientRect.Top,
SRCCOPY);
SaveToFile('c:\preview.bmp');
Free;
end;
end;
ÆûÀÇ Å©±â¸¦ Á¶ÀýÇÒ ¶§ ÃÖ´ë, ÃÖ¼ÒÀÇ Å©±âÁ¦ÇÑÀ»
µÎ·Á¸é
"WM_GETMINMAXINFO"ÀÇ ¸Þ½ÃÁö Çڵ鷯¸¦
ÀÛ¼ºÇØ¾ß ÇÑ´Ù.
type
TForm1 = class(TForm)
procedure FormCreate(Sender:
TObjcet);
private
MinSize : TPoint;
//ÃÖ¼ÒÅ©±â
Á¦ÇÑ
MaxSize : TPoint;
//ÃÖ´ëÅ©±â
Á¦ÇÑ
procedure
WMGetMinMaxInfo(var Msg: TWMGetMinMaxInfo);
message
WM_GETMINMAXINFO;
//¸Þ½ÃÁö WM_GETMINMAXINFO¿¡
¹ÝÀÀÇÏ´Â ¸Þ¼Òµå
public
end;
procedure TForm1.WMGetMinMaxInfo(var Msg:
TWMGetMinMaxInfo);
begin
if visible then begin
Msg.MinMaxInfo^.PtMinTrackSize := MinSize;
Msg.MinMaxInfo^.PtMaxTrackSize := MaxSize;
end;
end;
procedure TForm1.FormCreate(Sender: TObject); //ÃÖ´ë,ÃÖ¼Ò »çÀÌÁî ÁöÁ¤
begin
MaxSize.X := 200;
MaxSize.Y := 500;
MinSize.X := 100;
MinSize.Y := 200;
end;
procedure TForm1.FormMouseDown(Sender: TObject; Button:
TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
R : TRect;
begin
R := BoundsRect;
InflateRect(R,-30,-30);
ClipCursor(@R);
end;
procedure TForm1.FormMouseUp(Sender: TObject; Button:
TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
ClipCursor(Nil);
end;
ÇÁ·Î±×·¥ ½ÃÀ۽à ³ªÅ¸³ª´Â ·Î°íȸéÀ» Á¦ÀÛÇÏ´Â
¹æ¹ýÀÌ´Ù. ÀÌ´Â ÇÁ·ÎÁ§Æ®ÆÄÀÏ(.dpr)¸¦ Á÷Á¢
¼öÁ¤Çؾ߸¸ ÇÑ´Ù.
Project Option¿¡¼ SplashFormÀ» Available
forms·Î ¿Å±ä´Ù.
program project1;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
Splash in 'Splash.pas' {SplashForm},
{$R *.RES}
begin
SplashForm :=
TSplashForm.Create(Application);
SplashForm.Show;
SplashForm.Update;
Application.CreateForm(TForm1, Form1);
SplashForm.Hide;
SplashForm.Free;
Application.Run;
end.
ÇϳªÀÇ Æû À§¿¡ ´Ù¼¸°³ÀÇ ÆÇ³ÚÀ» ¿Ã·Á³õ°í
°¢°¢ÀÇ ¼Ó¼ºÀ» ¾Æ·¡ÀÇ 'Ç¥1' °ú °°ÀÌ
¼³Á¤Çϰí,
ÆûÀÇ OnResizeÀ̺¥Æ® Çîµé·¯¸¦ »ý¼º ÇØ ¾Æ·¡ÀÇ
Äڵ带 ÀÔ·ÂÇÏÀÚ.
procedure TForm1.FormResize(Sender: TObject);
var
WindowRgn, HoleRgn : HRgn;
begin
WindowRgn := 0;
GetWindowRgn(Handle, WindowRgn);
DeleteObject(WindowRgn);
WindowRgn := CreateRectRgn(0,0,Width, Height);
HoleRgn := CreateRectRgn(Panel3.Width + 6,
Panel1.Height + 25,
Width
- (Panel4.Width + 6), Height - (Panel2.Height + 6));
CombineRgn(WindowRgn, WindowRgn, HoleRgn,
RGN_DIFF);
SetWindowRgn(Handle, WindowRgn, TRUE);
DeleteObject(HoleRgn);
end;
Ç¥1
---------------------------------
Panel1
---------------------------------
Align alTop
BevelOuter bvNone
Caption
Height 17
---------------------------------
Panel2
---------------------------------
Align alBottom
BevelOuter bvNone
Caption
Height 17
---------------------------------
Panel3
---------------------------------
Align alRight
BevelOuter bvNone
Caption
Width 17
---------------------------------
Panel4
---------------------------------
Align alRight
BevelOuter bvNone
Caption
Width 17
---------------------------------
Panel5
---------------------------------
Align alClient
BevelOuter bvLowered
Caption
---------------------------------
procedure TForm1.FormCreate(Sender : TObjcet);
var
MyForm : HRGN;
begin
MyForm := CreateEllipticRgn(0, 0, Width,
Height); //Ÿ¿øÀÇ Æû ¼³Á¤
SetWindowRgn(Handle, MyForm, TRUE);
end;
procedure TForm1.FormDestory(Sender : TObject);
begin
DeleteObject(MyForm);
end;
´Ù°¢ÇüÀÇ Æûµµ ¸¶Âù°¡Áö·Î CreatepolygonRgnÇÔ¼ö¸¦
»ç¿ëÇØ ¸¸µé ¼ö ÀÖ´Ù.
¾Æ·¡¿Í °°ÀÌ ÇÏ¸é ¿ª»ï°¢ÇüÀÇ ÆûÀÌ ¸¸µé¾îÁø´Ù.
procedure TForm1.FormCreate(Sender : TObject);
var
MyForm : HRGN;
Pixel : array[0..2] of TPoint;
begin
Pixel[0] := Point(0, 0);
//ÆûÀÇ ÁÂÇ¥¸¦
¼³Á¤
Pixel[1] := Point(Width, 0);
Pixel[2] := Point(Width div 2, Height);
MyForm := CreatePolygonRgn(Pixel, 3,
ALTERNATE);
SetWindowRgn(Handle, MyForm, TRUE);
end;
µ¨ÆÄÀÌ¿¡¼´Â ÈùÆ®¼Ó¼ºÀ» ½±°Ô ±¸ÇöÇÒ ¼ö ÀÖ´Â
¹Ý¸é ÈùÆ®ÀÇ ¼Ó¼ºÀ» ¹Ù²Ü ¼ö ÀÖ´Â ÇÁ·ÎÆÛƼ°¡
¾ø½À´Ï´Ù.
¾Æ·¡ÀÇ ¹æ¹ýÀ» ÅëÇØ ¼Ó¼ºÀ» ¹Ù²ãº¸¼¼¿ä.
....
type
TUserHint = class(THintWindow)
constructor Create(AOwner: TComponent); override;
end;
//interfaceºÎ¿¡ »ðÀÔ
...
constructor TUserHint.Create;
begin
inherited Create(AOwner);
Canvas.Font.Name := '±Ã¼Ã¼'; // ¿øÇÏ´Â ÆùÆ®ÀÇ À̸§ ÁöÁ¤
Canvas.Font.Size := 10;
//
¿øÇÏ´Â ÆùÆ®ÀÇ »çÀÌÁî ÁöÁ¤
Canvas.Brush.Color :=
clYellow; // ¿øÇÏ´Â
¹ÙÅÁ»ö ÁöÁ¤
end;
//
implementationºÎ¿¡ »ðÀÔ
procedure TForm1.FormCreate(Sender: TObjcet);
var
OldHint : Boolean;
begin
OldHint := Application.ShowHint;
Application.ShowHint := False;
HintWindowClass := TUserHint;
Application.ShowHint := OldHint;
end;
end.
public
{ Public declarations }
procedure ShowHint(Sender : TObject);
//ÈùÆ®¸¦ º¸À̱âÀ§ÇÑ ÇÁ·Î½ÃÀú
end;
procedure TForm1.ShowHint(Sender : TObject);
begin
StatusBar1.Panels[0].Text :=
Application.Hint;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.HintPause := 100; //ÈùÆ®°¡ ³ªÅ¸³ª´Â ¼ÓµµÁ¶Àý
Application.OnHint := ShowHint;
end;
¶ÇÇÑ ÈùÆ®¿Í »óŹٿ¡ µ¿½Ã¿¡ ÈùÆ®¸¦ ³ªÅ¸³»°íÀÚ
ÇÏ´Â °æ¿ì¿¡´Â Hint¼Ó¼ºÀ» '|'¹®ÀÚ¸¦ ²÷¾î¼
µ¿½Ã¿¡ ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. ("dz¼±µµ¿ò¸»|OnHintÀ̺¥Æ®¿¡¼
»ç¿ëÇÒ ÈùÆ®")
ÀÓÀÇÀÇ µå¶óÀ̺ê ŸÀÔÀ» ¾Ë·Á¸é, À©µµ¿ì API ÇÔ¼ö Áß GetDriveTypeÀ̶ó´Â ÇÔ¼ö¸¦ »ç¿ëÇÏ¸é µÈ´Ù.

procedure TForm1.Button1Click(Sender: TObject);
var
Drive:
Char;
DriveLetter: String[4];
begin
for
Drive := 'A' to 'Z' do
begin
DriveLetter
:= Drive + ':\';
// Syntax
//
GetDriveType(
// lpRootPathName:
PChar {a pointer to the root path string}
//
): UINT; {returns
a value based on the drive type}
case
GetDriveType(PChar(Drive + ':\')) of
Drive_UnKnown
: ListBox1.Items.Add( DriveLetter + ' : ¾Ë ¼ö ¾ø´Â µå¶óÀ̺ê');
Drive_Removable:
ListBox1.Items.Add( DriveLetter + ' : Ç÷ÎÇÇ µå¶óÀ̺ê');
Drive_Fixed:
ListBox1.Items.Add( DriveLetter + ' : ÇÏµå µå¶óÀ̺ê');
Drive_Remote:
ListBox1.Items.Add( DriveLetter + ' : ³×Æ®¿öÅ© µå¶óÀ̺ê');
Drive_Cdrom:
ListBox1.Items.Add( DriveLetter + ' : CD-Rom µå¶óÀ̺ê');
Drive_RamDisk:
ListBox1.Items.Add( DriveLetter + ' : RamDisk µå¶óÀ̺ê');
end;
end;
end;