Habilidades básicas de desenvolvimento DELPHI
◇[DELPHI] Copie arquivos da vizinhança de rede
usa shellapi;
copyfile(pchar('newfile.txt'),pchar('//nome do computador/direção/targer.txt'),false);
◇[DELPHI] produz efeito de arrastar do mouse
Implementado através do evento MouseMove, evento DragOver, evento EndDrag, como LABEL no PANEL:
varxpanel,ypanel,xlabel,ylabel:inteiro;
Evento MouseMove do PANEL:xpanel:=x;ypanel:=y;
Evento DragOver do PANEL:xpanel:=x;ypanel:=y;
Evento MouseMove do LABEL:xlabel:=x;ylabel:=y;
Evento EndDrag do LABEL: label.left:=xpanel-xlabel;label.top:=ypanel-ylabel;
◇[DELPHI] Obtenha o diretório WINDOWS
usa shellapi;
varwindir:array[0..255]ofchar;
getwindowsdirectory(windir,sizeof(windir));
Ou leia no registro, localização:
HKEY_LOCAL_MACHINE/Software/Microsoft/Windows/CurrentVersion
Chave SystemRoot, obtida como: C:/WINDOWS
◇[DELPHI] Desenhe linhas no FORM ou em outros contêineres
varx,y:array[0..50]de número inteiro;
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] uso da lista de strings
vartips:tstringlist;
dicas:=tstringlist.create;
dicas.loadfromfile('nomedoarquivo.txt');
edit1.text:=dicas[0];
dicas.add('lastlineadditionstring');
dicas.insert(1,'insertstringatNO2line');
dicas.savetofile('novoarquivo.txt');
dicas.grátis;
◇[DELPHI]Operação simples da área de transferência
richedit1.selectall;
richedit1.copytoclipboard;
richedit1.cuttoclipboard;
edit1.pastefromclipboard;
◇[DELPHI] Sobre operações de arquivos e diretórios
Chdir('c:/abcdir');Vá para o diretório
Mkdir('dirname');Criar diretório
Rmdir('nomediretório');
GetCurrentDir;//Obtém o nome do diretório atual, sem '/'
Getdir(0,s);//Obtém o nome do diretório de trabalho s:='c:/abcdir';
Deletfile('abc.txt'); //Excluir arquivo
Renamefile('old.txt','new.txt');//Renomear arquivo
ExtractFilename(filelistbox1.filename); //Obtém o nome do arquivo
ExtractFileExt(filelistbox1.filename); //Obtém o sufixo do arquivo
◇[DELPHI] Atributos do arquivo de processo
attr:=filegetattr(filelistbox1.filename);
if(attrandfaReadonly)=faReadonlythen...//somente leitura
if(attrandfaSysfile)=faSysfilethen...//Sistema
if(attrandfaArchive)=faArchivethen...//Arquivar
if(attrandfaHidden)=faHiddenthen...//Ocultar
◇[DELPHI]Executar arquivos fora do programa
WINEXEC // Chama arquivo executável
winexec('command.com/ccopy*.*c:/',SW_Normal);
winexec('startabc.txt');
ShellExecute ou ShellExecuteEx // Inicia o programa de associação de arquivos
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] Obtenha o nome do processo em execução no sistema
varhCurrentWindow:HWnd;szText:array[0..254]ofchar;
começar
hCurrentWindow:=Getwindow(handle,GW_HWndFrist);
whilehCurrentWindow<>0do
começar
ifGetwindowtext(hcurrnetwindow,@sztext,255)>0thenlistbox1.items.add(strpas(@sztext));
hCurrentWindow:=Getwindow(hCurrentwindow,GW_HWndNext);
fim;
fim;
◇[DELPHI]Sobre incorporação de assembly
AsmFim;
EAX, ECX e EDX podem ser modificados à vontade; ESI, EDI, ESP, EBP e EBX não podem ser modificados.
◇[DELPHI]Sobre a função de conversão de tipo
FloatToStr // Ponto flutuante para string
FloatToStrF // Ponto flutuante formatado para string
IntToHex //Inteiro para hexadecimal
TimeToStr
DataToStr
DateTimeToStr
FmtStr // Gera uma string no formato especificado
FormatDateTime('AAAA-MM-DD,hh-mm-ss',DATA);
◇[DELPHI]Procedimentos e funções de string
Insert(obj,target,pos);//A string target é inserida na posição da pos. Se o resultado da inserção for maior que o comprimento máximo do destino, os caracteres extras serão truncados. Se Pos estiver fora de 255, ocorrerá um erro de operação. Por exemplo, st:='Brian', então Insert('OK',st,2) mudará st para 'BrOKian'.
Delete(st,pos,Num);//Exclui uma substring de caracteres Num (inteiros) começando na posição pos (inteiro) na st string. Por exemplo, st:='Brian', então Delete(st,3,2) se tornará Brn.
Str(value,st);//Converte o valor numérico (tipo inteiro ou real) em uma string e coloca-o em st. Por exemplo, quando a=2.5E4, str(a:10,st) fará com que o valor de st seja '25000'.
Val(st,var,code);//Converte a expressão da string st no número inteiro ou valor real correspondente e armazena-o em var. St deve ser uma string representando um valor numérico e obedecer às regras para constantes numéricas. Durante o processo de conversão, se nenhum erro for detectado, o código da variável é colocado em 0, caso contrário, é colocado na posição do primeiro caractere de erro. Por exemplo, st:=25.4E3, x é uma variável real, então val(st,x,code) tornará o valor X 25400 e o valor do código 0.
Copy(st.pos.num);//Retorna uma substring começando na posição pos (inteiro) na st string e contendo caracteres num (inteiro). Se pos for maior que o comprimento da st string, uma string vazia será retornada. Se pos estiver fora de 255, ocorrerá um erro de tempo de execução. Por exemplo, st:='Brian', então Copy(st,2,2) retorna 'ri'.
Concat(st1,st2,st3...,stn);//Concatena as strings representadas por todas as variáveis independentes na ordem dada e retorna o valor concatenado. Se o comprimento do resultado for 255, ocorrerá um erro de tempo de execução. Por exemplo, st1:='Brian',st2:='',st3:='Wilfred', então Concat(st1,st2,st3) retorna 'BrianWilfred'.
Length(st);//Retorna o comprimento da expressão de string st. Por exemplo, st:='Brian', então o valor de retorno de Length(st) é 5.
Pos(obj, target);//Retorna a posição onde a string obj aparece pela primeira vez na string de destino target Se target não tiver uma string correspondente, o valor de retorno da função Pos é 0. Por exemplo, target:='BrianWilfred', então o valor de retorno de Pos('Wil',target) é 7 e o valor de retorno de Pos('hurbet',target) é 0.
◇[DELPHI]Sobre como lidar com o registro
usaRegistro;
varreg:Tregistro;
reg:=Tregistro.create;
reg.rootkey:='HKey_Current_User';
reg.openkey('ControlPanel/Desktop',falso);
reg.WriteString('TítuloWallpaper','0');
reg.writeString('Papel de parede',filelistbox1.filename);
reg.closereg;
reg.grátis;
◇[DELPHI]Sobre nomes constantes do teclado
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)--$7B(123)
Az:$41(65)--$5A(90)
0-9:$30(48)--$39(57)
◇[DELPHI] Determinar preliminarmente o idioma nativo do programa
Prompt do DOS do software DELPHI: ThisPROgramMustBeRunUnderWin32.
Prompt do DOS para software VC++: ThisProgramCannotBeRunInDOSMode.
◇[DELPHI]Operação de cookies
resposta.cookies("nome").domain:='http://www.086net.com';
com resposta.cookies.adddo
começar
nome:='nome de usuário';
valor:='nome de usuário';
fim
◇[DELPHI] adicionado ao link do menu do documento
usashellapi,shlOBJ;
shAddToRecentDocs(shArd_path,pchar(filepath));//Adiciona conexão
shAddToRecentDocs(shArd_path,nil);//Limpar
◇[Diversos] Dicionário de método de entrada ABC inteligente de backup
windows/sistema/usuário.rem
windows/sistema/tmmr.rem
◇[DELPHI] Determinar os botões do mouse
ifGetAsyncKeyState(VK_LButton)<>0then...//Botão esquerdo
ifGetAsyncKeyState(VK_MButton)<>0then...//Chave do meio
ifGetAsyncKeyState(VK_RButton)<>0then...//Clique com o botão direito
◇[DELPHI]Defina a exibição máxima do formulário
evento onFormCreate
self.largura:=tela.largura;
self.height:=tela.height;
◇ Botão [DELPHI] para aceitar mensagens
Processado no evento OnCreate: application.OnMessage:=MyOnMessage;
procedimentoTForm1.MyOnMessage(varMSG:TMSG;varHandle:Boolean);
começar
ifmsg.message=256then...//QUALQUER chave
ifmsg.message=112então...//F1
ifmsg.message=113então...//F2
fim;
◇[Diversos]Ocultar pastas compartilhadas
Efeito de compartilhamento: acessível, mas invisível (em gerenciamento de recursos, Vizinhança de Rede)
Nomeie o compartilhamento: direção$
Visite ://computador/direção/
◇[javaScript]Efeitos comumente usados em páginas da web JavaScript
A página da web está programada para fechar em 60 segundos
fechar janela
encerramento
Transferência de URL agendada
Também é possível configurar o TQuery durante a operação, veja a ajuda do Delphi para detalhes.
□◇[DELPHI] Obtenha o valor RGB de um determinado ponto da imagem
procedimentoTForm1.Image1MouseDown(Sender:TObject;Button:TMouseButton;
Shift:TShiftState;X,Y:Inteiro);
var
vermelho, verde, azul: byte;
eu: inteiro;
começar
i:=image1.Canvas.Pixels[x,y];
Azul:=GetBValue(i);
Verde:=GetGValue(i):
Vermelho:=GetRValue(i);
Label1.Caption:=inttostr(Vermelho);
Label2.Caption:=inttostr(Verde);
Label3.Caption:=inttostr(Azul);
fim;
□◇[DELPHI]Sobre decomposição e conversão de formato de data
varano,mês,dia:Word;agora2:Tdatatime;
agora2:=data();
decodificação(agora2,ano,mês,dia);
label1.Text:=inttostr(ano)+'ano'+inttostr(mês)+'mês'+inttostr(dia)+'dia';
◇[DELPHI]Como determinar o modo de conexão de rede atual
O resultado do julgamento é o modo MODEM, LAN ou servidor proxy.
usawininet;
FunctionConnectionKind:booleano;
varflags:dword;
começar
Resultado:=InternetGetConnectedState(@flags,0);
ifResultentão
começar
if(flagsandINTERNET_CONNECTION_MODEM)=INTERNET_CONNECTION_MODEMentão
começar
showmessage('Modem');
fim;
if(flagsandINTERNET_CONNECTION_LAN)=INTERNET_CONNECTION_LANentão
começar
showmessage('LAN');
fim;
if(flagsandINTERNET_CONNECTION_PROXY)=INTERNET_CONNECTION_PROXYentão
começar
showmessage('Proxy');
fim;
if(flagsandINTERNET_CONNECTION_MODEM_BUSY)=INTERNET_CONNECTION_MODEM_BUSYentão
começar
showmessage('ModemOcupado');
fim;
fim;
fim;
◇[DELPHI]Como determinar se uma string é um endereço de EMAIL válido
functionIsEMail(EMail:String):Boolean;
vars:String;ETpos:Inteiro;
começar
ETpos:=pos('@',E-mail);
ifETpos>1então
começar
s:=copiar(E-mail,ETpos+1,Comprimento(E-mail));
if(pos('.',s)>1)e(pos('.',s)<comprimento(s))então
Resultado:=trueelseResultado:=falso;
fim
outro
Resultado:=falso;
fim;
◇[DELPHI] Determine se o sistema está conectado à INTERNET
A função InetIsOffline em URL.DLL precisa ser introduzida.
A declaração da função é:
functionInetIsOffline(Flag:Integer):Boolean;stdcall;external'URL.DLL';
Então você pode chamar a função para determinar se o sistema está conectado à INTERNET
ifInetIsOffline(0)thenShowMessage('notconnected!')
elseShowMessage('conectado!');
Esta função retorna TRUE se o sistema local não estiver conectado à INTERNET.
Apegado:
A maioria dos sistemas com IE ou OFFICE97 possuem esta DLL disponível para chamada.
Inet está offline
BOOLInetIsOffline(
DWORDdwFlags,
);
◇[DELPHI]Reproduza e pause facilmente arquivos WAV
usammsistema;
functionPlayWav(constFileName:string):Boolean;
começar
Resultado:=PlaySound(PChar(NomeArquivo),0,SND_ASYNC);
fim;
procedimentoStopWav;
var
buffer:array[0..2]ofchar;
começar
buffer[0]:=#0;
PlaySound(Buffer,0,SND_PURGE);
fim;
◇[DELPHI] Obtenha informações do BIOS da máquina
comMemo1.Linesdo
começar
Add('MainBoardBiosName:'+^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))));
fim;
◇[DELPHI] Baixe arquivos da Internet
usaUrlMon;
functionDownloadFile(Fonte,Destino:string):Boolean;
começar
tentar
Resultado:=UrlDownloadToFile(nil,PChar(fonte),PChar(Dest),0,nil)=0;
exceto
Resultado:=Falso;
fim;
fim;
ifDownloadFile('http://www.borland.com/delphi6.zip,'c:/kylix.zip')então
ShowMessage('Download realizado com sucesso')
elseShowMessage('Download sem sucesso')
◇[DELPHI]Resolver endereço IP do servidor
usawinsock
functionIPAddrToName(IPAddr:String):String;
var
SockAddrIn:TSockAddrIn;
HostEnt:PHostEnt;
Dados WSA: Dados TWSA;
começar
WSAStartup($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:='';
fim;
◇[DELPHI] Obtenha a conexão no atalho
functionExeFromLink(constlinkname:string):string;
var
FDir,
Nome,
NomeExe:PChar;
z:inteiro;
começar
ExeName:=StrAlloc(MAX_PATH);
FNome:=StrAlloc(MAX_PATH);
FDir:=StrAlloc(MAX_PATH);
StrPCopy(FName,ExtractFileName(linkname));
StrPCopy(FDir,ExtractFilePath(nome do link));
z:=FindExecutable(FName,FDir,ExeName);
ifz>32então
Resultado:=StrPas(NomeExe)
outro
Resultado:='';
StrDispose(FDir);
StrDispose(FNome);
StrDispose(NomeExe);
fim;
◇[DELPHI]Controle o preenchimento automático do TCombobox
{'Propriedade'classificada'doTComboboxtotrue}
varlastKey:Word;//variável global
//Evento OnChange do TCombobox
procedimentoTForm1.AutoCompleteChange(Sender:TObject);
var
PesquisaStr:string;
retVal:inteiro;
começar
SearchStr:=(SenderasTCombobox).Text;
iflastKey<>VK_BACKentão//backspace:VK_BACKou$08
começar
retVal:=(SenderasTCombobox).Perform(CB_FINDSTRING,-1,LongInt(PChar(SearchStr)));
ifretVal>CB_Errthen
começar
(SenderasTCombobox).ItemIndex:=retVal;
(SenderasTCombobox).SelStart:=Comprimento(SearchStr);
(SenderasTCombobox).SelLength:=
(Comprimento((SenderasTCombobox).Texto)-Comprimento(SearchStr));
fim; //retVal>CB_Err
fim; //últimaChave<>VK_BACK
lastKey:=0;//resetlastKey
fim;
//Evento OnKeyDown do TCombobox
procedimentoTForm1.AutoCompleteKeyDown(Sender:TObject;varKey:Word;
Shift:TShiftState);
começar
últimaChave:=Chave;
fim;
◇[DELPHI]Como limpar um diretório
functionEmptyDirectory(TheDirectory:String;Recursivo:Boolean):
Booleano;
var
SearchRec:TSearchRec;
Res:Inteiro;
começar
Resultado:=Falso;
ODiretório:=NormalDir(ODiretório);
Res:=FindFirst(TheDirectory+'*.*',faAnyFile,SearchRec);
tentar
enquantoRes=0fazer
começar
if(SearchRec.Name<>'.')e(SearchRec.Name<>'..')então
começar
if((SearchRec.AttrandfaDirectory)>0)eRecursivo
então começar
VazioDirectory(TheDirectory+SearchRec.Name,True);
RemoveDirectory(PChar(TheDirectory+SearchRec.Name));
fim
outro começo
DeleteFile(PChar(TheDirectory+SearchRec.Name))
fim;
fim;
Res:=FindNext(SearchRec);
fim;
Resultado:=Verdadeiro;
finalmente
FindClose(SearchRec.FindHandle);
fim;
fim;
◇[DELPHI]Como calcular o tamanho de um diretório
functionGetDirectorySize(constADirectory:string):Integer;
var
Dir:TSearchRec;
Ret:inteiro;
Caminho: sequência;
começar
Resultado:=0;
Caminho:=ExtractFilePath(ADirectory);
Ret:=Sysutils.FindFirst(ADirectory,faAnyFile,Dir);
ifRet<>NO_ERRORthenexit;
tentar
whileret = NO_ERRORdo
começar
inc(Resultado,Dir.Size);
if(Dir.Attrin[faDirectory])e(Dir.Name[1]<>'.')então
Inc(Resultado,GetDirectorySize(Caminho+Dir.Nome+'/*.*'));
Ret:=Sysutils.FindNext(Dir);
fim;
finalmente
Sysutils.FindClose(Dir);
fim;
fim;
◇[DELPHI]Como adicionar o instalador à lista de desinstalação
Opere o registro da seguinte maneira:
1. Crie uma chave primária na chave HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Uninstall com qualquer nome.
ExemploHKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Uninstall/MyUninstall
2. Digite dois valores de string em HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Uninstall/MyUnistall,
Os nomes desses dois valores de string são específicos: DisplayName e UninstallString.
3. Atribua o valor da string DisplayName ao nome exibido na "Lista de Exclusão de Aplicativos", como 'AimingUninstallone';
Atribua a string UninstallString ao comando de exclusão executado, como C:/WIN97/uninst.exe-f "C:/TestPro/aimTest.isu"
◇[DELPHI]Mensagem de encerramento de sessão WM_QUERYEND interceptada
tipo
TForm1=classe(TForm)
procedimentoWMQueryEndSession(varMessage:TWWMQueryEndSession); mensagemWM_QUERYENDSESSION;
procedimentoCMEraseBkgnd(varMessage:TWMEraseBkgnd);MensagemWM_ERASEBKGND;
privado
{Declarações privadas}
público
{declarações públicas}
fim;
procedimentoTForm1.WMQueryEndSession(varMessage:TWMQueryEndSession);
começar
Showmessage('computadorestá prestes a desligar');
fim;
◇[DELPHI]Obtenha vizinhos on-line
proceduregetnethood();//NT é usado como servidor e a depuração é passada no WIN98.
var
a,i:inteiro;
código de erro:inteiro;
netres:array[0..1023]ofnetresource;
enumhandle:handle;
enumentos:dword;
tamanho do buffer:dword;
s:string;
meuslistitems:tlistitems;
meulistitem:tlistitem;
todosdomínio:tstrings;
start //listcomputerisalistviewtolistallcomputers;controlcenterisaform.
todosdomínio:=tstringlist.Create;
withnetres[0]dobegin
dwscope:=RESOURCE_GLOBALNET;
dwtype:=RESOURCETYPE_ANY;
dwdisplaytype:=RESOURCEDISPLAYTYPE_DOMAIN;
dwusage:=RESOURCEUSAGE_CONTAINER;
lplocalnome:=nil;
lpremotename:=nil;
lpcomment:=nil;
provedorlp:=nil;
end; //Obtém todos os domínios
código de erro:=wnetopenenum(RESOURCE_GLOBALNET,RESOURCETYPE_ANY,RESOURCEUSAGE_CONTAINER,@netres[0],enumhandle);
iferrcode=NO_ERRORthenbegin
enumerações:=1024;
buffersize:=sizeof(netres);
código de erro:=wnetenumresource(enumhandle,enumentries,@netres[0],buffersize);
fim;
uma:=0;
meuslistitems:=controlcenter.lstcomputer.Items;
meuslistitems.Clear;
while(string(netres[a].lpprovider)<>'')and(errcode=NO_ERROR)do
começar
alldomain.Add(netres[a].lpremotename);
uma:=uma+1;
fim;
wnetcloseenum(enumhandle);
//Obtém todos os computadores
meuslistitems:=controlcenter.lstcomputer.Items;
meuslistitems.Clear;
fori:=0toalldomain.Count-1do
começar
withnetres[0]dobegin
dwscope:=RESOURCE_GLOBALNET;
dwtype:=RESOURCETYPE_ANY;
dwdisplaytype:=RESOURCEDISPLAYTYPE_SERVER;
dwusage:=RESOURCEUSAGE_CONTAINER;
lplocalnome:=nil;
lpremotename:=pchar(alldomain[i]);
lpcomment:=nil;
provedorlp:=nil;
fim;
ErrCode:=WNetOpenEnum(RESOURCE_GLOBALNET,RESOURCETYPE_ANY,RESOURCEUSAGE_CONTAINER,@netres[0],EnumHandle);
iferrcode=NO_ERRORentão
começar
EnumEntries:=1024;
BufferSize:=SizeOf(NetRes);
ErrCode:=WNetEnumResource(EnumHandle,EnumEntries,@NetRes[0],BufferSize);
fim;
uma:=0;
while(string(netres[a].lpprovider)<>'')and(errcode=NO_ERROR)do
começar
meulistitem:=mylistitems.Add;
meulistitem.ImageIndex:=0;
mylistitem.Caption:=maiúsculas(stringreplace(string(NetRes[a].lpremotename),'//','',[rfReplaceAll]));
uma:=uma+1;
fim;
wnetcloseenum(enumhandle);
fim;
fim;
◇[DELPHI] Obtenha o diretório compartilhado em um determinado computador
procedimentogetsharefolder(constnomedocomputador:string);
var
código de erro,a:inteiro;
netres:array[0..1023]ofnetresource;
enumhandle:handle;
enumerações,buffersize:dword;
s:string;
meuslistitems:tlistitems;
meulistitem:tlistitem;
minhasstrings:tstringlist;
começar
withnetres[0]dobegin
dwscope:=RESOURCE_GLOBALNET;
dwtype:=RESOURCETYPE_DISK;
dwdisplaytype:=RESOURCEDISPLAYTYPE_SHARE;
dwusage:=RESOURCEUSAGE_CONTAINER;
lplocalnome:=nil;
lpremotename:=pchar(nomedocomputador);
lpcomment:=nil;
provedorlp:=nil;
end; //Obtém o nó raiz
código de erro:=wnetopenenum(RESOURCE_GLOBALNET,RESOURCETYPE_DISK,RESOURCEUSAGE_CONTAINER,@netres[0],enumhandle);
iferrcode=NO_ERRORentão
começar
EnumEntries:=1024;
BufferSize:=SizeOf(NetRes);
ErrCode:=WNetEnumResource(EnumHandle,EnumEntries,@NetRes[0],BufferSize);
fim;
wnetcloseenum(enumhandle);
uma:=0;
meuslistitems:=controlcenter.lstfile.Items;
meuslistitems.Clear;
while(string(netres[a].lpprovider)<>'')and(errcode=NO_ERROR)do
começar
com mylistitemsdo
começar
meulistitem:=adicionar;
meulistitem.ImageIndex:=4;
mylistitem.Caption:=extractfilename(netres[a].lpremotename);
fim;
uma:=uma+1;
fim;
fim;
◇[DELPHI] Obtenha o número de série do disco rígido
varSerialNum:pdword;a,b:dword;Buffer:array[0..255]ofchar;
começar
ifGetVolumeInformation('c:/',Buffer,SizeOf(Buffer),SerialNum,a,b,nil,0)thenLabel1.Caption:=IntToStr(SerialNum^);
fim;
◇[DELPHI] Viragem automática de página do MEMO
ProcedureScrollMemo(Memorando:TMemo;Direção:char);
começar
direção do caso
'd': começar
SendMessage(Memo.Handle,{HWNDoftheMemoControl}
WM_VSCROLL,{WindowsMessage}
SB_PAGEDOWN,{ScrollCommand}
0){NãoUsado}
fim;
'você': começar
SendMessage(Memo.Handle,{HWNDoftheMemoControl}
WM_VSCROLL,{WindowsMessage}
SB_PAGEUP,{ScrollCommand}
0);{NãoUsado}
fim;
fim;
fim;
procedimentoTForm1.Button1Click(Sender:TObject);
começar
ScrollMemo(Memo1,'d'); //Aumenta a página
fim;
procedimentoTForm1.Button1Click(Sender:TObject);
começar
ScrollMemo(Memo1,'u'); //Abaixa a página
fim;
◇[DELPHI]Pressione enter para a próxima posição no DBGrid (tecla Tab)
procedimentoTForm1.DBGrid1KeyPress(Sender:TObject;varKey:Char);
começar
ifKey=#13então
ifDBGrid1.Columns.Grid.SelectedIndex<DBGrid1.Columns.Count-1then
DBGrid1.Columns[DBGrid1.Columns.grid.SelectedIndex+1].Field.FocusControl
outro
começar
Tabela1.próximo;
DBGrid1.Columns[0].campo.FocusControl;
fim;
fim;
◇[DELPHI]Como instalar o controle
Método de instalação:
1. Para um único controle, Componente-->installcomponent..-->Arquivo PAS ou DCU-->instalar
2. Para pacotes de controle com arquivos *.dpk, basta clicar em Arquivo-->abrir (selecionar *.dpk na caixa de listagem suspensa)-->instalar.
3. Para pacotes de controle com arquivos *.dpl, InstallPackages-->Adicionar-->nome do arquivo dpl.
4. Se o botão Instalar acima for inválido, tente o botão Compilar.
5. Se for runtimelib, adicione-o a runtimepackes em pacotes na opção.
Se avisar que o arquivo não pode ser encontrado durante a compilação, geralmente é porque o diretório de instalação do controle não está no diretório Lib do Delphi. Existem duas maneiras de resolver o problema:
1. Copie os arquivos de instalação originais para o diretório Lib do delphi.
2. Ou adicione o caminho do código original do controle ao diretório Delphi Lib em Tools-->EnvironmentOptions.
◇[DELPHI] Exclua completamente o diretório (deltree)
procedimentoTForm1.DeleteDirectory(strDir:String);
var
sr:TSearchRec;
ArquivoAttrs:Inteiro;
strnomedoarquivo:string;
strPth:string;
começar
strpth:=Getcurrentdir();
FileAttrs:=faAnyFile;
ifFindFirst(strpth+'/'+strdir+'/*.*',FileAttrs,sr)=0então
começar
if(sr.AttrandFileAttrs)=sr.Attrthen
começar
strnomedoarquivo:=sr.Nome;
iffileexists(strpth+'/'+strdir+'/'+strfilename)então
deletefile(strpth+'/'+strdir+'/'+strfilename);
fim;
whileFindNext(sr)=0do
começar
if(sr.AttrandFileAttrs)=sr.Attrthen
começar
strnomedoarquivo:=sr.nome;
iffileexists(strpth+'/'+strdir+'/'+strfilename)então
deletefile(strpth+'/'+strdir+'/'+strfilename);
fim;
fim;
EncontrarFechar(sr);
removidoir(strpth+'/'+strdir);
fim;
fim;
◇[DELPHI] Obtenha as informações de linha e coluna do cursor atual do controle TMemo em Tpoint
1.functionReadCursorPos(SourceMemo:TMemo):TPoint;
varPonto:TPonto;
começar
point.y:=SendMessage(SourceMemo.Handle,EM_LINEFROMCHAR,SourceMemo.SelStart,0);
point.x:=SourceMemo.SelStart-SendMessage(SourceMemo.Handle,EM_LINEINDEX,point.y,0);
Resultado:=Ponto;
fim;
2.LineLength:=SendMessage(memol.handle,EM-LINELENGTH,Cpos,0);//Comprimento da linha
◇[DELPHI]Ler o número de série do disco rígido
functionGetDiskSerial(DiskChar:Char):string;
var
Número de série:pdword;
a,b:dword;
Buffer:array[0..255]ofchar;
começar
resultado:="";
ifGetVolumeInformation(PChar(diskchar+":/"),Buffer,SizeOf(Buffer),SerialNum,
a,b,nil,0)então
Resultado:=IntToStr(SerialNum^);
fim;
◇[INTERNET]Habilidades abrangentes comuns de CSS
1. P:first-letter{font-size:300%;float:left}//A primeira letra será três vezes maior que a fonte normal.
2.
3. Incorporar uma folha de estilo
4.
Arial // SPAN aceita atributos STYLE, CLASS e ID
DIV pode conter parágrafos, títulos, tabelas e até outras partes
5.
6. //Veja 3 para definição. 7. Lista de propriedades Estilo da fonte:estilo da fonte:[normal|itálico|oblíquo]; Tamanho da fonte: tamanho da fonte: [xx-small|x-small|small|medium|large|x-large|xx-large|larger|smenler|<length>|<percent>] Decoração de texto: decoração de texto: [sublinhado||overline||line-through||blink] Transformação de texto:[nenhum|maiúsculas|maiúsculas|minúsculas] Cor de fundo:cor de fundo:[<cor>|transparente] imagem de fundo:imagem de fundo:[ Altura da linha:[normal|<número>|<comprimento>|<porcentagem>] Estilo de borda:[nenhum | pontilhado | tracejado | sólido | duplo | ranhura | cume | inserção | início] float:float:[esquerda|direita|nenhum] 8. unidade de comprimento Unidades relativas: em (em, a altura da fonte do elemento) ex(x-altura, a altura da letra "x") px (pixels, em relação à resolução da tela) Comprimento absoluto: pol (polegada, 1 polegada = 2,54 centímetros) cm (centímetro, 1 centímetro = 10 milímetros) mm (metro) pt (ponto, 1 ponto = 1/72 polegada) pc (Pa, 1 Pa = 12 pontos) ◇[DELPHI] Breves passos para fazer VCL 1. Crie eventos de método de atributo de componente (Criar unidades de biblioteca, herdar como novos tipos, adicionar propriedades, métodos, eventos, registrar componentes, criar arquivos de pacote) 2. Processamento de mensagens 3. Tratamento de exceções 4. Peças visíveis ◇[DELPHI] Carregamento da biblioteca de vínculo dinâmico Carregamento estático: nome do procedimento;external'lib.dll'; Carregamento dinâmico:varhandle:Thandle; identificador:=loadlibrary('lib.dll'); ifhandle<>0então começar {fazer alguma coisa} biblioteca livre(handle); fim; ◇[DELPHI]Variáveis e endereços de ponteiro varx,y:integer;p:^integer;//ponteiro para variável INTEGER x:=10; //Atribuição de variável p:=@x;//O endereço da variável x y:=p^;//Atribuir ponteiro P a Y @@procedure//Retorna o endereço de memória da variável do processo ◇[DELPHI] determina se o caractere é chinês ByteType('Como vai você haha',1)=mbLeadByte//é o primeiro caractere ByteType('Como vai você haha',2)=mbTrailByte//é o segundo caractere ByteType('Como vai você haha',5)=mbSingleByte//Não é um caractere chinês ◇[DELPHI]operação de posicionamento de memorando memo1.lines.delete(0)//Excluir linha 1 memo1.selstart:=10 // Localize 10 bytes ◇[DELPHI] Obtenha código interno de caracteres de byte duplo funçãogetit(s:string):integer; começar Resultado:=byte(s[1])*$100+byte(s[2]); fim; Use: getit('cálculo')//$bcc6 é decimal 48326 ◇[DELPHI]Chame o procedimento de armazenamento de dados ADD O procedimento armazenado é o seguinte: createprocedurereaddrecord( registro1varchar(10) registro2varchar(20) ) como começar inserirnonomedatabela(campo1,campo2)valores(:registro1,:registro2) fim Execute o procedimento armazenado: EXECUTEprocedurereaddrecord("urrecord1","urrecord2") ◇[DELPHI]Salve arquivos em campos blob functionblobcontenttostring(constfilename:string):string; começar withtfilestream.create(nome do arquivo,fmopenread)do tentar setlength(Resultado,tamanho); leia(Ponteiro(Resultado)^,tamanho); finalmente livre; fim; fim; //salva o campo começar se(opendialog1.execute)então começar sNomeArquivo:=OpenDialog1.NomeArquivo; adotable1.edit; adotable1.fieldbyname('visio').asstring:=Blobcontenttostring(FileName); adotable1.post; fim; ◇[DELPHI]Copie todos os arquivos para a área de transferência usashlobj,activex,clipbrd; procedimentoTform1.copytoclipbrd(varFileName:string); var FE:TFormatEtc; Médio:TStgMédio; dropfiles:PDropFiles; pArquivo:PChar; começar FE.cfFormat:=CF_HDROP; FE.dwaspect:=DVASPECT_CONTENT; FE.tymed:=TYMED_HGLOBAL; Medium.hGlobal:=GlobalAlloc(GMEM_SHAREorGMEM_ZEROINIT,SizeOf(TDropFiles)+length(Nome do arquivo)+1); ifMedium.hGlobal<>0thenbegin Médio.tymed:=TYMED_HGLOBAL; dropfiles:=GlobalLock(Medium.hGlobal); tentar dropfiles^.pfiles:=SizeOf(TDropFiles); dropfiles^.fwide:=Falso; inteiro longo(pFile):=int longo(dropfiles)+SizeOf(TDropFiles); StrPCopy(pArquivo,NomeArquivo); Inc(pArquivo,Comprimento(NomeArquivo)+1); pArquivo^:=#0; finalmente GlobalUnlock(Medium.hGlobal); fim; Clipboard.SetAsHandle(CF_HDROP,Medium.hGlobal); fim; fim; ◇[DELPHI] Lista os processos atuais do sistema em execução usaTLHelp32; procedimentoTForm1.Button1Click(Sender:TObject); varlppe:TProcessEntry32; encontrado:booleano; Mão: alça; começar Mão:=CreateToolhelp32Snapshot(TH32CS_SNAPALL,0); encontrado:=Processo32Primeiro(Mão,lppe); whilefounddo começar ListBox1.Items.Add(StrPas(lppe.szExeFile)); encontrado:=Process32Next(Hand,lppe); fim; fim; ◇[DELPHI]Crie uma nova tabela Table2 baseada em BDETable1 Tabela2:=TTable.Create(nil); tentar Tabela2.NomeBancoDeDados:=Tabela1.NomeBancoDeDados; Tabela2.FieldDefs.Assign(Tabela1.FieldDefs); Tabela2.IndexDefs.Assign(Tabela1.IndexDefs); Tabela2.NomedaTabela:='nova_tabela'; Tabela2.CreateTable(); finalmente Tabela2.Free(); fim; ◇[DELPHI] A melhor maneira de entender a criação e referência de DLL //Veja DLLsource(FILE-->NEW-->DLL) primeiro bibliotecaprojeto1; usa SysUtils, Classes; functionaddit(f:inteiro;s:inteiro):inteiro;exportar; começar makeasum:=f+s; fim; exportações adicionar; fim. //Chamada (INurPROJECT) implementação functionaddit(f:integer;s:integer):integer;far;external'projeto1';//Declaração {A chamada é addit(2,4); o resultado mostra 6} ◇[DELPHI] Ler dinamicamente o tamanho do próprio programa functionGesSelfSize:inteiro; var f: arquivo de byte; começar modo de arquivo:=0; atribuaarquivo(f,nomedoaplicativo.exe); redefinir(f); Resultado:=filesize(f);//A unidade é bytes fechar arquivo(f); fim; ◇[DELPHI]Leia as informações do BIOS comMemo1.Linesdo começar Add('MainBoardBiosName:'+^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)))); fim; ◇[DELPHI]Criar aliases MSSQL dinamicamente procedimentoTForm1.Button1Click(Remetente:TObject); varMinhaLista:TStringList; começar MinhaLista:=TStringList.Create; tentar comMinhaListado começar Adicionar('SERVERNAME=210.242.86.2'); Add('DATABASENAME=db'); Add('NOME DE USUÁRIO=sa'); fim; Session1.AddAlias('TESTSQL','MSSQL',MyList);//ミMSSQL Sessão1.SaveConfigFile; finalmente MinhaLista.Free; Sessão1.Active:=Verdadeiro; Banco de Dados1.NomeBancoDeDados:='BD'; Banco de Dados1.AliasName:='TESTSQL'; Banco de dados1.LoginPrompt:=Falso; Database1.Params.Add('NOME DE USUÁRIO=sa'); Banco de dados1.Params.Add('SENHA='); Banco de Dados1.Conectado:=Verdadeiro; fim; fim; procedimentoTForm1.Button2Click(Sender:TObject); começar Banco de Dados1.Conectado:=Falso; Session1.DeleteAlias('TESTSQL'); fim; ◇[DELPHI] Tocar música de fundo usammsistema //Toca música MCISendString('OPENe:/1.MIDTYPESEQUENCERALIASNN','',0,0); MCISendString('PLAYNNFROM0','',0,0); MCISendString('CLOSEANIMATION','',0,0); fim; //Para de jogar MCISendString('OPENe:/1.MIDTYPESEQUENCERALIASNN','',0,0); MCISendString('STOPNN','',0,0); MCISendString('CLOSEANIMATION','',0,0); ◇[DELPHI]Um exemplo de código para interfaces e classes Tipo{Declaração de interface e classe: a diferença é que membros de dados, quaisquer métodos não públicos e métodos públicos não usam a palavra-chave PUBLIC na interface} Isample=interface//Definir interface Isample funçãogetstring:string; fim; Tamostra=classe(TInterfacedObject,Iamostra) público funçãogetstring:string; fim; //definição da função functionTsample.getstring:string; começar resultado:='o que é'; fim; //Chama o objeto da classe varsample:Tsample; começar amostra:=Tsample.create; showmessage(sample.getstring+'classobject!'); amostra.grátis; fim; //Interface de chamada varsampleinterface:Isample; amostra:Tamostra; começar amostra:=Tsample.create; sampleInterface:=sample;//A implementação da Interface deve usar classe {As duas linhas acima também podem ser expressas como sampleInterface:=Tsample.create;} showmessage(sampleInterface.getstring+'Interface!'); //sample.free;{Ao contrário das classes locais, as classes na Interface são liberadas automaticamente} sampleInterface:=nil;{objeto de interface de liberação} fim; ◇[DELPHI] A barra de tarefas não parece um programa apropriado var Estilo Estendido:Inteiro; começar Aplicativo.Inicializar; ExtendedStyle:=GetWindowLong(Application.Handle,GWL_EXSTYLE); SetWindowLong(Application.Handle,GWL_EXSTYLE,ExtendedStyleORWS_EX_TOOLWINDOWANDNOTWS_EX_APPWINDOW); Application.CreateForm(TForm1,Form1); Aplicativo.Executar; fim. ◇[DELPHI]ALT+CTRL+DEL não consegue ver o programa Adicione declaração após a implementação: functionRegisterServiceProcess(dwProcessID,dwType:Integer):Integer;stdcall;external'KERNEL32.DLL'; RegisterServiceProcess(GetCurrentProcessID,1); //Ocultar RegisterServiceProcess(GetCurrentProcessID,0); //Exibir ◇[DELPHI]Detectar símbolo da unidade óptica vardrive:char; cdromID:inteiro; começar fordrive:='d'to'z'do começar cdromID:=GetDriveType(pchar(drive+':/')); ifcdromID=5thenshowmessage('Sua unidade de CD-ROM é:'+drive+'disco!'); fim; fim; ◇[DELPHI] detecta placa de som ifauxGetNumDevs()<=0thenshowmessage('Nosoundcardfound!')elseshowmessage('Anysoundcardfound!'); ◇[DELPHI]Desenhe na grade de strings Evento StringGrid.OnDrawCell withStringGrid1.Canvasdo Desenhar(Rect.Left,Rect.Top,Image1.Picture.Graphic); ◇[SQLSERVER]Outra maneira de escrever a instrução Like em SQL Por exemplo, para encontrar todos os usuários cujo nome de usuário contenha "c", você pode usar usar meu banco de dados select*fromtable1whereusernamelike'%c%" Aqui está outra maneira de completar a função acima: usar meu banco de dados select*fromtable1wherecharindex('c',nome de usuário)>0 Em teoria, este método possui uma declaração de julgamento a mais que o método anterior, ou seja,> 0, mas esse processo de julgamento é o mais rápido, acredito que mais de 80% das operações são gastas na busca de palavras. Para strings e outras operações, não é grande coisa usar a função charindex. Também há vantagens em usar esse método, ou seja, você não pode usar diretamente como para%, |, etc. Os caracteres encontrados podem ser usados diretamente neste charindex, como segue: usar meu banco de dados select*fromtable1wherecharindex('%',nome de usuário)>0 Também pode ser escrito como: usar meu banco de dados select*fromtable1wherecharindex(char(37),nome de usuário)>0 O caractere ASCII é% ◇[DELPHI]SQL exibe vários bancos de dados/tabelas SELECTDISTINCTA.bianhao,a.xingming,b.gongziFROM"jianjie.dbf"a,"gongzi.DBF"b ONDE.bianhao=b.bianhao ◇[DELPHI]RFC (RequestForComment) relacionado IETF (Internet Engineering Task Force) mantém documentos RFC http://www.ietf.cnri.reston.va.us RFC882: Estrutura do cabeçalho da mensagem RFC1521: MIME Parte 1, método de transmissão de mensagens RFC1945: Documentação de transferência de documentos multimídia ◇[DELPHI]Uso do processador TNMUUP varinStream,outStream:TFileStream; começar inStream:=TFileStream.create(infile.txt,fmOpenRead); outStream:=TFileStream(outfile.txt,fmCreate); NMUUE.Method:=uuCode;{UUEncode/Decode} //NMUUE.Method:=uuMIME;{MIME} NMUUE.InputStream:=InStream; NMUUE.OutputStream:=OutStream; NMUUE.Encode;{processamento de codificação} //NMUUE.Decode;{processamento de decodificação} inStream.free; outStream.free; fim; ◇[DELPHI]Operação TFileStream //Lê a contagem de bytes da posição atual do fluxo de arquivos para o buffer BUFFER functionread (varbuffer; contagem: inteiro longo): inteiro longo; substituir; //Lê o buffer BUFFER no fluxo de arquivos functionwrite (constbuffer; contagem: inteiro longo): inteiro longo; substituir; //Define o ponteiro de leitura e gravação atual do fluxo de arquivo para OFFSET functioneek(deslocamento:inteiro longo;origem:palavra):inteiro longo;substituir; origem={soFromBeginning,soFromCurrent,soFromEnd} //Copia COUNT da posição atual em outro fluxo de arquivos para a posição atual no fluxo de arquivos atual functioncopyfrom(fonte:TStream;contagem:int longo):int longo; //Lê o arquivo especificado no fluxo de arquivos varmyFStream:TFileStream; começar meuFStream:=TFileStream.create(OpenDialog1.nome do arquivo,fmOpenRead); fim; [Javascript] Verifique se o plug-in Shockwave&Quicktime do IE está instalado ------------------ Obrigado pela paciência na leitura, você tem habilidade, espero que continue postando!