Habilidades básicas de desarrollo DELPHI
◇[DELPHI] Copiar archivos de Network Neighborhood
utiliza shellapi;
copyfile(pchar('newfile.txt'),pchar('//nombre de computadora/dirección/targer.txt'),false);
◇[DELPHI] produce el efecto de arrastre del mouse
Implementado a través del evento MouseMove, evento DragOver, evento EndDrag, como LABEL en PANEL:
varxpanel,ypanel,xlabel,ylabel:entero;
Evento MouseMove del PANEL:xpanel:=x;ypanel:=y;
Evento DragOver del PANEL:xpanel:=x;ypanel:=y;
Evento MouseMove de LABEL:xlabel:=x;ylabel:=y;
Evento EndDrag de LABEL: label.left:=xpanel-xlabel;label.top:=ypanel-ylabel;
◇[DELPHI] Obtener el directorio de WINDOWS
utiliza shellapi;
varwindir:matriz[0..255]ofchar;
getwindowsdirectory(windir,tamaño de(windir));
O leer desde el registro, ubicación:
HKEY_LOCAL_MACHINE/Software/Microsoft/Windows/Versión actual
Clave SystemRoot, obtenida como: C:/WINDOWS
◇[DELPHI] Dibuja líneas en FORM u otros contenedores
varx,y:matriz[0..50]de entero;
lienzo.pen.color:=clred;
lienzo.pen.style:=PSDash;
form1.canvas.moveto(trunc(x[i]),trunc(y[i]));
form1.canvas.lineto(trunc(x[j]),trunc(y[j]));
◇[DELPHI] uso de la lista de cadenas
vartips:tstringlist;
consejos:=tstringlist.create;
tips.loadfromfile('nombre de archivo.txt');
edit1.text:=consejos[0];
tips.add('lastlineadditionstring');
tips.insert(1,'insertstringatNO2line');
tips.savetofile('nuevoarchivo.txt');
consejos.gratis;
◇[DELPHI]Operación sencilla del portapapeles
richedit1.selectall;
richedit1.copytoclipboard;
richedit1.cuttoclipboard;
editar1.pastefromclipboard;
◇[DELPHI] Acerca de las operaciones de archivos y directorios
Chdir('c:/abcdir');Ir al directorio
Mkdir('dirname');Crear directorio
Rmdir('nombredir'); eliminar directorio
GetCurrentDir;//Obtiene el nombre del directorio actual, sin '/'
Getdir(0,s);//Obtener el nombre del directorio de trabajo s:='c:/abcdir';
Deletefile('abc.txt');//Eliminar archivo
Renamefile('old.txt','new.txt');//Cambio de nombre del archivo
ExtractFilename(filelistbox1.filename);//Obtener el nombre del archivo
ExtractFileExt(filelistbox1.filename);//Obtener el sufijo del archivo
◇[DELPHI] Atributos del archivo de proceso
attr:=filegetattr(filelistbox1.filename);
if(attrandfaReadonly)=faReadonlythen...//solo lectura
if(attrandfaSysfile)=faSysfilethen...//Sistema
if(attrandfaArchive)=faArchivethen...//Archivar
if(attrandfaHidden)=faHiddenentonces...//Ocultar
◇[DELPHI]Ejecutar archivos fuera del programa
WINEXEC//Llamar archivo ejecutable
winexec('command.com/ccopy*.*c:/',SW_Normal);
vinoxec('startabc.txt');
ShellExecute o ShellExecuteEx//Inicie el programa de asociación de archivos
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] Obtenga el nombre del proceso que se ejecuta en el sistema
varhCurrentWindow:HWnd;szText:array[0..254]ofchar;
comenzar
hCurrentWindow:=Getwindow(handle,GW_HWndFrist);
mientrashVentanaActual<>0do
comenzar
ifGetwindowtext(hcurrnetwindow,@sztext,255)>0thenlistbox1.items.add(strpas(@sztext));
hCurrentWindow:=Getwindow(hCurrentwindow,GW_HWndNext);
fin;
fin;
◇[DELPHI]Acerca de la integración del ensamblaje
AsmEnd;
EAX, ECX y EDX se pueden modificar a voluntad; ESI, EDI, ESP, EBP y EBX no se pueden modificar.
◇[DELPHI]Acerca de la función de conversión de tipo
FloatToStr//Punto flotante a cadena
FloatToStrF//Coma flotante formateada a cadena
IntToHex//Entero a hexadecimal
TiempoAStr
FechaAStr
FechaHoraToStr
FmtStr// Genera una cadena en el formato especificado
FormatDateTime('AAAA-MM-DD,hh-mm-ss',FECHA);
◇[DELPHI]Procedimientos y funciones de cadena
Insert(obj,target,pos);//El destino de la cadena se inserta en la posición de pos. Si el resultado de la inserción es mayor que la longitud máxima del destino, los caracteres adicionales se truncarán. Si Pos está fuera de 255, se producirá un error de operación. Por ejemplo, st:='Brian', luego Insertar('OK',st,2) cambiará st a 'BrOKian'.
Delete(st,pos,Num);// Elimina una subcadena de Num (entero) caracteres a partir de la posición pos (entero) en la cadena st. Por ejemplo, st:='Brian', luego Eliminar (st,3,2) se convertirá en Brn.
Str(value,st);//Convierte el valor numérico (entero o tipo real) en una cadena y colócalo en st. Por ejemplo, cuando a=2.5E4, str(a:10,st) hará que el valor de st sea '25000'.
Val(st,var,code);//Convierta la expresión de cadena st en el valor entero o real correspondiente y guárdelo en var. St debe ser una cadena que represente un valor numérico y cumplir con las reglas para constantes numéricas. Durante el proceso de conversión, si no se detecta ningún error, el código de la variable se establece en 0; de lo contrario, se establece en la posición del primer carácter de error. Por ejemplo, st:=25.4E3, x es una variable real, entonces val(st,x,code) hará que el valor de X sea 25400 y el valor del código 0.
Copy(st.pos.num);//Devuelve una subcadena que comienza en la posición pos (entero) en la cadena st y que contiene num (entero) caracteres. Si pos es mayor que la longitud de la cadena st, se devolverá una cadena vacía. Si pos está fuera de 255, se producirá un error de tiempo de ejecución. Por ejemplo, st:='Brian', luego Copiar(st,2,2) devuelve 'ri'.
Concat(st1,st2,st3...,stn);//Concatena las cadenas representadas por todas las variables independientes en el orden indicado y devuelve el valor concatenado. Si la longitud del resultado es 255, se producirá un error de tiempo de ejecución. Por ejemplo, st1:='Brian',st2:='',st3:='Wilfred', entonces Concat(st1,st2,st3) devuelve 'BrianWilfred'.
Longitud(st);//Devuelve la longitud de la expresión de cadena st. Por ejemplo, st:='Brian', entonces el valor de retorno de Longitud(st) es 5.
Pos(obj, target);// Devuelve la posición donde la cadena obj aparece por primera vez en la cadena de destino target. Si el objetivo no tiene una cadena coincidente, el valor de retorno de la función Pos es 0. Por ejemplo, target:='BrianWilfred', entonces el valor de retorno de Pos('Wil',target) es 7 y el valor de retorno de Pos('hurbet',target) es 0.
◇[DELPHI]Acerca del manejo del registro
utilizaRegistro;
varreg:Tregistro;
reg:=Tregistry.create;
reg.rootkey:='HKey_Current_User';
reg.openkey('Panel de control/Escritorio',falso);
reg.WriteString('TitleWallpaper','0');
reg.writeString('Wallpaper',filelistbox1.filename);
reg.closereg;
libre de registro;
◇[DELPHI]Acerca de los nombres de constantes del 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)
Arizona:$41(65)--$5A(90)
0-9:$30(48)--$39(57)
◇[DELPHI] Determinar preliminarmente el idioma nativo del programa
Indicador de DOS del software DELPHI: Este programa debe ejecutarse en Win32.
Aviso de DOS para el software VC++: Este programa no se puede ejecutar en modo DOS.
◇[DELPHI]Cookies operativas
respuesta.cookies("nombre").dominio:='http://www.086net.com';
conrespuesta.cookies.adddo
comenzar
nombre:='nombre de usuario';
valor:='nombre de usuario';
fin
◇[DELPHI] agregado al enlace del menú del documento
utiliza shellapi,shlOBJ;
shAddToRecentDocs(shArd_path,pchar(filepath));//Agregar conexión
shAddToRecentDocs(shArd_path,nil);//Borrar
◇[Varios] Copia de seguridad del diccionario inteligente de métodos de entrada ABC
windows/sistema/usuario.rem
windows/system/tmmr.rem
◇[DELPHI] Determinar los botones del mouse
ifGetAsyncKeyState(VK_LButton)<>0entonces...//Botón izquierdo
ifGetAsyncKeyState(VK_MButton)<>0entonces...//Tecla central
ifGetAsyncKeyState(VK_RButton)<>0entonces...//Clic derecho
◇[DELPHI]Establecer la visualización máxima del formulario
evento onFormCreate
self.width:=screen.width;
self.height:=pantalla.height;
◇Botón [DELPHI] para aceptar mensajes
Procesado en el evento OnCreate: application.OnMessage:=MyOnMessage;
procedimientoTForm1.MyOnMessage(varMSG:TMSG;varHandle:Boolean);
comenzar
ifmsg.message=256entonces...//CUALQUIER clave
ifmsg.message=112entonces...//F1
ifmsg.message=113entonces...//F2
fin;
◇[Varios]Ocultar carpetas compartidas
Efecto de compartir: accesible, pero invisible (en gestión de recursos, Network Neighborhood)
Nombra la acción: dirección$
Visita ://computadora/dirección/
◇[javaScript]Efectos de uso común en páginas web de JavaScript
La página web está programada para cerrarse en 60 segundos.
cerrar ventana
cierre
Transferencia de URL programada
También es posible configurar TQuery durante la operación; consulte la ayuda de Delphi para obtener más detalles.
□◇[DELPHI] Obtener el valor RGB de un determinado punto de la imagen
procedimientoTForm1.Image1MouseDown(Remitente:TObject;Botón:TMouseButton;
Mayús:TShiftState;X,Y:Entero);
var
rojo, verde, azul: byte;
yo: entero;
comenzar
i:=imagen1.Canvas.Pixels[x,y];
Azul:=GetBValue(i);
Verde:=GetGValue(i):
Rojo:=GetRValue(i);
Etiqueta1.Caption:=inttostr(Rojo);
Label2.Caption:=inttostr(Verde);
Etiqueta3.Caption:=inttostr(Azul);
fin;
□◇[DELPHI]Acerca de la descomposición y conversión del formato de fecha
varia año,mes,día:Palabra;ahora2:Tdatahora;
ahora2:=fecha();
fecha decodificada (ahora2, año, mes, día);
lable1.Text:=inttostr(año)+'año'+inttostr(mes)+'mes'+inttostr(día)+'día';
◇[DELPHI]Cómo determinar el modo de conexión de red actual
El resultado del juicio es el modo MODEM, LAN o servidor proxy.
utiliza wininet;
FunciónConexiónTipo:booleano;
varflags:dword;
comenzar
Resultado:=InternetGetConnectedState(@flags,0);
siResultadoentonces
comenzar
si(flagsandINTERNET_CONNECTION_MODEM)=INTERNET_CONNECTION_MODEMentonces
comenzar
mostrar mensaje('Módem');
fin;
si(flagsandINTERNET_CONNECTION_LAN)=INTERNET_CONNECTION_LANentonces
comenzar
mostrar mensaje('LAN');
fin;
si(flagsandINTERNET_CONNECTION_PROXY)=INTERNET_CONNECTION_PROXYentonces
comenzar
mostrar mensaje('Proxy');
fin;
si(flagsandINTERNET_CONNECTION_MODEM_BUSY)=INTERNET_CONNECTION_MODEM_BUSYentonces
comenzar
showmessage('MódemOcupado');
fin;
fin;
fin;
◇[DELPHI]Cómo determinar si una cadena es una dirección de CORREO ELECTRÓNICO válida
functionIsEMail(Correo electrónico:Cadena):Booleano;
vars:Cadena;ETpos:Entero;
comenzar
ETpos:=pos('@',correo electrónico);
siETpos>1entonces
comenzar
s:=copiar(correo electrónico,ETpos+1,longitud(correo electrónico));
si(pos('.',s)>1)y(pos('.',s)<longitud(es))entonces
Resultado:=trueelseResultado:=falso;
fin
demás
Resultado:=falso;
fin;
◇[DELPHI] Determinar si el sistema está conectado a INTERNET
Es necesario introducir la función InetIsOffline en URL.DLL.
La declaración de función es:
functionInetIsOffline(Flag:Integer):Boolean;stdcall;external'URL.DLL';
Luego puede llamar a la función para determinar si el sistema está conectado a INTERNET.
siInetIsOffline(0)entoncesShowMessage('¡no conectado!')
elseShowMessage('¡conectado!');
Esta función devuelve VERDADERO si el sistema local no está conectado a INTERNET.
Adjunto:
La mayoría de los sistemas con IE u OFFICE97 tienen esta DLL disponible para llamar.
Inet está fuera de línea
BOOLInet está fuera de línea (
Banderas DWORDdw,
);
◇[DELPHI]Reproduce y pausa fácilmente archivos WAV
utiliza el sistema mm;
functionPlayWav(constFileName:string):Booleano;
comenzar
Resultado:=ReproducirSound(PChar(Nombre de archivo),0,SND_ASYNC);
fin;
procedimientoStopWav;
var
buffer:matriz[0..2]ofchar;
comenzar
búfer[0]:=#0;
ReproducirSonido(Buffer,0,SND_PURGE);
fin;
◇[DELPHI] Obtener información del BIOS de la máquina
conMemo1.Linesdo
comenzar
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))));
fin;
◇[DELPHI] Descargar archivos de Internet
utilizaUrlMon;
funciónDescargarArchivo(Fuente,Destino:cadena):Booleano;
comenzar
intentar
Resultado:=UrlDownloadToFile(nil,PChar(fuente),PChar(Dest),0,nil)=0;
excepto
Resultado:=Falso;
fin;
fin;
ifDownloadFile('http://www.borland.com/delphi6.zip,'c:/kylix.zip')entonces
ShowMessage('Descarga exitosa')
elseShowMessage('Descarga fallida')
◇[DELPHI]Resolver la dirección IP del servidor
utiliza winsock
funciónIPAddrToName(IPAddr:Cadena):Cadena;
var
SockAddrIn: TSockAddrIn;
HostEnt:PHostEnt;
WSAData:TWSAData;
comenzar
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:='';
fin;
◇[DELPHI] Obtenga la conexión en el acceso directo
functionExeFromLink(constlinkname:string):string;
var
Fdir,
Nombre,
Nombre del archivo ejecutable:PChar;
z: entero;
comenzar
NombreEje:=StrAlloc(MAX_PATH);
NombreF:=StrAlloc(MAX_PATH);
FDir:=StrAlloc(MAX_PATH);
StrPCopy(FName,ExtractFileName(nombredelenlace));
StrPCopy(FDir,ExtractFilePath(nombre del enlace));
z:=FindExecutable(FName,FDir,ExeName);
siz>32entonces
Resultado:=StrPas(NombreExe)
demás
Resultado:='';
StrDispose(FDir);
StrDispose(FNombre);
StrDispose(NombreExe);
fin;
◇[DELPHI]Controla la finalización automática de TCombobox
{Propiedad 'ordenada' del TComboboxtotrue}
varlatKey:Palabra;//variable global
//Evento OnChange de TCombobox
procedimientoTForm1.AutoCompleteChange(Remitente:TObject);
var
SearchStr:cadena;
retVal:entero;
comenzar
SearchStr:=(SenderasTCombobox).Texto;
iflastKey<>VK_BACKentonces//retroceso:VK_BACKo$08
comenzar
retVal:=(SenderasTCombobox).Perform(CB_FINDSTRING,-1,LongInt(PChar(SearchStr)));
ifretVal>CB_Errthen
comenzar
(SenderasTCombobox).ItemIndex:=retVal;
(SenderasTCombobox).SelStart:=Longitud(SearchStr);
(SenderasTCombobox).SelLength:=
(Longitud((SenderasTCombobox).Text)-Longitud(SearchStr));
fin;//retVal>CB_Err
fin;//últimaClave<>VK_BACK
última clave:=0;//restablecer última clave
fin;
//Evento OnKeyDown de TCombobox
procedimientoTForm1.AutoCompleteKeyDown(Remitente:TObject;varKey:Word;
Mayús:TShiftState);
comenzar
últimaClave:=Clave;
fin;
◇[DELPHI]Cómo borrar un directorio
funciónDirectorioEmpty(ElDirectorio:Cadena;Recursivo:Booleano):
Booleano;
var
BuscarRec:TBuscarRec;
Res:Entero;
comenzar
Resultado:=Falso;
ElDirectorio:=NormalDir(ElDirectorio);
Res:=FindFirst(TheDirectory+'*.*',faAnyFile,SearchRec);
intentar
mientrasRes=0hacer
comenzar
si(SearchRec.Name<>'.')y(SearchRec.Name<>'..')entonces
comenzar
if((SearchRec.AttrandfaDirectory)>0)yRecursivo
luego comenzar
DirectorioVacío(ElDirectorio+BuscarRec.Nombre,Verdadero);
RemoveDirectory(PChar(TheDirectory+SearchRec.Name));
fin
otra cosa comenzar
EliminarArchivo(PChar(ElDirectorio+BuscarRec.Nombre))
fin;
fin;
Res:=BuscarSiguiente(BuscarRec);
fin;
Resultado:=Verdadero;
finalmente
BuscarClose(SearchRec.FindHandle);
fin;
fin;
◇[DELPHI]Cómo calcular el tamaño de un directorio
functionGetDirectorySize(constADirectory:cadena):Entero;
var
Dir:TSearchRec;
Ret:entero;
Ruta:cadena;
comenzar
Resultado:=0;
Ruta:=ExtractFilePath(ADirectory);
Ret:=Sysutils.FindFirst(ADirectory,faAnyFile,Dir);
siRet<>NO_ERRORthenexit;
intentar
whileret=NO_ERRORhacer
comenzar
inc(Resultado,Tamaño Dir.);
si(Dir.Attrin[faDirectory])y(Dir.Name[1]<>'.')entonces
Inc(Resultado,GetDirectorySize(Ruta+Dir.Nombre+'/*.*'));
Ret:=Sysutils.FindNext(Dir);
fin;
finalmente
Sysutils.FindClose(Dir);
fin;
fin;
◇[DELPHI]Cómo agregar el instalador a la lista de desinstalación
Opere el registro de la siguiente manera:
1. Cree una clave principal en la clave HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Uninstall con cualquier nombre.
EjemploHKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Uninstall/MyUninstall
2. Introduzca dos valores de cadena en HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Uninstall/MyUnistall,
Los nombres de estos dos valores de cadena son específicos: DisplayName y UninstallString.
3. Asigne el valor de la cadena DisplayName al nombre que se muestra en "Eliminar lista de aplicaciones", como por ejemplo 'AimingUninstallone';
Asigne la cadena UninstallString al comando de eliminación ejecutado, como C:/WIN97/uninst.exe-f "C:/TestPro/aimTest.isu"
◇[DELPHI]Mensaje de cierre de sesión WM_QUERYEND interceptado
tipo
TForm1=clase(TForm)
procedimientoWMQueryEndSession(varMessage:TWWMQueryEndSession);mensajeWM_QUERYENDSESSION;
procedimientoCMEraseBkgnd(varMessage:TWMEraseBkgnd);MessageWM_ERASEBKGND;
privado
{Declaraciones privadas}
público
{Declaraciones públicas}
fin;
procedimientoTForm1.WMQueryEndSession(varMessage:TWMQueryEndSession);
comenzar
Showmessage('la computadora está a punto de apagarse');
fin;
◇[DELPHI]Consigue vecinos en línea
procedimientogetnethood();//NT se utiliza como servidor y la depuración se pasa en WIN98.
var
a,i:entero;
código de error: entero;
netres:matriz[0..1023]denetresource;
mango de enumeración: mango;
enumeraciones:dword;
tamaño del búfer:dword;
s:cadena;
mylistitems:tlistitems;
mylistitem:tlistitem;
tododominio:tstrings;
comenzar//listcomputerisalistviewtolistallcomputers;controlcenterisaform.
tododominio:=tstringlist.Create;
connetres[0]dobegin
dwscope:=RESOURCE_GLOBALNET;
dwtype:=RESOURCETYPE_ANY;
dwdisplaytype:=RESOURCEDISPLAYTYPE_DOMAIN;
dwusage:=RESOURCEUSAGE_CONTAINER;
lplocalname:=nil;
lpremotename:=nil;
lpcomentario:=nulo;
proveedor lp:=nil;
end;//Obtener todos los dominios
código de error:=wnetopenenum(RESOURCE_GLOBALNET,RESOURCETYPE_ANY,RESOURCEUSAGE_CONTAINER,@netres[0],enumhandle);
iferrcode=NO_ERRORentoncescomienza
enumeraciones:=1024;
tamaño del buffer:=tamañode(netres);
código de error:=wnetenumresource(enumhandle,enumentries,@netres[0],buffersize);
fin;
a:=0;
mylistitems:=controlcenter.lstcomputer.Items;
mylistitems.Claro;
while(string(netres[a].lpprovider)<>'')y(errcode=NO_ERROR)hacer
comenzar
alldomain.Add(netres[a].lpremotename);
a:=a+1;
fin;
wnetcloseenum(enumhandle);
//Obtener todas las computadoras
mylistitems:=controlcenter.lstcomputer.Items;
mylistitems.Claro;
fori:=0toalldomain.Count-1do
comenzar
connetres[0]dobegin
dwscope:=RESOURCE_GLOBALNET;
dwtype:=RESOURCETYPE_ANY;
dwdisplaytype:=RESOURCEDISPLAYTYPE_SERVER;
dwusage:=RESOURCEUSAGE_CONTAINER;
lplocalname:=nil;
lpremotename:=pchar(tododominio[i]);
lpcomentario:=nulo;
proveedor lp:=nil;
fin;
ErrCode:=WNetOpenEnum(RESOURCE_GLOBALNET,RESOURCETYPE_ANY,RESOURCEUSAGE_CONTAINER,@netres[0],EnumHandle);
iferrcode=NO_ERRORentonces
comenzar
EntradasEnum:=1024;
Tamaño del búfer:=TamañoDe(NetRes);
ErrCode:=WNetEnumResource(EnumHandle,EnumEntries,@NetRes[0],BufferSize);
fin;
a:=0;
while(string(netres[a].lpprovider)<>'')y(errcode=NO_ERROR)hacer
comenzar
mylistitem:=mylistitems.Add;
mylistitem.ImageIndex:=0;
mylistitem.Caption:=uppercase(stringreplace(string(NetRes[a].lpremotename),'//','',[rfReplaceAll]));
a:=a+1;
fin;
wnetcloseenum(enumhandle);
fin;
fin;
◇[DELPHI] Obtener el directorio compartido en una computadora determinada
procedimientogetsharefolder(constcomputername:string);
var
código de error,a:entero;
netres:matriz[0..1023]denetresource;
mango de enumeración: mango;
enumeraciones, tamaño del búfer: dword;
s:cadena;
mylistitems:tlistitems;
mylistitem:tlistitem;
miscadenas:tstringlist;
comenzar
connetres[0]dobegin
dwscope:=RESOURCE_GLOBALNET;
dwtype:=RESOURCETYPE_DISK;
dwdisplaytype:=RESOURCEDISPLAYTYPE_SHARE;
dwusage:=RESOURCEUSAGE_CONTAINER;
lplocalname:=nil;
lpremotename:=pchar(nombredecomputadora);
lpcomentario:=nulo;
proveedor lp:=nil;
end;//Obtener el nodo raíz
código de error:=wnetopenenum(RESOURCE_GLOBALNET,RESOURCETYPE_DISK,RESOURCEUSAGE_CONTAINER,@netres[0],enumhandle);
iferrcode=NO_ERRORentonces
comenzar
EntradasEnum:=1024;
Tamaño del búfer:=TamañoDe(NetRes);
ErrCode:=WNetEnumResource(EnumHandle,EnumEntries,@NetRes[0],BufferSize);
fin;
wnetcloseenum(enumhandle);
a:=0;
mylistitems:=controlcenter.lstfile.Items;
mylistitems.Claro;
while(string(netres[a].lpprovider)<>'')y(errcode=NO_ERROR)hacer
comenzar
conmylistitemsdo
comenzar
mylistitem:=añadir;
mylistitem.ImageIndex:=4;
mylistitem.Caption:=extractfilename(netres[a].lpremotename);
fin;
a:=a+1;
fin;
fin;
◇[DELPHI] Obtenga el número de serie del disco duro
varSerialNum:pdword;a,b:dword;Buffer:array[0..255]ofchar;
comenzar
ifGetVolumeInformation('c:/',Buffer,SizeOf(Buffer),SerialNum,a,b,nil,0)thenLabel1.Caption:=IntToStr(SerialNum^);
fin;
◇[DELPHI]Paso automático de página de MEMO
ProcedimientoScrollMemo(Nota:TMemo;Dirección:char);
comenzar
dirección de caso de
'd':comenzar
Enviar mensaje (Memo.Handle, {HWNDoftheMemoControl}
WM_VSCROLL, {Mensaje de Windows}
SB_PAGEDOWN,{ScrollCommand}
0){No utilizado}
fin;
'tú':comienzo
Enviar mensaje (Memo.Handle, {HWNDoftheMemoControl}
WM_VSCROLL, {Mensaje de Windows}
SB_PAGEUP,{ScrollCommand}
0);{No utilizado}
fin;
fin;
fin;
procedimientoTForm1.Button1Click(Remitente:TObject);
comenzar
ScrollMemo(Memo1,'d');//Sube la página
fin;
procedimientoTForm1.Button1Click(Remitente:TObject);
comenzar
ScrollMemo(Memo1,'u');//Baje la página
fin;
◇[DELPHI]Presione enter para ir a la siguiente posición en DBGrid (tecla Tabulador)
procedimientoTForm1.DBGrid1KeyPress(Remitente:TObject;varKey:Char);
comenzar
siClave=#13entonces
siDBGrid1.Columns.Grid.SelectedIndex<DBGrid1.Columns.Count-1entonces
DBGrid1.Columns[DBGrid1.Columns.grid.SelectedIndex+1].Field.FocusControl
demás
comenzar
Tabla1.siguiente;
DBGrid1.Columns[0].field.FocusControl;
fin;
fin;
◇[DELPHI]Cómo instalar el control
Método de instalación:
1. Para un solo control, Componente-->instalarcomponente..-->archivo PAS o DCU-->instalar
2. Para paquetes de control con archivos *.dpk, simplemente haga clic en Archivo-->abrir (seleccione *.dpk en el cuadro de lista desplegable)-->instalar.
3. Para paquetes de control con archivos *.dpl, InstallPackages-->Add-->nombre de archivo dpl.
4. Si el botón Instalar anterior no es válido, pruebe con el botón Compilar.
5. Si es runtimelib, agréguelo a runtimepackes en paquetes en la opción.
Si indica que no se puede encontrar el archivo durante la compilación, generalmente se debe a que el directorio de instalación del control no está en el directorio Lib de Delphi. Hay dos formas de resolver el problema:
1. Copie los archivos de instalación originales en el directorio Lib de Delphi.
2. O agregue la ruta del código original del control al directorio Lib de Delphi en Herramientas-->EnvironmentOptions.
◇[DELPHI] Eliminar completamente el directorio (deltree)
procedimientoTForm1.DeleteDirectory(strDir:String);
var
sr:TSearchRec;
FileAttrs:Entero;
strfilename:cadena;
strPth: cadena;
comenzar
strpth:=Getcurrentdir();
FileAttrs:=faAnyFile;
ifFindFirst(strpth+'/'+strdir+'/*.*',FileAttrs,sr)=0entonces
comenzar
si(sr.AttrandFileAttrs)=sr.Attrentonces
comenzar
strfilename:=sr.Nombre;
si el archivo existe (strpth+'/'+strdir+'/'+strfilename)entonces
eliminararchivo(strpth+'/'+strdir+'/'+strfilename);
fin;
mientrasBuscarSiguiente(sr)=0do
comenzar
si(sr.AttrandFileAttrs)=sr.Attrentonces
comenzar
strfilename:=sr.nombre;
si el archivo existe (strpth+'/'+strdir+'/'+strfilename)entonces
eliminararchivo(strpth+'/'+strdir+'/'+strfilename);
fin;
fin;
BuscarCerrar(sr);
eliminadoir(strpth+'/'+strdir);
fin;
fin;
◇[DELPHI] Obtenga la información de fila y columna del cursor actual del control TMemo en Tpoint
1.funciónReadCursorPos(SourceMemo:TMemo):TPoint;
varPoint:TPoint;
comenzar
point.y:=SendMessage(SourceMemo.Handle,EM_LINEFROMCHAR,SourceMemo.SelStart,0);
point.x:=SourceMemo.SelStart-SendMessage(SourceMemo.Handle,EM_LINEINDEX,point.y,0);
Resultado:=Punto;
fin;
2.LineLength:=SendMessage(memol.handle,EM-LINELENGTH,Cpos,0);//Longitud de línea
◇[DELPHI]Leer el número de serie del disco duro
funciónGetDiskSerial(DiskChar:Char):cadena;
var
Número de serie:pdword;
a,b:dpalabra;
Búfer:matriz[0..255]ofchar;
comenzar
resultado:="";
ifGetVolumeInformation(PChar(diskchar+":/"),Buffer,SizeOf(Buffer),SerialNum,
a,b,nulo,0)entonces
Resultado:=IntToStr(SerialNum^);
fin;
◇[INTERNET]Habilidades integrales comunes de CSS
1. P:first-letter{font-size:300%;float:left}//La primera letra será tres veces más grande que la fuente normal.
2.
3. Insertar una hoja de estilo
4.
Arial//SPAN acepta atributos STYLE, CLASS e ID
DIV puede contener párrafos, títulos, tablas e incluso otras partes
5.
6. //Ver 3 para la definición. 7. Lista de propiedades Estilo de fuente:estilo de fuente:[normal|italic|oblique]; Tamaño de fuente: tamaño de fuente: [xx-pequeño|x-pequeño|pequeño|mediano|grande|x-grande|xx-grande|más grande|más pequeño|<longitud>|<porcentaje>] Decoración de texto: decoración de texto: [subrayado||sobrelínea||línea completa||parpadeo] Transformación de texto:[ninguna|mayúscula|mayúscula|minúscula] Color de fondo:color-fondo:[<color>|transparente] imagen-de-fondo:imagen-de-fondo:[ Altura de línea:[normal|<número>|<longitud>|<porcentaje>] Estilo de borde:[ninguno|punteado|discontinuo|sólido|doble|ranura|cresta|recuadro|inicial] flotador:flotante:[izquierda|derecha|ninguno] 8. unidad de longitud Unidades relativas: em (em, la altura de la fuente del elemento) ex(x-height, la altura de la letra "x") px (píxeles, en relación con la resolución de la pantalla) Longitud absoluta: en (pulgada, 1 pulgada = 2,54 centímetros) cm (centímetro, 1 centímetro = 10 milímetros) mm(metro) pt (punto, 1 punto = 1/72 de pulgada) pc (Pa, 1 Pa = 12 puntos) ◇[DELPHI] Breves pasos para hacer VCL 1. Crear eventos de método de atributo de componente (Cree unidades de biblioteca, herede como nuevos tipos, agregue propiedades, métodos, eventos, registre componentes, cree archivos de paquetes) 2.Procesamiento de mensajes 3.Manejo de excepciones 4. Partes visibles ◇[DELPHI] Cargando biblioteca de enlaces dinámicos Carga estática: nombre del procedimiento; externo'lib.dll'; Carga dinámica:varhandle:Thandle; manejar:=loadlibrary('lib.dll'); si maneja <> 0 entonces comenzar {hacer algo} biblioteca gratuita(identificador); fin; ◇[DELPHI]Variables y direcciones de puntero varx,y:integer;p:^integer;//Puntero a la variable INTEGER x:=10; //Asignación de variables p:=@x;//La dirección de la variable x y:=p^;//Asignar puntero P a Y @@procedure//Devuelve la dirección de memoria de la variable de proceso ◇[DELPHI] determina si el carácter es un carácter chino ByteType('¿Cómo estás jaja',1)=mbLeadByte//es el primer carácter ByteType('¿Cómo estás jaja',2)=mbTrailByte//es el segundo carácter ByteType('¿Cómo estás jaja',5)=mbSingleByte//No es un carácter chino ◇[DELPHI]operación de posicionamiento de notas memo1.lines.delete(0)//Eliminar línea 1 memo1.selstart:=10//Localiza 10 bytes ◇[DELPHI] Obtener código interno de caracteres de doble byte funcióngetit(s:cadena):entero; comenzar Resultado:=byte(s[1])*$100+byte(s[2]); fin; Uso: getit('cálculo')//$bcc6 es decimal 48326 ◇[DELPHI]Llame al procedimiento de almacenamiento de datos AÑADIR El procedimiento almacenado es el siguiente: crearprocedimientoreaddrecord( registro1varchar(10) registro2varchar(20) ) como comenzar insertar en nombre de tabla (campo1, campo2) valores (: registro1,: registro2) fin Ejecutar procedimiento almacenado: EXECUTEprocedureaddrecord("urrecord1","urrecord2") ◇[DELPHI]Guardar archivos en campos de blobs functionblobcontenttostring(constfilename:string):string; comenzar withtfilestream.create(nombre de archivo,fmopenread)do intentar setlength(Resultado,tamaño); leer (Puntero (Resultado) ^, tamaño); finalmente gratis; fin; fin; //guardar campo comenzar si (opendialog1.execute) entonces comenzar sFileName:=OpenDialog1.FileName; adorable1.edit; adotable1.fieldbyname('visio').asstring:=Blobcontenttostring(FileName); adorable1.post; fin; ◇[DELPHI]Copia todos los archivos al portapapeles utiliza shlobj,activex,clipbrd; procedimientoTform1.copytoclipbrd(varFileName:cadena); var FE: TFormatEtc; Medio:TStgMedio; soltar archivos: PDropFiles; pArchivo:PChar; comenzar FE.cfFormato:=CF_HDROP; FE.dwaspect:=DVASPECT_CONTENT; FE.tymed:=TYMED_HGLOBAL; Medium.hGlobal:=GlobalAlloc(GMEM_SHAREorGMEM_ZEROINIT,SizeOf(TDropFiles)+length(FileName)+1); ifMedium.hGlobal<>0entoncescomenzar Medio.tymed:=TYMED_HGLOBAL; dropfiles:=GlobalLock(Medio.hGlobal); intentar dropfiles^.pfiles:=SizeOf(TDropFiles); soltar archivos^.fwide:=False; longint(pFile):=longint(dropfiles)+SizeOf(TDropFiles); StrPCopy(pFile,Nombre de archivo); Inc(pArchivo,Longitud(Nombre de archivo)+1); pArchivo^:=#0; finalmente GlobalUnlock(Medio.hGlobal); fin; Portapapeles.SetAsHandle(CF_HDROP,Medium.hGlobal); fin; fin; ◇[DELPHI] Enumere los procesos en ejecución del sistema actual utilizaTLHelp32; procedimientoTForm1.Button1Click(Remitente:TObject); varlppe:TProcessEntry32; encontrado: booleano; Mano: TMango; comenzar Mano:=CreateToolhelp32Snapshot(TH32CS_SNAPALL,0); encontrado:=Proceso32Primero(Mano,lppe); mientrasencontrado comenzar ListBox1.Items.Add(StrPas(lppe.szExeFile)); encontrado:=Proceso32Siguiente(Mano,lppe); fin; fin; ◇[DELPHI]Cree una nueva tabla Tabla2 basada en BDETable1 Tabla2:=TTable.Create(nil); intentar Table2.DatabaseName:=Table1.DatabaseName; Tabla2.FieldDefs.Assign(Tabla1.FieldDefs); Tabla2.IndexDefs.Assign(Tabla1.IndexDefs); Table2.TableName:='new_table'; Tabla2.CreateTable(); finalmente Tabla2.Gratis(); fin; ◇[DELPHI] La mejor manera de entender la creación y referencia de DLL //Mira primero DLLsource(ARCHIVO-->NUEVO-->DLL) proyectobiblioteca1; usos SysUtils, Clases; functionaddit(f:entero;s:entero):entero;exportar; comenzar makeasum:=f+s; fin; exportaciones agregar; fin. //Llamar (INurPROJECT) implementación functionaddit(f:integer;s:integer):integer;far;external'project1';//Declaración {La llamada es addit(2,4); el resultado muestra 6} ◇[DELPHI] Leer dinámicamente el tamaño del programa en sí funciónGesSelfSize:integer; var f:archivodebyte; comenzar modo de archivo:=0; asignar archivo (f, aplicación.exename); restablecer(f); Resultado:=filesize(f);//La unidad es bytes cerrar archivo(f); fin; ◇[DELPHI]Leer información del BIOS conMemo1.Linesdo comenzar 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)))); fin; ◇[DELPHI]Crear dinámicamente alias MSSQL procedimientoTForm1.Button1Click(Remitente:TObject); varMyList:TStringList; comenzar MiLista:=TStringList.Create; intentar conMiListado comenzar Agregar('SERVERNAME=210.242.86.2'); Agregar('DATABASENAME=db'); Agregar('NOMBRE DE USUARIO=sa'); fin; Session1.AddAlias('TESTSQL','MSSQL',MyList);//ミMSSQL Sesión1.SaveConfigFile; finalmente MiLista.Gratis; Sesión1.Activa:=Verdadero; Base de datos1.Nombre de la base de datos:='DB'; Base de datos1.AliasName:='TESTSQL'; Base de datos1.LoginPrompt:=Falso; Database1.Params.Add('NOMBRE DE USUARIO=sa'); Base de datos1.Params.Add('CONTRASEÑA='); Base de datos1.Conectada:=Verdadero; fin; fin; procedimientoTForm1.Button2Click(Remitente:TObject); comenzar Base de datos1.Conectada:=Falso; Session1.DeleteAlias('TESTSQL'); fin; ◇[DELPHI] Reproducir música de fondo utilizammsystem //Tocar música MCISendString('OPENe:/1.MIDTYPESEQUENCERALIASNN','',0,0); MCISendString('PLAYNNFROM0','',0,0); MCISendString('CLOSEANIMATION','',0,0); fin; //Deja de jugar MCISendString('OPENe:/1.MIDTYPESEQUENCERALIASNN','',0,0); MCISendString('STOPNN','',0,0); MCISendString('CLOSEANIMATION','',0,0); ◇[DELPHI]Un código de muestra para interfaces y clases Tipo {Declaración de interfaz y clase: la diferencia es que los miembros de datos, los métodos no públicos y los métodos públicos no utilizan la palabra clave PUBLIC en la interfaz} Isample=interfaz//Definir interfaz Isample funcióngetstring:cadena; fin; Tsample=clase(TInterfacedObject,Imuestra) público funcióngetstring:cadena; fin; //definición de función functionTsample.getstring:cadena; comenzar resultado:='qué se muestra'; fin; // Llamar al objeto de clase varsample:Tmuestra; comenzar muestra:=Tsample.create; showmessage(sample.getstring+'classobject!'); muestra.gratuita; fin; //Interfaz de llamada varsampleinterface:Imuestra; muestra:Tmuestra; comenzar muestra:=Tsample.create; sampleInterface:=sample;//La implementación de la interfaz debe usar la clase {Las dos líneas anteriores también se pueden expresar como sampleInterface:=Tsample.create;} showmessage(sampleInterface.getstring+'¡Interfaz!'); //sample.free;{A diferencia de las clases locales, las clases en la Interfaz se publican automáticamente} sampleInterface:=nil;{objeto de interfaz de lanzamiento} fin; ◇[DELPHI] La barra de tareas no parece un programa apropiado var Estilo extendido: entero; comenzar Aplicación.Inicializar; ExtendedStyle:=GetWindowLong(Application.Handle,GWL_EXSTYLE); SetWindowLong(Application.Handle,GWL_EXSTYLE,ExtendedStyleORWS_EX_TOOLWINDOWANDNOTWS_EX_APPWINDOW); Aplicación.CreateForm(TForm1,Form1); Aplicación.Ejecutar; fin. ◇[DELPHI]ALT+CTRL+DEL no puede ver el programa Agregar declaración después de la implementación: functionRegisterServiceProcess(dwProcessID,dwType:Integer):Integer;stdcall;external'KERNEL32.DLL'; RegisterServiceProcess(GetCurrentProcessID,1);//Ocultar RegisterServiceProcess(GetCurrentProcessID,0);//Mostrar ◇[DELPHI]Detectar símbolo de unidad óptica vardrive:char; cdromID:entero; comenzar fordrive:='d'to'z'do comenzar cdromID:=GetDriveType(pchar(unidad+':/')); ifcdromID=5thenshowmessage('Su unidad de CD-ROM es:'+unidad+'disco!'); fin; fin; ◇[DELPHI] detecta tarjeta de sonido ifauxGetNumDevs()<=0thenshowmessage('¡No se encontró tarjeta de sonido!')elseshowmessage('¡Se encontró cualquier tarjeta de sonido!'); ◇[DELPHI]Dibujar en la cuadrícula de cuerdas Evento StringGrid.OnDrawCell conStringGrid1.Canvasdo Dibujar(Rect.Izquierda,Rect.Superior,Imagen1.Imagen.Gráfico); ◇[SQLSERVER]Otra forma de escribir la declaración Like en SQL Por ejemplo, para buscar todos los usuarios cuyo nombre de usuario contenga "c", puede utilizar usar mi base de datos select*fromtable1wherenombredeusuariocomo'%c%" Aquí hay otra forma de completar la función anterior: usar mi base de datos seleccione*de la tabla1 dondecharindex('c',nombre de usuario)>0 En teoría, este método tiene una declaración de juicio más que el método anterior, es decir> 0, pero este proceso de juicio es el más rápido, creo que más del 80% de las operaciones se dedican a buscar palabras. Para cadenas y otras operaciones, no es gran cosa usar la función charindex. También hay ventajas al usar este método, es decir, no se puede usar directamente como %, |, etc. Los caracteres encontrados se pueden utilizar directamente en este índice de caracteres, de la siguiente manera: usar mi base de datos seleccione*fromtable1wherecharindex('%',nombre de usuario)>0 También se puede escribir como: usar mi base de datos seleccione*de la tabla1 dondecharindex(char(37),nombre de usuario)>0 El carácter ASCII es % ◇[DELPHI]SQL muestra múltiples bases de datos/tablas SELECTDISTINCTA.bianhao,a.xingming,b.gongziDE"jianjie.dbf"a,"gongzi.DBF"b DONDE.bianhao=b.bianhao ◇[DELPHI]RFC (Solicitud de comentario) relacionado IETF (Grupo de Trabajo de Ingeniería de Internet) mantiene documentos RFC http://www.ietf.cnri.reston.va.us RFC882: estructura del encabezado del mensaje RFC1521: MIME Parte 1, Método de transmisión de mensajes RFC1945: Documentación de transferencia de documentos multimedia ◇[DELPHI]Uso del procesador TNMUUP varinStream,outStream:TFileStream; comenzar inStream:=TFileStream.create(infile.txt,fmOpenRead); outStream:=TFileStream(outfile.txt,fmCreate); NMUUE.Método:=uuCode;{UUEncode/Decode} //NMUUE.Método:=uuMIME;{MIME} NMUUE.InputStream:=En corriente; NMUUE.OutputStream:=OutStream; NMUUE.Encode;{procesamiento de codificación} //NMUUE.Decode;{procesamiento de decodificación} inStream.gratis; outStream.gratis; fin; ◇[DELPHI]Operación TFileStream //Lee el recuento de bytes desde la posición actual de la secuencia del archivo al búfer BUFFER functionread(varbuffer;count:longint):longint;override; //Lee el buffer BUFFER en la secuencia del archivo functionWrite (constbuffer; cuenta: longint): longint; anular; // Establecer el puntero actual de lectura y escritura de la transmisión del archivo en compensación functionseek (offset: longInt; origen: palabra): longInt; anular; origen = {Sofrombeginning, Sofrom -Current, Sofromend} // Copiar recuento desde la posición actual en otra secuencia de archivo a la posición actual en la transmisión de archivo actual functionCopyFrom (fuente: tstream; cuenta: longint): longInt; // Lea el archivo especificado en la transmisión del archivo VarmyfStream: tfilErtream; comenzar myfstream: = tfilErteam.create (opendialog1.filename, fMopenRead); fin; [JavaScript] Verifique si está instalado IE Plug-in Shockwave y Quicktime ------------------ Gracias por tu paciencia en la lectura, tienes una habilidad, ¡espero que continúes publicando!