DELPHI 기본 개발 기술
◇[DELPHI] 네트워크 환경에서 파일 복사
셸라피를 사용합니다;
copyfile(pchar('newfile.txt'),pchar('//computername/direction/targer.txt'),false);
◇[DELPHI]는 마우스 드래그 효과를 생성합니다.
PANEL의 LABEL과 같은 MouseMove 이벤트, DragOver 이벤트, EndDrag 이벤트를 통해 구현됩니다.
varxpanel,ypanel,xlabel,ylabel:정수;
PANEL의 MouseMove 이벤트:xpanel:=x;ypanel:=y;
PANEL의 DragOver 이벤트:xpanel:=x;ypanel:=y;
LABEL의 MouseMove 이벤트:xlabel:=x;ylabel:=y;
LABEL의 EndDrag 이벤트: label.left:=xpanel-xlabel;label.top:=ypanel-ylabel;
◇[DELPHI] WINDOWS 디렉토리 획득
셸라피를 사용합니다;
varwindir:배열[0..255]ofchar;
getwindowsdirectory(windir,sizeof(windir));
또는 레지스트리 위치에서 읽으십시오.
HKEY_LOCAL_MACHINE/소프트웨어/Microsoft/Windows/현재 버전
SystemRoot 키(다음으로 획득): C:/WINDOWS
◇[DELPHI] FORM 또는 기타 컨테이너에 선 그리기
varx,y:배열[0..50]정수;
canvas.pen.color:=clred;
canvas.pen.style:=PSDash;
form1.canvas.moveto(trunc(x[i]),trunc(y[i]));
form1.canvas.lineto(trunc(x[j]),trunc(y[j]));
◇[DELPHI] 문자열 목록 사용법
vartips:tstringlist;
팁:=tstringlist.create;
Tips.loadfromfile('filename.txt');
edit1.text:=팁[0];
Tips.add('lastlineadditionstring');
Tips.insert(1,'insertstringatNO2line');
Tips.savetofile('newfile.txt');
팁.무료;
◇[DELPHI]간단한 클립보드 조작
richedit1.selectall;
richedit1.copytoclipboard;
richedit1.cuttoclipboard;
edit1.pastefromclipboard;
◇[DELPHI] 파일 및 디렉토리 작업에 대하여
Chdir('c:/abcdir');디렉토리로 이동
Mkdir('dirname');디렉토리 생성
Rmdir('dirname'); 디렉토리 삭제
GetCurrentDir;//'/' 없이 현재 디렉터리 이름을 가져옵니다.
Getdir(0,s);//작업 디렉터리 이름 가져오기 s:='c:/abcdir';
Deletfile('abc.txt');//파일 삭제
Renamefile('old.txt','new.txt');//파일 이름 바꾸기
ExtractFilename(filelistbox1.filename);//파일 이름을 가져옵니다.
ExtractFileExt(filelistbox1.filename);//파일 접미사 가져오기
◇[DELPHI] 프로세스 파일 속성
attr:=filegetattr(filelistbox1.filename);
if(attrandfaReadonly)=faReadonlythen...//읽기 전용
if(attrandfaSysfile)=faSysfilethen...//시스템
if(attrandfaArchive)=faArchivethen...//아카이브
if(attrandfaHidden)=faHiddenthen...//숨기기
◇[DELPHI]프로그램 외부에서 파일 실행
WINEXEC//실행 파일 호출
winexec('command.com/ccopy*.*c:/',SW_Normal);
wineexec('startabc.txt');
ShellExecute 또는 ShellExecuteEx//파일 연결 프로그램 시작
functionexecutefile(constfilename,params,defaultDir:string;showCmd:integer):THandle;
ExecuteFile('C:/abc/a.txt','x.abc','c:/abc/',0);
ExecuteFile('http://tingweb.yeah.net','','',0);
ExecuteFile('mailto:[email protected]','','',0);
◇[DELPHI] 시스템에서 실행중인 프로세스 이름을 알아낸다
varhCurrentWindow:HWnd;szText:array[0..254]ofchar;
시작하다
hCurrentWindow:=Getwindow(handle,GW_HWndFrist);
whilehCurrentWindow<>0do
시작하다
ifGetwindowtext(hcurrnetwindow,@sztext,255)>0thenlistbox1.items.add(strpas(@sztext));
hCurrentWindow:=Getwindow(hCurrentwindow,GW_HWndNext);
끝;
끝;
◇[DELPHI]어셈블리 매립에 대해
AsmEnd;
EAX, ECX 및 EDX는 마음대로 수정할 수 있습니다. ESI, EDI, ESP, EBP 및 EBX는 수정할 수 없습니다.
◇[DELPHI]유형 변환 기능에 대해
FloatToStr//부동소수점을 문자열로
FloatToStrF//부동 소수점을 문자열로 포맷
IntToHex//정수에서 16진수로
시간까지의 시간
DateToStr
DateTimeToStr
FmtStr//지정된 형식으로 문자열을 출력합니다.
FormatDateTime('YYYY-MM-DD,hh-mm-ss',DATE);
◇[DELPHI]문자열 프로시저 및 함수
Insert(obj,target,pos);//pos 위치에 문자열 target이 삽입됩니다. 삽입 결과가 대상의 최대 길이보다 크면 추가 문자가 잘립니다. Pos가 255를 벗어나면 연산 에러가 발생합니다. 예를 들어, st:='Brian'이면 Insert('OK',st,2)는 st를 'BrOKian'으로 변경합니다.
삭제(st,pos,Num);//st 문자열의 pos(정수) 위치부터 시작하여 Num(정수) 문자의 하위 문자열을 삭제합니다. 예를 들어, st:='Brian'이면 삭제(st,3,2)는 Brn이 됩니다.
Str(value,st);//숫자값(정수 또는 실수형)을 문자열로 변환하여 st에 넣습니다. 예를 들어 a=2.5E4인 경우 str(a:10,st)는 st 값을 '25000'으로 만듭니다.
Val(st,var,code);//문자열 표현식 st를 해당 정수 또는 실수 값으로 변환하여 var에 저장합니다. St는 숫자 값을 나타내는 문자열이어야 하며 숫자 상수에 대한 규칙을 준수해야 합니다. 변환 과정에서 오류가 감지되지 않으면 변수 코드는 0으로 설정되고, 그렇지 않으면 첫 번째 오류 문자 위치로 설정됩니다. 예를 들어 st:=25.4E3, x는 실제 변수인 경우 val(st,x,code)는 X 값을 25400으로 만들고 코드 값을 0으로 만듭니다.
Copy(st.pos.num);//st 문자열의 pos(정수) 위치에서 시작하고 num(정수) 문자를 포함하는 하위 문자열을 반환합니다. pos가 st 문자열의 길이보다 크면 빈 문자열이 반환됩니다. pos가 255를 벗어나면 런타임 오류가 발생합니다. 예를 들어, st:='Brian'이면 Copy(st,2,2)는 'ri'를 반환합니다.
Concat(st1,st2,st3...,stn);//모든 독립변수가 나타내는 문자열을 주어진 순서대로 연결하고, 연결된 값을 반환합니다. 결과의 길이가 255이면 런타임 오류가 발생합니다. 예를 들어 st1:='Brian',st2:='',st3:='Wilfred'이면 Concat(st1,st2,st3)은 'BrianWilfred'를 반환합니다.
Length(st);//문자열 표현식 st의 길이를 반환합니다. 예를 들어 st:='Brian'이면 Length(st)의 반환 값은 5입니다.
Pos(obj, target);//대상 문자열 target에서 문자열 obj가 처음 나타나는 위치를 반환합니다. target에 일치하는 문자열이 없으면 Pos 함수의 반환 값은 0입니다. 예를 들어 target:='BrianWilfred'이면 Pos('Wil',target)의 반환 값은 7이고 Pos('hurbet',target)의 반환 값은 0입니다.
◇[DELPHI]레지스트리 처리에 대하여
사용레지스트리;
varreg:트레지스트리;
reg:=Tregistry.create;
reg.rootkey:='HKey_Current_User';
reg.openkey('ControlPanel/Desktop',false);
reg.WriteString('TitleWallpaper','0');
reg.writeString('Wallpaper',filelistbox1.filename);
reg.closereg;
등록.무료;
◇[DELPHI]키보드 상수명에 대하여
VK_BACK/VK_TAB/VK_RETURN/VK_SHIFT/VK_Control/VK_MENU/VK_PAUSE/VK_ESCAPE
/VK_SPACE/VK_LEFT/VK_RIGHT/VK_UP/VK_DOWN
F1--F12:$70(112)--$70억(123)
AZ:$41(65)--$5A(90)
0-9:$30(48)--$39(57)
◇[DELPHI] 프로그램의 모국어를 사전에 결정
DELPHI 소프트웨어의 DOS 프롬프트: ThisPROgramMustBeRunUnderWin32.
VC++ 소프트웨어에 대한 DOS 프롬프트: ThisProgramCannotBeRunInDOSMode.
◇[DELPHI]쿠키 운영
response.cookies("이름").domain:='http://www.086net.com';
withresponse.cookies.adddo
시작하다
이름:='사용자 이름';
값:='사용자 이름';
끝
◇문서 메뉴 링크에 [DELPHI] 추가
는shellapi,shlOBJ를 사용합니다.
shAddToRecentDocs(shArd_path,pchar(filepath));//연결 추가
shAddToRecentDocs(shArd_path,nil);//지우기
◇[기타] 지능형 ABC 입력기 사전 백업
창/시스템/user.rem
창/시스템/tmmr.rem
◇[DELPHI] 마우스 버튼 결정
ifGetAsyncKeyState(VK_LButton)<>0then...//왼쪽 버튼
ifGetAsyncKeyState(VK_MButton)<>0then...//가운데 키
ifGetAsyncKeyState(VK_RButton)<>0then...//오른쪽 클릭
◇[DELPHI]폼의 최대 표시 설정
onFormCreate 이벤트
self.width:=화면.폭;
self.height:=화면.높이;
◇[DELPHI] 메시지 수신 버튼
OnCreate 이벤트에서 처리됨: application.OnMessage:=MyOnMessage;
절차TForm1.MyOnMessage(varMSG:TMSG;varHandle:Boolean);
시작하다
ifmsg.message=256then...//모든 키
ifmsg.message=112그러면...//F1
ifmsg.message=113그러면...//F2
끝;
◇[기타]공유 폴더 숨기기
공유 효과: 접근 가능하지만 보이지 않음(자원 관리, 네트워크 환경에서)
공유 이름: 방향$
방문: //computer/direction/
◇[javaScript]JavaScript 웹 페이지에서 일반적으로 사용되는 효과
웹페이지가 60초 후에 닫힐 예정입니다.
창 닫기
폐쇄
예정된 URL 전송
작동 중에 TQuery를 구성하는 것도 가능합니다. 자세한 내용은 Delphi 도움말을 참조하세요.
□◇[DELPHI] 이미지의 특정 지점의 RGB 값을 가져옵니다.
절차TForm1.Image1MouseDown(Sender:TObject;Button:TMouseButton;
Shift:TShiftState;X,Y:정수);
var
빨간색, 녹색, 파란색:바이트;
i:정수;
시작하다
i:=image1.Canvas.Pixels[x,y];
파란색:=GetBValue(i);
녹색:=GetGValue(i):
빨간색:=GetRValue(i);
Label1.Caption:=inttostr(빨간색);
Label2.Caption:=inttostr(녹색);
Label3.Caption:=inttostr(파란색);
끝;
□◇[DELPHI]날짜 형식 분해 및 변환 정보
가변,월,일:Word;now2:Tdatatime;
now2:=날짜();
decodate(현재2,년,월,일);
lable1.Text:=inttostr(년)+'년'+inttostr(월)+'월'+inttostr(일)+'일';
◇[DELPHI]현재 네트워크 연결 모드를 확인하는 방법
판단 결과는 MODEM, LAN 또는 프록시 서버 모드입니다.
사용wininet;
FunctionConnectionKind:boolean;
varflags:dword;
시작하다
결과:=InternetGetConnectedState(@flags,0);
ifResultthen
시작하다
if(flagsandINTERNET_CONNECTION_MODEM)=INTERNET_CONNECTION_MODEMthen
시작하다
showmessage('모뎀');
끝;
if(flagsandINTERNET_CONNECTION_LAN)=INTERNET_CONNECTION_LANthen
시작하다
showmessage('LAN');
끝;
if(flagsandINTERNET_CONNECTION_PROXY)=INTERNET_CONNECTION_PROXYthen
시작하다
showmessage('프록시');
끝;
if(flagsandINTERNET_CONNECTION_MODEM_BUSY)=INTERNET_CONNECTION_MODEM_BUSYthen
시작하다
showmessage('ModemBusy');
끝;
끝;
끝;
◇[DELPHI]문자열이 유효한 이메일 주소인지 확인하는 방법
functionIsEMail(EMail:String):Boolean;
vars:문자열;ETpos:정수;
시작하다
ETpos:=pos('@',EMail);
ifETpos>1그러면
시작하다
s:=copy(EMail,ETpos+1,Length(EMail));
if(pos('.',s)>1)and(pos('.',s)<길이(들))then
결과:=trueelse결과:=false;
끝
또 다른
결과:=false;
끝;
◇[DELPHI] 시스템이 인터넷에 연결되어 있는지 확인
URL.DLL의 InetIsOffline 함수를 도입해야 합니다.
함수 선언은 다음과 같습니다.
functionInetIsOffline(Flag:Integer):Boolean;stdcall;external'URL.DLL';
그런 다음 함수를 호출하여 시스템이 인터넷에 연결되어 있는지 확인할 수 있습니다.
ifInetIsOffline(0)thenShowMessage('연결되지 않았습니다!')
elseShowMessage('연결되었습니다!');
이 함수는 로컬 시스템이 인터넷에 연결되어 있지 않으면 TRUE를 반환합니다.
첨부된:
IE 또는 OFFICE97을 사용하는 대부분의 시스템에는 호출에 사용할 수 있는 이 DLL이 있습니다.
InetIsOffline
BOOLInetIsOffline(
DWORDdw플래그,
);
◇[DELPHI]WAV 파일을 쉽게 재생 및 일시 정지
사용mm시스템;
functionPlayWav(constFileName:string):Boolean;
시작하다
결과:=PlaySound(PChar(파일 이름),0,SND_ASYNC);
끝;
절차StopWav;
var
버퍼:배열[0..2]ofchar;
시작하다
버퍼[0]:=#0;
PlaySound(버퍼,0,SND_PURGE);
끝;
◇[DELPHI] 머신 BIOS 정보 가져오기
withMemo1.Linesdo
시작하다
Add('메인보드바이오스이름:'+^I+string(Pchar(Ptr($FE061))));
Add('MainBoardBiosCopyRight:'+^I+string(Pchar(Ptr($FE091))));
Add('MainBoardBiosDate:'+^I+string(Pchar(Ptr($FFFF5))));
Add('MainBoardBiosSerialNo:'+^I+string(Pchar(Ptr($FEC71))));
끝;
◇[DELPHI] 인터넷에서 파일 다운로드
useUrlMon;
functionDownloadFile(Source,Dest:string):Boolean;
시작하다
노력하다
결과:=UrlDownloadToFile(nil,PChar(source),PChar(Dest),0,nil)=0;
제외하고
결과:=거짓;
끝;
끝;
ifDownloadFile('http://www.borland.com/delphi6.zip,'c:/kylix.zip')then
ShowMessage('다운로드 성공')
elseShowMessage('다운로드 실패')
◇[DELPHI]서버 IP 주소 확인
사용winsock
functionIPAddrToName(IPAddr:String):String;
var
SockAddrIn:TSockAddrIn;
HostEnt:PHostEnt;
WSA데이터:TWSA데이터;
시작하다
WSA스타트업($101,WSAData);
SockAddrIn.sin_addr.s_addr:=inet_addr(PChar(IPAddr));
HostEnt:=gethostbyaddr(@SockAddrIn.sin_addr.S_addr,4,AF_INET);
ifHostEnt<>nilthenresult:=StrPas(Hostent^.h_name)elseresult:='';
끝;
◇[DELPHI] 바로가기에서 연결받기
functionExeFromLink(constlinkname:string):string;
var
F디르,
이름,
Exe이름:PChar;
z:정수;
시작하다
ExeName:=StrAlloc(MAX_PATH);
FName:=StrAlloc(MAX_PATH);
FDir:=StrAlloc(MAX_PATH);
StrPCopy(FName,ExtractFileName(링크 이름));
StrPCopy(FDir,ExtractFilePath(링크 이름));
z:=FindExecutable(FName,FDir,ExeName);
ifz>32그럼
결과:=StrPas(ExeName)
또 다른
결과:='';
StrDispose(FDir);
StrDispose(F이름);
StrDispose(Exe이름);
끝;
◇[DELPHI]TCombobox 자동완성 제어
{TCombobox의 'Sorted' 속성을 true로 설정}
varlastKey:Word;//전역 변수
//TCombobox의 OnChange 이벤트
절차TForm1.AutoCompleteChange(Sender:TObject);
var
검색 문자열:문자열;
retVal:정수;
시작하다
SearchStr:=(SenderasTCombobox).Text;
iflastKey<>VK_BACKthen//backspace:VK_BACK또는$08
시작하다
retVal:=(SenderasTCombobox).Perform(CB_FINDSTRING,-1,LongInt(PChar(SearchStr)));
ifretVal>CB_Errthen
시작하다
(SenderasTCombobox).ItemIndex:=retVal;
(SenderasTCombobox).SelStart:=Length(SearchStr);
(SenderasTCombobox).SelLength:=
(길이((SenderasTCombobox).Text)-길이(SearchStr));
end;//retVal>CB_Err
end;//lastKey<>VK_BACK
lastKey:=0;//resetlastKey
끝;
//TCombobox의 OnKeyDown 이벤트
절차TForm1.AutoCompleteKeyDown(Sender:TObject;varKey:Word;
Shift:TShiftState);
시작하다
lastKey:=키;
끝;
◇[DELPHI]디렉터리 삭제 방법
functionEmptyDirectory(TheDirectory:String;Recursive:Boolean):
부울;
var
검색Rec:TSearchRec;
해상도:정수;
시작하다
결과:=거짓;
TheDirectory:=NormalDir(The디렉토리);
Res:=FindFirst(TheDirectory+'*.*',faAnyFile,SearchRec);
노력하다
whileRes=0do
시작하다
if(검색 녹음 이름<>'.')and(검색 녹음 이름<>'..')then
시작하다
if((SearchRec.AttrandfaDirectory)>0)및재귀
그런 다음 시작
빈디렉토리(TheDirectory+SearchRec.Name,True);
RemoveDirectory(PChar(TheDirectory+SearchRec.Name));
끝
다른 시작
DeleteFile(PChar(TheDirectory+SearchRec.Name))
끝;
끝;
해상도:=다음 찾기(SearchRec);
끝;
결과:=참;
마지막으로
FindClose(SearchRec.FindHandle);
끝;
끝;
◇[DELPHI]디렉터리 크기 계산 방법
functionGetDirectorySize(constADirectory:string):Integer;
var
디렉터리:TSearchRec;
Ret:정수;
경로:문자열;
시작하다
결과:=0;
경로:=ExtractFilePath(ADirectory);
Ret:=Sysutils.FindFirst(ADirectory,faAnyFile,Dir);
ifRet<>NO_ERRORthenexit;
노력하다
whileret=NO_ERRORdo
시작하다
inc(결과,방향.크기);
if(Dir.Attrin[faDirectory])and(Dir.Name[1]<>'.')then
Inc(Result,GetDirectorySize(Path+Dir.Name+'/*.*'));
Ret:=Sysutils.FindNext(Dir);
끝;
마지막으로
Sysutils.FindClose(Dir);
끝;
끝;
◇[DELPHI]제거 목록에 설치 프로그램을 추가하는 방법
다음과 같이 레지스트리를 작동합니다.
1. HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Uninstall 키 아래에 원하는 이름으로 기본 키를 생성합니다.
예HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Uninstall/MyUninstall
2. HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Uninstall/MyUnistall 아래의 두 가지 문자열 값을 입력합니다.
이 두 문자열 값의 이름은 DisplayName과 UninstallString이라는 구체적입니다.
3. 'AimingUninstallone'과 같이 "애플리케이션 삭제 목록"에 표시된 이름에 DisplayName 문자열 값을 할당합니다.
C:/WIN97/uninst.exe-f "C:/TestPro/aimTest.isu"와 같이 실행된 삭제 명령에 UninstallString 문자열을 할당합니다.
◇[DELPHI]WM_QUERYEND세션 종료 메시지를 가로채었습니다.
유형
TForm1=클래스(TForm)
절차WMQueryEndSession(varMessage:TWWMQueryEndSession);messageWM_QUERYENDSESSION;
절차CMEraseBkgnd(varMessage:TWMEraseBkgnd);MessageWM_ERASEBKGND;
사적인
{개인선언}
공공의
{공개선언}
끝;
절차TForm1.WMQueryEndSession(varMessage:TWMQueryEndSession);
시작하다
Showmessage('컴퓨터가 곧 종료됩니다');
끝;
◇[DELPHI]온라인 이웃 찾기
Proceduregetnethood();//NT는 서버로 사용되며 디버깅은 WIN98에서 전달됩니다.
var
a,i:정수;
오류 코드:정수;
netres:배열[0..1023]ofnetresource;
열거형 핸들:핸들;
열거형:dword;
버퍼 크기:dword;
s:문자열;
mylistitems:tlistitems;
mylistitem:tlistitem;
모든 도메인:tstrings;
시작//목록컴퓨터목록보기모든 컴퓨터 목록;제어 센터는양식입니다.
alldomain:=tstringlist.Create;
withnetres[0]dobegin
dwscope:=RESOURCE_GLOBALNET;
dwtype:=RESOURCETYPE_ANY;
dwdisplaytype:=RESOURCEDISPLAYTYPE_DOMAIN;
dwusage:=RESOURCEUSAGE_CONTAINER;
lplocalname:=nil;
lpremote이름:=nil;
lp설명:=nil;
lppprovider:=nil;
end;//모든 도메인 가져오기
errcode:=wnetopenenum(RESOURCE_GLOBALNET,RESOURCETYPE_ANY,RESOURCEUSAGE_CONTAINER,@netres[0],enumhandle);
iferrcode=NO_ERROR다음에 시작하세요
열거:=1024;
buffersize:=sizeof(netres);
errcode:=wnetenumresource(enumhandle,enumentries,@netres[0],buffersize);
끝;
a:=0;
mylistitems:=controlcenter.lstcomputer.Items;
mylistitems.Clear;
while(string(netres[a].lpprovider)<>'')and(errcode=NO_ERROR)do
시작하다
alldomain.Add(netres[a].lpremotename);
a:=a+1;
끝;
wnetcloseenum(enumhandle);
//모든 컴퓨터 가져오기
mylistitems:=controlcenter.lstcomputer.Items;
mylistitems.Clear;
fori:=0toalldomain.Count-1do
시작하다
withnetres[0]dobegin
dwscope:=RESOURCE_GLOBALNET;
dwtype:=RESOURCETYPE_ANY;
dwdisplaytype:=RESOURCEDISPLAYTYPE_SERVER;
dwusage:=RESOURCEUSAGE_CONTAINER;
lplocalname:=nil;
lpremotename:=pchar(모든도메인[i]);
lp설명:=nil;
lppprovider:=nil;
끝;
ErrCode:=WNetOpenEnum(RESOURCE_GLOBALNET,RESOURCETYPE_ANY,RESOURCEUSAGE_CONTAINER,@netres[0],EnumHandle);
iferrcode=NO_ERROR그러면
시작하다
EnumEntries:=1024;
BufferSize:=SizeOf(NetRes);
ErrCode:=WNetEnumResource(EnumHandle,EnumEntries,@NetRes[0],BufferSize);
끝;
a:=0;
while(string(netres[a].lpprovider)<>'')and(errcode=NO_ERROR)do
시작하다
mylistitem:=mylistitems.추가;
mylistitem.ImageIndex:=0;
mylistitem.Caption:=uppercase(stringreplace(string(NetRes[a].lpremotename),'//','',[rfReplaceAll]));
a:=a+1;
끝;
wnetcloseenum(enumhandle);
끝;
끝;
◇[DELPHI] 특정 컴퓨터에서 공유 디렉터리 가져오기
절차getsharefolder(constcomputername:string);
var
오류 코드,a:정수;
netres:배열[0..1023]ofnetresource;
열거형 핸들:핸들;
열거형,버퍼 크기:dword;
s:문자열;
mylistitems:tlistitems;
mylistitem:tlistitem;
mystrings:tstringlist;
시작하다
withnetres[0]dobegin
dwscope:=RESOURCE_GLOBALNET;
dwtype:=RESOURCETYPE_DISK;
dwdisplaytype:=RESOURCEDISPLAYTYPE_SHARE;
dwusage:=RESOURCEUSAGE_CONTAINER;
lplocalname:=nil;
lpremotename:=pchar(컴퓨터 이름);
lp설명:=nil;
lppprovider:=nil;
end;//루트노드를 구한다
errcode:=wnetopenenum(RESOURCE_GLOBALNET,RESOURCETYPE_DISK,RESOURCEUSAGE_CONTAINER,@netres[0],enumhandle);
iferrcode=NO_ERROR그러면
시작하다
EnumEntries:=1024;
BufferSize:=SizeOf(NetRes);
ErrCode:=WNetEnumResource(EnumHandle,EnumEntries,@NetRes[0],BufferSize);
끝;
wnetcloseenum(enumhandle);
a:=0;
mylistitems:=controlcenter.lstfile.Items;
mylistitems.Clear;
while(string(netres[a].lpprovider)<>'')and(errcode=NO_ERROR)do
시작하다
mylistitemsdo와 함께
시작하다
mylistitem:=추가;
mylistitem.ImageIndex:=4;
mylistitem.Caption:=extractfilename(netres[a].lpremotename);
끝;
a:=a+1;
끝;
끝;
◇[DELPHI] 하드 드라이브 일련번호 받기
varSerialNum:pdword;a,b:dword;Buffer:array[0..255]ofchar;
시작하다
ifGetVolumeInformation('c:/',Buffer,SizeOf(Buffer),SerialNum,a,b,nil,0)thenLabel1.Caption:=IntToStr(SerialNum^);
끝;
◇[DELPHI]MEMO의 자동 페이지 넘김
ProcedureScrollMemo(메모:TMemo;방향:문자);
시작하다
사례 방향
'd':시작
SendMessage(Memo.Handle,{HWNDoftheMemoControl}
WM_VSCROLL,{WindowsMessage}
SB_PAGEDOWN,{ScrollCommand}
0){사용되지 않음}
끝;
'u':시작
SendMessage(Memo.Handle,{HWNDoftheMemoControl}
WM_VSCROLL,{WindowsMessage}
SB_PAGEUP,{ScrollCommand}
0);{사용되지 않음}
끝;
끝;
끝;
절차TForm1.Button1Click(Sender:TObject);
시작하다
ScrollMemo(Memo1,'d');//페이지를 띄웁니다
끝;
절차TForm1.Button1Click(Sender:TObject);
시작하다
ScrollMemo(Memo1,'u');//페이지를 아래로 내립니다.
끝;
◇[DELPHI]DBGrid에서 다음 위치로 Enter 키를 누르세요(Tab 키)
절차TForm1.DBGrid1KeyPress(Sender:TObject;varKey:Char);
시작하다
ifKey=#13그러면
ifDBGrid1.Columns.Grid.SelectedIndex<DBGrid1.Columns.Count-1then
DBGrid1.Columns[DBGrid1.Columns.grid.SelectedIndex+1].Field.FocusControl
또 다른
시작하다
표1.다음;
DBGrid1.Columns[0].field.FocusControl;
끝;
끝;
◇[DELPHI]컨트롤 설치방법
설치 방법:
1. 단일 컨트롤의 경우 구성요소-->설치구성요소..->PAS 또는 DCU 파일-->설치
2. *.dpk 파일이 포함된 제어 패키지의 경우 파일-->열기(드롭다운 목록 상자에서 *.dpk 선택)-->설치를 클릭하면 됩니다.
3. *.dpl 파일이 포함된 제어 패키지의 경우 InstallPackages-->Add-->dpl 파일 이름입니다.
4. 위 Install 버튼이 유효하지 않다면 Compile 버튼을 눌러보세요.
5. Runtimelib인 경우 옵션 아래의 패키지 아래 런타임팩에 추가합니다.
컴파일 중에 파일을 찾을 수 없다는 메시지가 나타나면 일반적으로 컨트롤의 설치 디렉터리가 Delphi의 Lib 디렉터리에 없기 때문입니다. 문제를 해결하는 방법에는 두 가지가 있습니다.
1. 원본 설치 파일을 delphi의 Lib 디렉터리에 복사합니다.
2. 또는 도구-->환경 옵션의 Delphi Lib 디렉터리에 컨트롤의 원래 코드 경로를 추가합니다.
◇[DELPHI] 디렉터리 완전삭제(deltree)
절차TForm1.DeleteDirectory(strDir:String);
var
sr:TSearchRec;
파일속성:정수;
str파일이름:문자열;
strPth: 문자열;
시작하다
strpth:=Getcurrentdir();
FileAttrs:=faAnyFile;
ifFindFirst(strpth+'/'+strdir+'/*.*',FileAttrs,sr)=0then
시작하다
if(sr.AttrandFileAttrs)=sr.Attrthen
시작하다
strfilename:=sr.이름;
iffileexists(strpth+'/'+strdir+'/'+strfilename)then
deletefile(strpth+'/'+strdir+'/'+str파일이름);
끝;
whileFindNext(sr)=0do
시작하다
if(sr.AttrandFileAttrs)=sr.Attrthen
시작하다
strfilename:=sr.name;
iffileexists(strpth+'/'+strdir+'/'+strfilename)then
deletefile(strpth+'/'+strdir+'/'+str파일이름);
끝;
끝;
찾기닫기(sr);
제거된ir(strpth+'/'+strdir);
끝;
끝;
◇[DELPHI] TMemo 컨트롤의 현재 커서의 행 및 열 정보를 Tpoint로 가져옵니다.
1.functionReadCursorPos(SourceMemo:TMemo):TPoint;
varPoint:TPoint;
시작하다
point.y:=SendMessage(SourceMemo.Handle,EM_LINEFROMCHAR,SourceMemo.SelStart,0);
point.x:=SourceMemo.SelStart-SendMessage(SourceMemo.Handle,EM_LINEINDEX,point.y,0);
결과:=점;
끝;
2.LineLength:=SendMessage(memol.handle,EM-LINELENGTH,Cpos,0);//줄 길이
◇[DELPHI]하드디스크 일련번호 읽기
functionGetDiskSerial(DiskChar:Char):string;
var
일련번호:pdword;
a,b:dword;
버퍼:배열[0..255]ofchar;
시작하다
결과:="";
ifGetVolumeInformation(PChar(diskchar+":/"),Buffer,SizeOf(Buffer),SerialNum,
a,b,nil,0)그런 다음
결과:=IntToStr(SerialNum^);
끝;
◇[인터넷]CSS 공통 종합 기술
1. P:first-letter{font-size:300%;float:left}//첫 번째 문자는 일반 글꼴보다 3배 더 커집니다.
2.
3. 스타일 시트 삽입
4.
Arial//SPAN은 STYLE, CLASS 및 ID 속성을 허용합니다.
DIV에는 단락, 제목, 표 및 기타 부분이 포함될 수 있습니다.
5.
6. //정의는 3을 참조하세요. 7. 부동산 목록 글꼴 스타일:글꼴 스타일:[normal|italic|oblique]; 글꼴 크기: 글꼴 크기: [xx-small|x-small|small|medium|large|x-large|xx-large|larger|smaller|<length>|<percent>] 텍스트 장식: 텍스트 장식: [밑줄||윗줄||줄 관통||깜박임] 텍스트 변환:[없음|대문자|대문자|소문자] 배경색:배경색:[<색상>|투명] 배경 이미지:배경 이미지:[ 줄 높이:[일반|<숫자>|<길이>|<퍼센트>] 테두리 스타일:[없음|점선|점선|실선|이중|홈|능선|삽입|시작] 부동:부동:[왼쪽|오른쪽|없음] 8. 길이의 단위 상대 단위: em (em, 요소의 글꼴 높이) ex(x-높이, 문자 "x"의 높이) px(픽셀, 화면 해상도 기준) 절대 길이: 인치(인치, 1인치 = 2.54센티미터) cm(센티미터, 1센티미터 = 10밀리미터) mm(미터) pt(포인트, 1포인트 = 1/72인치) pc (Pa, 1 Pa = 12점) ◇[DELPHI] VCL을 만드는 간단한 단계 1. 컴포넌트 속성 메소드 이벤트 생성 (라이브러리 단위 생성, 새 유형으로 상속, 속성, 메서드, 이벤트 추가, 구성 요소 등록, 패키지 파일 생성) 2.메시지 처리 3.예외 처리 4. 보이는 부분 ◇[DELPHI] 동적링크 라이브러리 로딩 정적 로딩: 절차명;external'lib.dll'; 동적 로딩:varhandle:Thandle; 핸들:=loadlibrary('lib.dll'); ifhandle<>0then 시작하다 {뭔가} 자유라이브러리(핸들); 끝; ◇[DELPHI]포인터 변수 및 주소 varx,y:integer;p:^integer;//INTEGER 변수에 대한 포인터 x:=10; //변수 할당 p:=@x;//변수 x의 주소 y:=p^;//포인터 P를 Y에 할당 @@procedure//프로세스 변수의 메모리 주소를 반환합니다. ◇[DELPHI]는 해당 문자가 한자인지 여부를 판별합니다. ByteType('잘 지내세요 하하',1)=mbLeadByte//첫 번째 문자입니다. ByteType('잘 지내세요 하하',2)=mbTrailByte//두 번째 문자입니다. ByteType('잘 지내세요 ㅎㅎ',5)=mbSingleByte//한자가 아닙니다 ◇[DELPHI]메모 위치결정 동작 memo1.lines.delete(0)//1번째 줄 삭제 memo1.selstart:=10//10바이트 찾기 ◇[DELPHI] 더블바이트 문자 내부 코드 획득 functiongetit(s:string):integer; 시작하다 결과:=바이트(s[1])*$100+byte(s[2]); 끝; 사용: getit('calculation')//$bcc6은 10진수 48326입니다. ◇[DELPHI]통화 ADD 데이터 저장 절차 저장 프로시저는 다음과 같습니다. 생성프로시저추가기록( Record1varchar(10) Record2varchar(20) ) ~처럼 시작하다 테이블 이름 삽입(필드1,필드2)값(:record1,:record2) 끝 저장 프로시저를 실행합니다. EXECUTEprocedureaddrecord("urrecord1","urrecord2") ◇[DELPHI]파일을 Blob 필드에 저장 functionblobcontenttostring(constfilename:string):string; 시작하다 withtfilestream.create(파일 이름,fmopenread)do 노력하다 setlength(결과,크기); read(포인터(결과)^,크기); 마지막으로 무료; 끝; 끝; //필드 저장 시작하다 if(opendialog1.execute)then 시작하다 s파일이름:=OpenDialog1.파일이름; adotable1.edit; adotable1.fieldbyname('visio').asstring:=Blobcontenttostring(파일 이름); adotable1.post; 끝; ◇[DELPHI]모든 파일을 클립보드에 복사 shlobj,activex,clipbrd를 사용합니다. 절차Tform1.copytoclipbrd(varFileName:string); var FE:TFormatEtc; 매체:TStg매체; 드롭파일:PDropFiles; p파일:PChar; 시작하다 FE.cfFormat:=CF_HDROP; FE.dwaspect:=DVASPECT_CONTENT; FE.tymed:=TYMED_HGLOBAL; Medium.hGlobal:=GlobalAlloc(GMEM_SHAREorGMEM_ZEROINIT,SizeOf(TDropFiles)+length(FileName)+1); ifMedium.hGlobal<>0thenbegin Medium.tymed:=TYMED_HGLOBAL; dropfiles:=GlobalLock(Medium.hGlobal); 노력하다 dropfiles^.pfiles:=SizeOf(TDropFiles); dropfiles^.fwide:=거짓; longint(pFile):=longint(dropfiles)+SizeOf(TDropFiles); StrPCopy(p파일,파일이름); Inc(p파일,길이(파일이름)+1); p파일^:=#0; 마지막으로 GlobalUnlock(Medium.hGlobal); 끝; Clipboard.SetAsHandle(CF_HDROP,Medium.hGlobal); 끝; 끝; ◇[DELPHI] 현재 시스템에서 실행 중인 프로세스 나열 TLHelp32를 사용합니다. 절차TForm1.Button1Click(Sender:TObject); varlppe:TProcessEntry32; 발견됨:부울; 손:T손잡이; 시작하다 손:=CreateToolhelp32Snapshot(TH32CS_SNAPALL,0); 발견:=Process32First(손,lppe); whilefounddo 시작하다 ListBox1.Items.Add(StrPas(lppe.szExeFile)); 발견:=Process32Next(손,lppe); 끝; 끝; ◇[DELPHI]BDETable1을 기반으로 Table2라는 새 테이블을 생성합니다. Table2:=TTable.Create(nil); 노력하다 테이블2.데이터베이스이름:=테이블1.데이터베이스이름; Table2.FieldDefs.Assign(Table1.FieldDefs); Table2.IndexDefs.Assign(Table1.IndexDefs); Table2.TableName:='new_table'; 테이블2.CreateTable(); 마지막으로 Table2.Free(); 끝; ◇[DELPHI] DLL 생성 및 참조를 이해하는 가장 좋은 방법 //먼저 DLLsource(FILE-->NEW-->DLL)를 살펴봅니다. 라이브러리프로젝트1; 용도 SysUtils,클래스; functionaddit(f:integer;s:integer):integer;export; 시작하다 makeasum:=f+s; 끝; 수출 추가; 끝. //호출(INurPROJECT) 구현 functionaddit(f:integer;s:integer):integer;far;external'project1';//선언 {호출은 addit(2,4)입니다. 결과는 6입니다.} ◇[DELPHI] 프로그램 자체의 크기를 동적으로 읽어옴 functionGesSelfSize:정수; var f:파일바이트; 시작하다 파일모드:=0; 할당파일(f,application.exename); 재설정(f); 결과:=filesize(f);//단위는 바이트입니다. 파일 닫기(f); 끝; ◇[DELPHI]BIOS 정보 읽기 withMemo1.Linesdo 시작하다 Add('메인보드바이오스이름:'+^I+string(Pchar(Ptr($FE061)))); Add('MainBoardBiosCopyRight:'+^I+string(Pchar(Ptr($FE091)))); Add('MainBoardBiosDate:'+^I+string(Pchar(Ptr($FFFF5)))); Add('MainBoardBiosSerialNo:'+^I+string(Pchar(Ptr($FEC71)))); 끝; ◇[DELPHI]MSSQL 별칭을 동적으로 생성 절차TForm1.Button1Click(Sender:TObject); varMyList:TStringList; 시작하다 MyList:=TStringList.Create; 노력하다 withMyListdo 시작하다 추가('SERVERNAME=210.242.86.2'); 추가('DATABASENAME=db'); 추가('USERNAME=sa'); 끝; Session1.AddAlias('TESTSQL','MSSQL',MyList);//miMSSQL 세션1.저장구성파일; 마지막으로 MyList.Free; 세션1.활성:=True; Database1.DatabaseName:='DB'; Database1.AliasName:='TESTSQL'; Database1.LoginPrompt:=거짓; Database1.Params.Add('USERNAME=sa'); Database1.Params.Add('PASSWORD='); 데이터베이스1.연결됨:=True; 끝; 끝; 절차TForm1.Button2Click(Sender:TObject); 시작하다 Database1.Connected:=거짓; Session1.DeleteAlias('TESTSQL'); 끝; ◇[DELPHI] 배경음악 재생 mm시스템을 사용함 //음악 재생 MCISendString('OPENe:/1.MIDTYPESEQUENCERALIASNN','',0,0); MCISendString('PLAYNNFROM0','',0,0); MCISendString('CLOSEANIMATION','',0,0); 끝; //재생 중지 MCISendString('OPENe:/1.MIDTYPESEQUENCERALIASNN','',0,0); MCISendString('STOPNN','',0,0); MCISendString('CLOSEANIMATION','',0,0); ◇[DELPHI]인터페이스 및 클래스 샘플 코드 Type{인터페이스 및 클래스 선언: 차이점은 데이터 멤버, 모든 비공개 메서드 및 공용 메서드는 인터페이스에서 PUBLIC 키워드를 사용하지 않는다는 것입니다.} Isample=인터페이스//Isample 인터페이스 정의 함수getstring:문자열; 끝; Tsample=클래스(TInterfacedObject,Isample) 공공의 함수getstring:문자열; 끝; //함수 정의 functionTsample.getstring:string; 시작하다 결과:='whatshowis'; 끝; //클래스 객체 호출 varsample:Tsample; 시작하다 샘플:=Tsample.create; showmessage(sample.getstring+'classobject!'); 샘플.무료; 끝; //인터페이스 호출 varsample인터페이스:샘플; 샘플:샘플; 시작하다 샘플:=Tsample.create; SampleInterface:=sample;//인터페이스 구현에서는 클래스를 사용해야 합니다. {위의 두 줄은 다음과 같이 표현할 수도 있습니다. SampleInterface:=Tsample.create;} showmessage(sampleInterface.getstring+'인터페이스!'); //sample.free;{로컬 클래스와 달리 인터페이스의 클래스는 자동으로 해제됩니다.} SampleInterface:=nil;{릴리스 인터페이스 객체} 끝; ◇[DELPHI] 작업 표시줄이 적절한 프로그램이 아닌 것 같습니다 var 확장스타일:정수; 시작하다 응용 프로그램.초기화; ExtendedStyle:=GetWindowLong(Application.Handle,GWL_EXSTYLE); SetWindowLong(Application.Handle,GWL_EXSTYLE,ExtendedStyleORWS_EX_TOOLWINDOWANDNOTWS_EX_APPWINDOW); Application.CreateForm(TForm1,Form1); 응용 프로그램.실행; 끝. ◇[DELPHI]ALT+CTRL+DEL 프로그램을 볼 수 없습니다 구현 후 선언을 추가합니다. functionRegisterServiceProcess(dwProcessID,dwType:Integer):Integer;stdcall;external'KERNEL32.DLL'; RegisterServiceProcess(GetCurrentProcessID,1);//숨기기 RegisterServiceProcess(GetCurrentProcessID,0);//표시 ◇[DELPHI]광학 드라이브 기호 감지 vardrive:문자; cdromID:정수; 시작하다 fordrive:='d'to'z'do 시작하다 cdromID:=GetDriveType(pchar(drive+':/')); ifcdromID=5thenshowmessage('귀하의 CD-ROM 드라이브는:'+drive+'디스크!'); 끝; 끝; ◇[DELPHI] 사운드 카드 감지 ifauxGetNumDevs()<=0thenshowmessage('사운드카드를 찾을 수 없습니다!')elseshowmessage('모든 사운드카드를 찾았습니다!'); ◇[DELPHI]스트링 그리드에 그리기 StringGrid.OnDrawCell 이벤트 withStringGrid1.Canvasdo Draw(Rect.Left,Rect.Top,Image1.Picture.Graphic); ◇[SQLSERVER]SQL에서 Like 문을 작성하는 또 다른 방법 예를 들어, 사용자 이름에 "c"가 포함된 모든 사용자를 찾으려면 다음을 사용할 수 있습니다. 내 데이터베이스 사용 select*fromtable1where사용자 이름like'%c%" 위의 기능을 완료하는 또 다른 방법은 다음과 같습니다. 내 데이터베이스 사용 select*fromtable1wherecharindex('c',사용자 이름)>0 이론적으로 이 방법은 이전 방법보다 판정문이 하나 더 많은데, 즉 >0이지만 이 판정 과정이 연산의 80% 이상을 단어 검색에 소비한다고 생각합니다. 문자열 및 기타 연산의 경우 charindex 함수를 사용하는 것은 큰 문제가 되지 않습니다. 이 방법을 사용하면 %, | 등을 직접 사용할 수 없다는 장점도 있습니다. 발견된 문자는 다음과 같이 이 charindex에서 직접 사용할 수 있습니다. 내 데이터베이스 사용 select*fromtable1wherecharindex('%',사용자 이름)>0 다음과 같이 작성할 수도 있습니다. 내 데이터베이스 사용 select*fromtable1wherecharindex(char(37),사용자 이름)>0 ASCII 문자는 %입니다. ◇[DELPHI]SQL은 여러 데이터베이스/테이블을 표시합니다. SELECTDISTINCTA.bianhao,a.xingming,b.gongziFROM"jianjie.dbf"a,"gongzi.DBF"b WHEREA.bianhao=b.bianhao ◇[DELPHI]RFC(RequestForComment) 관련 IETF(Internet Engineering Task Force)는 RFC 문서(http://www.ietf.cnri.reston.va.us)를 관리합니다. RFC882: 메시지 헤더 구조 RFC1521: MIME 파트 1, 전송 메시지 방법 RFC1945: 멀티미디어 문서 전송 문서 ◇[DELPHI]TNMUUP 프로세서 사용 varinStream,outStream:TFileStream; 시작하다 inStream:=TFileStream.create(infile.txt,fmOpenRead); outStream:=TFileStream(outfile.txt,fmCreate); NMUUE.Method:=uuCode;{UUEncode/디코드} //NMUUE.Method:=uuMIME;{MIME} NMUUE.InputStream:=인스트림; NMUUE.OutputStream:=아웃스트림; NMUUE.Encode;{인코딩 처리} //NMUUE.Decode;{디코딩 처리} inStream.free; outStream.free; 끝; ◇[DELPHI]TFileStream 작업 //파일 스트림의 현재 위치에서 버퍼 BUFFER까지 count 바이트를 읽습니다. functionread(varbuffer;count:longint):longint;override; //버퍼 BUFFER를 파일 스트림으로 읽습니다. functionwrite(constbuffer;count:longint):longint;override; //파일 스트림의 현재 읽기 및 쓰기 포인터를 OFFSET으로 설정합니다. functioneek(오프셋:longint;원산지:단어):longint;재정의; 원점={soFromBeginning,soFromCurrent,soFromEnd} //다른 파일 스트림의 현재 위치에서 현재 파일 스트림의 현재 위치로 COUNT를 복사합니다. functioncopyfrom(source:TStream;count:longint):longint; //지정된 파일을 파일 스트림으로 읽습니다. varmyFStream:TFileStream; 시작하다 myFStream:=TFileStream.create(OpenDialog1.filename,fmOpenRead); 끝; [Javascript] IE 플러그인 Shockwave&Quicktime이 설치되어 있는지 확인 ------------------ 인내심을 갖고 읽어주셔서 감사합니다. 실력이 있으시네요. 계속해서 게시해주시길 바랍니다!