Compétences de développement de base DELPHI
◇[DELPHI] Copier des fichiers depuis le Voisinage Réseau
utiliseshellapi ;
copyfile(pchar('newfile.txt'),pchar('//computername/direction/targer.txt'),false);
◇[DELPHI] produit un effet de glissement de la souris
Implémenté via l'événement MouseMove, l'événement DragOver, l'événement EndDrag, tel que LABEL sur PANEL :
varxpanel,ypanel,xlabel,ylabel:entier;
Événement MouseMove de PANEL :xpanel:=x;ypanel:=y;
Événement DragOver de PANEL :xpanel:=x;ypanel:=y;
Événement MouseMove de LABEL :xlabel:=x;ylabel:=y;
Événement EndDrag de LABEL : label.left:=xpanel-xlabel;label.top:=ypanel-ylabel;
◇[DELPHI] Obtenir le répertoire WINDOWS
utiliseshellapi ;
varwindir:array[0..255]ofchar;
getwindowsdirectory(windir,sizeof(windir));
Ou lisez dans le registre, emplacement :
HKEY_LOCAL_MACHINE/Software/Microsoft/Windows/CurrentVersion
Clé SystemRoot, obtenue sous la forme : C:/WINDOWS
◇[DELPHI] Tracez des lignes sur FORM ou d'autres conteneurs
varx,y:array[0..50]ofinteger;
toile.pen.color:=clred;
toile.pen.style:=PSDash;
form1.canvas.moveto(trunc(x[i]),trunc(y[i]));
form1.canvas.lineto(trunc(x[j]),trunc(y[j]));
◇ Utilisation de la liste de chaînes [DELPHI]
vartips:tstringlist;
conseils :=tstringlist.create ;
tips.loadfromfile('filename.txt');
edit1.text:=tips[0];
tips.add('lastlineadditionstring');
tips.insert(1,'insertstringatNO2line');
tips.savetofile('newfile.txt');
conseils gratuits ;
◇[DELPHI]Opération simple dans le presse-papiers
richedit1.selectall;
richedit1.copytoclipboard;
richedit1.cuttoclipboard;
edit1.pastefromclipboard;
◇[DELPHI] À propos des opérations sur les fichiers et les répertoires
Chdir('c:/abcdir');Aller au répertoire
Mkdir('dirname');Créer un répertoire
Rmdir('nom_répertoire'); supprimer le répertoire
GetCurrentDir;//Obtenir le nom du répertoire actuel, sans '/'
Getdir(0,s);//Obtenir le nom du répertoire de travail s:='c:/abcdir';
Supprimer le fichier('abc.txt');//Supprimer le fichier
Renamefile('old.txt','new.txt');//Renommer le fichier
ExtractFilename(filelistbox1.filename);//Obtenir le nom du fichier
ExtractFileExt(filelistbox1.filename);//Obtenir le suffixe du fichier
◇[DELPHI] Attributs du fichier de processus
attr:=filegetattr(filelistbox1.filename);
if(attrandfaReadonly)=faReadonlythen...//lecture seule
if(attrandfaSysfile)=faSysfilethen...//Système
if(attrandfaArchive)=faArchivethen...//Archive
if(attrandfaHidden)=faHiddenthen...//Cacher
◇[DELPHI]Exécuter des fichiers en dehors du programme
WINEXEC//Appel du fichier exécutable
winexec('command.com/ccopy*.*c:/',SW_Normal);
winexec('startabc.txt');
ShellExecute ou ShellExecuteEx//Démarrer le programme d'association de fichiers
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] Obtenez le nom du processus en cours d'exécution sur le système
varhCurrentWindow:HWnd;szText:array[0..254]ofchar;
commencer
hCurrentWindow:=Getwindow(handle,GW_HWndFrist);
whilehCurrentWindow<>0do
commencer
ifGetwindowtext(hcurrnetwindow,@sztext,255)>0thenlistbox1.items.add(strpas(@sztext));
hCurrentWindow:=Getwindow(hCurrentwindow,GW_HWndNext);
fin;
fin;
◇[DELPHI]À propos de l'intégration d'assemblages
AsmFin ;
EAX, ECX et EDX peuvent être modifiés à volonté ; ESI, EDI, ESP, EBP et EBX ne peuvent pas être modifiés.
◇[DELPHI]À propos de la fonction de conversion de type
FloatToStr // Point flottant vers une chaîne
FloatToStrF // Virgule flottante formatée en chaîne
IntToHex//Entier en hexadécimal
HeureVersStr
DateVersStr
DateHeureVersStr
FmtStr//Sortie d'une chaîne au format spécifié
FormatDateTime('AAAA-MM-JJ,hh-mm-ss',DATE);
◇[DELPHI]Procédures et fonctions de chaînes
Insert(obj,target,pos);//La chaîne cible est insérée à la position de pos. Si le résultat de l'insertion est supérieur à la longueur maximale de la cible, les caractères supplémentaires seront tronqués. Si Pos est en dehors de 255, une erreur de fonctionnement se produira. Par exemple, st:='Brian', puis Insert('OK',st,2) changera st en 'BrOKian'.
Supprimer(st,pos,Num);//Supprimer une sous-chaîne de caractères Num (entier) à partir de la position pos (entier) dans la st chaîne. Par exemple, st:='Brian', alors Delete(st,3,2) deviendra Brn.
Str(value,st);//Convertissez la valeur numérique (type entier ou réel) en chaîne et mettez-la dans st. Par exemple, lorsque a=2.5E4, str(a:10,st) fera que la valeur de st sera « 25 000 ».
Val(st,var,code);//Convertissez l'expression de chaîne st en la valeur entière ou réelle correspondante et stockez-la dans var. St doit être une chaîne représentant une valeur numérique et respecter les règles des constantes numériques. Pendant le processus de conversion, si aucune erreur n'est détectée, le code variable est mis à 0, sinon il est mis à la position du premier caractère d'erreur. Par exemple, st:=25.4E3, x est une variable réelle, alors val(st,x,code) donnera à la valeur X 25400 et à la valeur du code 0.
Copy(st.pos.num);//Renvoie une sous-chaîne commençant à la position pos (entier) dans la st chaîne et contenant des caractères num (entier). Si pos est supérieur à la longueur de la st chaîne, une chaîne vide sera renvoyée. Si pos est en dehors de 255, une erreur d'exécution se produira. Par exemple, st:='Brian', puis Copy(st,2,2) renvoie 'ri'.
Concat(st1,st2,st3...,stn);//Concatène les chaînes représentées par toutes les variables indépendantes dans l'ordre indiqué et renvoie la valeur concaténée. Si la longueur du résultat est de 255, une erreur d'exécution se produira. Par exemple, st1:='Brian',st2:='',st3:='Wilfred', puis Concat(st1,st2,st3) renvoie 'BrianWilfred'.
Longueur(st);//Renvoie la longueur de l'expression de chaîne st. Par exemple, st:='Brian', alors la valeur de retour de Longueur(st) est 5.
Pos(obj, target);//Renvoie la position où la chaîne obj apparaît pour la première fois dans la chaîne cible target Si target n'a pas de chaîne correspondante, la valeur de retour de la fonction Pos est 0. Par exemple, target:='BrianWilfred', alors la valeur de retour de Pos('Wil',target) est 7 et la valeur de retour de Pos('hurbet',target) est 0.
◇[DELPHI]À propos de la gestion du registre
utilise le registre ;
varreg:Tregistre;
reg:=Tregistry.create;
reg.rootkey:='HKey_Current_User';
reg.openkey('ControlPanel/Desktop',false);
reg.WriteString('TitleWallpaper','0');
reg.writeString('Wallpaper',filelistbox1.filename);
reg.closereg;
reg.gratuit;
◇[DELPHI]À propos des noms de constantes du clavier
VK_BACK/VK_TAB/VK_RETURN/VK_SHIFT/VK_CONTROL/VK_MENU/VK_PAUSE/VK_ESCAPE
/VK_ESPACE/VK_GAUCHE/VK_RIGHT/VK_UP/VK_DOWN
F1--F12 : 70 $ (112) - 7 milliards $ (123)
AZ : 41 $ (65) - 5A $ (90)
0-9 : 30 $ (48) – 39 $ (57)
◇[DELPHI] Déterminer au préalable la langue maternelle du programme
Invite DOS du logiciel DELPHI : ThisPRogramMustBeRunUnderWin32.
Invite DOS pour le logiciel VC++ : ThisProgramCannotBeRunInDOSMode.
◇[DELPHI]Cookies de fonctionnement
réponse.cookies("nom").domain:='http://www.086net.com';
avecresponse.cookies.adddo
commencer
name:='nom d'utilisateur';
value:='nom d'utilisateur';
fin
◇[DELPHI] ajouté au lien du menu du document
utiliseshellapi,shlOBJ ;
shAddToRecentDocs(shArd_path,pchar(filepath));//Ajouter une connexion
shAddToRecentDocs(shArd_path,nil);//Effacer
◇[Divers] Sauvegarde du dictionnaire de méthode de saisie ABC intelligente
windows/système/utilisateur.rem
windows/système/tmmr.rem
◇[DELPHI] Déterminer les boutons de la souris
ifGetAsyncKeyState(VK_LButton)<>0then...//Bouton gauche
ifGetAsyncKeyState(VK_MButton)<>0then...//Touche du milieu
ifGetAsyncKeyState(VK_RButton)<>0then...//Clic droit
◇[DELPHI]Définir l'affichage maximum du formulaire
événement onFormCreate
self.width:=écran.width;
self.hauteur:=écran.hauteur;
◇ Bouton [DELPHI] pour accepter les messages
Traité dans l'événement OnCreate : application.OnMessage:=MyOnMessage ;
procédureTForm1.MyOnMessage(varMSG:TMSG;varHandle:Boolean);
commencer
ifmsg.message=256then...//ANY clé
ifmsg.message=112puis...//F1
ifmsg.message=113puis...//F2
fin;
◇[Divers]Masquer les dossiers partagés
Effet de partage : accessible, mais invisible (dans la gestion des ressources, Voisinage réseau)
Nommez le partage : direction$
Visitez ://ordinateur/direction/
◇[javaScript]Effets couramment utilisés sur les pages Web JavaScript
La page Web devrait se fermer dans 60 secondes
fermer la fenêtre
fermeture
Transfert d'URL programmé
Il est également possible de configurer TQuery pendant le fonctionnement, voir l'aide de Delphi pour plus de détails.
□◇[DELPHI] Obtenez la valeur RVB d'un certain point de l'image
procedureTForm1.Image1MouseDown(Sender:TObject;Button:TMouseButton;
Shift:TShiftState;X,Y:Integer);
var
rouge, vert, bleu : octet ;
je:entier;
commencer
je:=image1.Canvas.Pixels[x,y];
Bleu :=ObtenirBValue(i);
Vert :=GetGValue(i) :
Rouge :=GetRValue(i);
Label1.Caption:=inttostr(Rouge);
Label2.Caption:=inttostr(Vert);
Label3.Caption:=inttostr(Bleu);
fin;
□◇[DELPHI]À propos de la décomposition et de la conversion du format de date
variableannée, mois, jour : Word ; maintenant2 : Tdatatime ;
maintenant2:=date();
décodage (maintenant2,année,mois,jour);
lable1.Text:=inttostr(année)+'année'+inttostr(mois)+'mois'+inttostr(jour)+'jour';
◇[DELPHI]Comment déterminer le mode de connexion réseau actuel
Le résultat du jugement est le mode MODEM, LAN ou serveur proxy.
utilisewininet ;
FunctionConnectionKind : booléen ;
varflags:dword;
commencer
Résultat :=InternetGetConnectedState (@flags,0);
siRésultatalors
commencer
si (flags et INTERNET_CONNECTION_MODEM) = INTERNET_CONNECTION_MODEM alors
commencer
showmessage('Modem');
fin;
si (flags et INTERNET_CONNECTION_LAN) = INTERNET_CONNECTION_LAN alors
commencer
showmessage('LAN');
fin;
si (drapeaux et INTERNET_CONNECTION_PROXY) = INTERNET_CONNECTION_PROXY alors
commencer
showmessage('Proxy');
fin;
si (flags et INTERNET_CONNECTION_MODEM_BUSY) = INTERNET_CONNECTION_MODEM_BUSY alors
commencer
showmessage('ModemBusy');
fin;
fin;
fin;
◇[DELPHI]Comment déterminer si une chaîne est une adresse EMAIL valide
functionIsEMail(EMail:String):Booléen;
vars : chaîne ; ETpos : entier ;
commencer
ETpos:=pos('@',EMail);
si ETpos>1 alors
commencer
s:=copie(EMail,ETpos+1,Longueur(EMail));
si(pos('.',s)>1)et(pos('.',s)<longueur(s))alors
Résultat :=trueelseResult:=false ;
fin
autre
Résultat :=faux ;
fin;
◇[DELPHI] Déterminez si le système est connecté à INTERNET
La fonction InetIsOffline dans URL.DLL doit être introduite.
La déclaration de la fonction est :
functionInetIsOffline(Flag:Integer):Boolean;stdcall;external'URL.DLL';
Ensuite, vous pouvez appeler la fonction pour déterminer si le système est connecté à INTERNET
ifInetIsOffline(0)thenShowMessage('pas connecté !')
elseShowMessage('connecté !');
Cette fonction renvoie TRUE si le système local n'est pas connecté à INTERNET.
Ci-joint:
La plupart des systèmes avec IE ou OFFICE97 ont cette DLL disponible pour l'appel.
InetIsHors ligne
BOOLnetIsOffline(
DWORDdwFlags,
);
◇[DELPHI] Lisez et mettez facilement en pause les fichiers WAV
utilise le système mm ;
functionPlayWav(constFileName:string):Boolean;
commencer
Résultat :=PlaySound(PChar(FileName),0,SND_ASYNC);
fin;
procédureStopWav ;
var
tampon:tableau[0..2]ofchar;
commencer
tampon[0]:=#0;
PlaySound(Buffer,0,SND_PURGE);
fin;
◇[DELPHI] Obtenir des informations sur le BIOS de la machine
avecMemo1.Linesdo
commencer
Add('MainBoardBiosName:'+^I+string(Pchar(Ptr($FE061))));
Add('MainBoardBiosCopyRight:'+^I+string(Pchar(Ptr($FE091))));
Add('MainBoardBiosDate:'+^I+string(Pchar(Ptr($FFFF5))));
Ajouter('MainBoardBiosSerialNo:'+^I+string(Pchar(Ptr($FEC71))));
fin;
◇[DELPHI] Téléchargez des fichiers depuis Internet
utiliseUrlMon ;
functionDownloadFile(Source,Dest:string):Boolean;
commencer
essayer
Résultat :=UrlDownloadToFile(nil,PChar(source),PChar(Dest),0,nil)=0;
sauf
Résultat :=Faux ;
fin;
fin;
ifDownloadFile('http://www.borland.com/delphi6.zip,'c:/kylix.zip')puis
ShowMessage('Téléchargement réussi')
elseShowMessage('Téléchargement échoué')
◇[DELPHI]Résoudre l'adresse IP du serveur
utilisewinsock
functionIPAddrToName(IPAddr:String):String;
var
SockAddrIn : TSockAddrIn ;
HôteEnt : PHostEnt ;
Données WSA : Données TWSA ;
commencer
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] Obtenez la connexion dans le raccourci
functionExeFromLink(constlinkname:string):string;
var
FDir,
Nom,
ExeName:PChar;
z:entier;
commencer
ExeName:=StrAlloc(MAX_PATH);
FName:=StrAlloc(MAX_PATH);
FDir:=StrAlloc(MAX_PATH);
StrPCopy(FName,ExtractFileName(linkname));
StrPCopy(FDir,ExtractFilePath(nom du lien));
z:=FindExecutable(FName,FDir,ExeName);
siz>32alors
Résultat :=StrPas(ExeName)
autre
Résultat :='';
StrDispose(FDir);
StrDispose(FName);
StrDispose(ExeName);
fin;
◇[DELPHI]Contrôler l'achèvement automatique de TCombobox
{Propriété 'triée'de laTComboboxàtrue}
varlastKey:Word;//variable globale
//Événement OnChange de TCombobox
procédureTForm1.AutoCompleteChange(Expéditeur:TObject);
var
SearchStr:chaîne;
retVal:entier;
commencer
SearchStr:=(SenderasTCombobox).Text;
iflastKey<>VK_BACKthen//backspace:VK_BACKou$08
commencer
retVal:=(SenderasTCombobox).Perform(CB_FINDSTRING,-1,LongInt(PChar(SearchStr)));
ifretVal>CB_Errthen
commencer
(SenderasTCombobox).ItemIndex:=retVal;
(SenderasTCombobox).SelStart:=Length(SearchStr);
(SenderasTCombobox).SelLength:=
(Length((SenderasTCombobox).Text)-Length(SearchStr));
fin;//retVal>CB_Err
fin;//lastKey<>VK_BACK
dernièreClé :=0 ;//réinitialiser la dernièreClé
fin;
//Événement OnKeyDown de TCombobox
procédureTForm1.AutoCompleteKeyDown(Sender:TObject;varKey:Word;
Shift : TShiftState );
commencer
lastKey:=Clé ;
fin;
◇[DELPHI]Comment effacer un répertoire
fonctionEmptyDirectory(TheDirectory:String;Recursive:Boolean):
booléen ;
var
SearchRec : TSearchRec ;
Res : Entier ;
commencer
Résultat :=Faux ;
LeRépertoire:=NormalDir(LeRépertoire);
Res:=FindFirst(TheDirectory+'*.*',faAnyFile,SearchRec);
essayer
whileRes=0do
commencer
if(SearchRec.Name<>'.')et(SearchRec.Name<>'..')then
commencer
if((SearchRec.AttrandfaDirectory)>0)etRécursif
puis commencer
EmptyDirectory(TheDirectory+SearchRec.Name,True);
RemoveDirectory(PChar(TheDirectory+SearchRec.Name));
fin
sinon commencer
Supprimer le fichier (PChar (TheDirectory + SearchRec.Name))
fin;
fin;
Res:=FindNext(SearchRec);
fin;
Résultat :=Vrai ;
enfin
FindClose(SearchRec.FindHandle);
fin;
fin;
◇[DELPHI]Comment calculer la taille d'un répertoire
functionGetDirectorySize(constADirectory:string):Integer;
var
Rép:TSearchRec;
Ret : entier ;
Chemin : chaîne ;
commencer
Résultat :=0 ;
Chemin :=ExtractFilePath(ADirectory);
Ret:=Sysutils.FindFirst(ADirectory,faAnyFile,Dir);
ifRet<>NO_ERRORthenexit ;
essayer
whileret=NO_ERRORfaire
commencer
inc(Résultat,Dir.Taille);
if(Dir.Attrin[faDirectory])et(Dir.Name[1]<>'.')then
Inc(Résultat,GetDirectorySize(Chemin+Dir.Name+'/*.*'));
Ret:=Sysutils.FindNext(Dir);
fin;
enfin
Sysutils.FindClose(Dir);
fin;
fin;
◇[DELPHI]Comment ajouter le programme d'installation à la liste de désinstallation
Exécutez le registre comme suit :
1. Créez une clé primaire sous la clé HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Uninstall avec n'importe quel nom.
ExempleHKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Uninstall/MyUninstall
2. Saisissez deux valeurs de chaîne sous HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Uninstall/MyUnistall,
Les noms de ces deux valeurs de chaîne sont spécifiques : DisplayName et UninstallString.
3. Attribuez la valeur de la chaîne DisplayName au nom affiché dans la « Liste des applications supprimées », tel que « AimingUninstallone » ;
Attribuez la chaîne UninstallString à la commande de suppression exécutée, telle que C:/WIN97/uninst.exe-f "C:/TestPro/aimTest.isu"
◇[DELPHI]Message d'arrêt de session WM_QUERYENDintercepté
taper
TForm1=classe(TForm)
procédureWMQueryEndSession(varMessage:TWWMQueryEndSession);messageWM_QUERYENDSESSION;
procédureCMEraseBkgnd(varMessage:TWMEraseBkgnd);MessageWM_ERASEBKGND;
privé
{Déclarations privées}
publique
{Déclarations publiques}
fin;
procédureTForm1.WMQueryEndSession(varMessage:TWMQueryEndSession);
commencer
Showmessage('l'ordinateur est sur le point de s'arrêter');
fin;
◇[DELPHI]Obtenez des voisins en ligne
proceduregetnethood();//NT est utilisé comme serveur et le débogage est passé sur WIN98.
var
a,i:entier;
code d'erreur : entier ;
netres:array[0..1023]deressource réseau ;
enumhandle: poignée;
énumérations:dword;
taille du tampon:dword;
s:chaîne;
mes éléments de liste : éléments de liste ;
malistitem:tlistitem;
alldomain:tstrings;
commencer//lister les ordinateurs est une vue de liste pour lister tous les ordinateurs ; le centre de contrôle est un formulaire.
alldomain:=tstringlist.Create;
avecnetres[0]dobegin
dwscope:=RESOURCE_GLOBALNET;
dwtype:=RESOURCETYPE_ANY;
dwdisplaytype:=RESOURCEDISPLAYTYPE_DOMAIN;
dwusage:=RESOURCEUSAGE_CONTAINER;
lplocalname:=nil;
lpremotename:=nil;
lpcomment :=nul ;
lpprovider :=nil ;
fin;//Obtenir tous les domaines
errcode:=wnetopenenum(RESOURCE_GLOBALNET,RESOURCETYPE_ANY,RESOURCEUSAGE_CONTAINER,@netres[0],enumhandle);
iferrcode=NO_ERRORpuiscommencer
énumérations :=1024 ;
buffersize:=sizeof(netres);
errcode:=wnetenumresource(enumhandle,enumentries,@netres[0],buffersize);
fin;
une :=0 ;
mylistitems:=controlcenter.lstcomputer.Items;
meslistitems.Clear;
while(string(netres[a].lpprovider)<>'')et(errcode=NO_ERROR)do
commencer
alldomain.Add(netres[a].lpremotename);
une:=une+1;
fin;
wnetcloseenum(enumhandle);
//Obtenir tous les ordinateurs
mylistitems:=controlcenter.lstcomputer.Items;
meslistitems.Clear;
fori:=0toalldomain.Count-1do
commencer
avecnetres[0]dobegin
dwscope:=RESOURCE_GLOBALNET;
dwtype:=RESOURCETYPE_ANY;
dwdisplaytype:=RESOURCEDISPLAYTYPE_SERVER;
dwusage:=RESOURCEUSAGE_CONTAINER;
lplocalname:=nil;
lpremotename:=pchar(alldomain[i]);
lpcomment :=nul ;
lpprovider :=nil ;
fin;
ErrCode:=WNetOpenEnum(RESOURCE_GLOBALNET,RESOURCETYPE_ANY,RESOURCEUSAGE_CONTAINER,@netres[0],EnumHandle);
iferrcode=NO_ERRORpuis
commencer
EnumEntries :=1024 ;
Taille du tampon :=TailleDe(NetRes);
ErrCode:=WNetEnumResource(EnumHandle,EnumEntries,@NetRes[0],BufferSize);
fin;
une :=0 ;
while(string(netres[a].lpprovider)<>'')et(errcode=NO_ERROR)do
commencer
malistitem:=mylistitems.Add;
malistitem.ImageIndex:=0;
mylistitem.Caption:=uppercase(stringreplace(string(NetRes[a].lpremotename),'//','',[rfReplaceAll]));
une:=une+1;
fin;
wnetcloseenum(enumhandle);
fin;
fin;
◇[DELPHI] Obtenez le répertoire partagé sur un certain ordinateur
procéduregetsharefolder(constcomputername:string);
var
code d'erreur,a:entier;
netres:array[0..1023]deressource réseau ;
enumhandle: poignée;
énumérations, taille du tampon: dword ;
s:chaîne;
mes éléments de liste : éléments de liste ;
malistitem:tlistitem;
meschaînes:tstringlist;
commencer
avecnetres[0]dobegin
dwscope:=RESOURCE_GLOBALNET;
dwtype:=RESOURCETYPE_DISK;
dwdisplaytype:=RESOURCEDISPLAYTYPE_SHARE;
dwusage:=RESOURCEUSAGE_CONTAINER;
lplocalname:=nil;
lpremotename:=pchar(nom de l'ordinateur);
lpcomment :=nul ;
lpprovider :=nil ;
end;//Obtenir le nœud racine
errcode:=wnetopenenum(RESOURCE_GLOBALNET,RESOURCETYPE_DISK,RESOURCEUSAGE_CONTAINER,@netres[0],enumhandle);
iferrcode=NO_ERRORpuis
commencer
EnumEntries :=1024 ;
Taille du tampon :=TailleDe(NetRes);
ErrCode:=WNetEnumResource(EnumHandle,EnumEntries,@NetRes[0],BufferSize);
fin;
wnetcloseenum(enumhandle);
une :=0 ;
mylistitems:=controlcenter.lstfile.Items;
meslistitems.Clear;
while(string(netres[a].lpprovider)<>'')et(errcode=NO_ERROR)do
commencer
avecmylistitemsdo
commencer
malistitem:=ajouter;
malistitem.ImageIndex:=4;
mylistitem.Caption:=extractfilename(netres[a].lpremotename);
fin;
une:=une+1;
fin;
fin;
◇[DELPHI] Obtenez le numéro de série du disque dur
varSerialNum:pdword;a,b:dword;Buffer:array[0..255]ofchar;
commencer
ifGetVolumeInformation('c:/',Buffer,SizeOf(Buffer),SerialNum,a,b,nil,0)thenLabel1.Caption:=IntToStr(SerialNum^);
fin;
◇[DELPHI]MEMO tourne automatiquement les pages
ProcedureScrollMemo(Mémo:TMemo;Direction:char);
commencer
direction du cas
'd' : commencer
EnvoyerMessage(Memo.Handle,{HWNDoftheMemoControl}
WM_VSCROLL,{WindowsMessage}
SB_PAGEDOWN,{ScrollCommand}
0){Non utilisé}
fin;
'u':commencer
EnvoyerMessage(Memo.Handle,{HWNDoftheMemoControl}
WM_VSCROLL,{WindowsMessage}
SB_PAGEUP,{ScrollCommand}
0);{Non utilisé}
fin;
fin;
fin;
procédureTForm1.Button1Click(Expéditeur:TObject);
commencer
ScrollMemo(Memo1,'d');//Monter la page
fin;
procédureTForm1.Button1Click(Expéditeur:TObject);
commencer
ScrollMemo(Memo1,'u');//Tourner la page
fin;
◇[DELPHI]Appuyez sur Entrée pour passer à la position suivante dans DBGrid (touche Tab)
procédureTForm1.DBGrid1KeyPress(Expéditeur:TObject;varKey:Char);
commencer
ifKey=#13alors
ifDBGrid1.Columns.Grid.SelectedIndex<DBGrid1.Columns.Count-1then
DBGrid1.Columns[DBGrid1.Columns.grid.SelectedIndex+1].Field.FocusControl
autre
commencer
Tableau1.next ;
DBGrid1.Columns[0].field.FocusControl;
fin;
fin;
◇[DELPHI]Comment installer le contrôle
Méthode d'installation :
1. Pour un seul contrôle, Composant-->installer le composant..-->Fichier PAS ou DCU-->installer
2. Pour les packages de contrôle contenant des fichiers *.dpk, cliquez simplement sur Fichier-->ouvrir (sélectionnez *.dpk dans la zone de liste déroulante)-->installer.
3. Pour les packages de contrôle avec des fichiers *.dpl, InstallPackages-->Add-->nom du fichier dpl.
4. Si le bouton Installer ci-dessus n'est pas valide, essayez le bouton Compiler.
5. S'il s'agit de runtimelib, ajoutez-le aux runtimepackes sous packages sous l'option.
S'il indique que le fichier est introuvable lors de la compilation, c'est généralement parce que le répertoire d'installation du contrôle ne se trouve pas dans le répertoire Lib de Delphi. Il existe deux manières de résoudre le problème :
1. Copiez les fichiers d'installation d'origine dans le répertoire Lib de Delphi.
2. Ou ajoutez le chemin du code d'origine du contrôle au répertoire Delphi Lib dans Outils-->EnvironmentOptions.
◇[DELPHI] Supprimer complètement le répertoire (deltree)
procédureTForm1.DeleteDirectory(strDir:String);
var
sr:TSearchRec;
FileAttrs : entier ;
strfilename:chaîne;
strPth:chaîne;
commencer
strpth:=Getcurrentdir();
FileAttrs:=faAnyFile;
ifFindFirst(strpth+'/'+strdir+'/*.*',FileAttrs,sr)=0then
commencer
si(sr.AttrandFileAttrs)=sr.Attrthen
commencer
strfilename:=sr.Name;
si le fichier existe (strpth+'/'+strdir+'/'+strfilename) alors
deletefile(strpth+'/'+strdir+'/'+strfilename);
fin;
whileFindNext(sr)=0do
commencer
si(sr.AttrandFileAttrs)=sr.Attrthen
commencer
strfilename:=sr.name;
si le fichier existe (strpth+'/'+strdir+'/'+strfilename) alors
deletefile(strpth+'/'+strdir+'/'+strfilename);
fin;
fin;
FindClose(sr);
suppriméir(strpth+'/'+strdir);
fin;
fin;
◇[DELPHI] Obtenez les informations de ligne et de colonne du curseur actuel du contrôle TMemo dans Tpoint
1.functionReadCursorPos(SourceMemo:TMemo):TPoint;
varPoint:TPoint;
commencer
point.y:=SendMessage(SourceMemo.Handle,EM_LINEFROMCHAR,SourceMemo.SelStart,0);
point.x:=SourceMemo.SelStart-SendMessage(SourceMemo.Handle,EM_LINEINDEX,point.y,0);
Résultat :=Point ;
fin;
2.LineLength:=SendMessage(memol.handle,EM-LINELENGTH,Cpos,0);//Longueur de la ligne
◇[DELPHI]Lire le numéro de série du disque dur
functionGetDiskSerial(DiskChar:Char):string;
var
Numéro de série : pdword ;
a,b:dword;
Tampon : tableau [0..255] de caractères ;
commencer
résultat :="";
ifGetVolumeInformation(PChar(diskchar+":/"),Buffer,SizeOf(Buffer),SerialNum,
a,b,nil,0)alors
Résultat :=IntToStr(SerialNum^);
fin;
◇[INTERNET]Compétences générales CSS communes
1. P:first-letter{font-size:300%;float:left}//La première lettre sera trois fois plus grande que la police normale.
2.
3. Intégrer une feuille de style
4.
Arial//SPAN accepte les attributs STYLE, CLASS et ID
DIV peut contenir des paragraphes, des titres, des tableaux et même d'autres parties
5.
6. //Voir 3 pour la définition. 7. Liste des propriétés Style de police : font-style : [normal|italique|oblique] ; Taille de la police : taille de la police : [xx-small|x-small|small|medium|large|x-large|xx-large|plus grand|plus petit|<longueur>|<pourcentage>] Décoration du texte : text-decoration : [souligné||surligne||ligne-à travers||clignoter] Transformation de texte : [aucun|capitaliser|majuscule|minuscule] Couleur d'arrière-plan : couleur d'arrière-plan : [<color>|transparent] image d'arrière-plan:image d'arrière-plan:[ Hauteur de ligne : [normal|<numéro>|<longueur>|<pourcentage>] Style de bordure : [aucun|pointillé|tiret|solide|double|groove|ridge|inset|outset] float:float:[gauche|droite|aucun] 8. unité de longueur Unités relatives : em (em, la hauteur de la police de l'élément) ex(x-height, la hauteur de la lettre "x") px (pixels, par rapport à la résolution de l'écran) Longueur absolue : po (pouce, 1 pouce = 2,54 centimètres) cm (centimètre, 1 centimètre = 10 millimètres) mm(mètre) pt (point, 1 point = 1/72 pouce) pc (Pa, 1 Pa = 12 points) ◇[DELPHI] Brèves étapes pour créer une VCL 1. Créer des événements de méthode d'attribut de composant (Créez des unités de bibliothèque, héritez en tant que nouveaux types, ajoutez des propriétés, des méthodes, des événements, enregistrez des composants, créez des fichiers de package) 2.Traitement des messages 3.Gestion des exceptions 4. Pièces visibles ◇[DELPHI] Chargement de la bibliothèque de liens dynamiques Chargement statique : nom de la procédure ; externe 'lib.dll' ; Chargement dynamique :varhandle:Thhandle ; handle:=loadlibrary('lib.dll'); sihandle<>0then commencer {faire quelque chose} bibliothèque gratuite (poignée); fin; ◇[DELPHI]Variables et adresses de pointeur varx,y:integer;p:^integer;//Pointeur vers la variable INTEGER x:=10; //Affectation des variables p:=@x;//L'adresse de la variable x y:=p^;//Attribuer le pointeur P à Y @@procedure//Renvoie l'adresse mémoire de la variable de processus ◇[DELPHI] détermine si le caractère est un caractère chinois ByteType('Comment vas-tu haha',1)=mbLeadByte//est le premier caractère ByteType('Comment vas-tu haha',2)=mbTrailByte//est le deuxième caractère ByteType('Comment vas-tu haha',5)=mbSingleByte//Pas un caractère chinois ◇[DELPHI]opération de positionnement du mémo memo1.lines.delete(0)//Supprimer la ligne 1 memo1.selstart:=10//Localiser 10 octets ◇[DELPHI] Obtenir le code interne des caractères à deux octets functiongetit(s:string):entier; commencer Résultat :=octet(s[1])*$100+octet(s[2]); fin; Utilisation : getit('calculation')//$bcc6 est décimal 48326 ◇[DELPHI]Appelez la procédure de stockage de données ADD La procédure stockée est la suivante : createprocedureaddrecord( enregistrement1varchar(10) enregistrement2varchar(20) ) comme commencer insérer dans le nom de la table (champ 1, champ 2) valeurs (: enregistrement 1,: enregistrement 2) fin Exécuter la procédure stockée : EXECUTEprocedureaddrecord("urrecord1","urrecord2") ◇[DELPHI]Enregistrer les fichiers dans des champs blob functionblobcontenttostring(constfilename:string):string; commencer withtfilestream.create(filename,fmopenread)do essayer setlength(Résultat,taille); read(Pointeur(Résultat)^,taille); enfin gratuit; fin; fin; //enregistrer le champ commencer si (opendialog1.execute) alors commencer sFileName:=OpenDialog1.FileName; adotable1.edit; adotable1.fieldbyname('visio').asstring:=Blobcontenttostring(FileName); adotable1.post; fin; ◇[DELPHI] Copiez tous les fichiers dans le presse-papiers utiliseshlobj,activex,clipbrd ; procédureTform1.copytoclipbrd(varFileName:string); var FE:TFormatEtc; Moyen : TStgMoyen ; fichiers déposés : PDropFiles ; pFichier : PChar ; commencer 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); essayer dropfiles^.pfiles:=SizeOf(TDropFiles); dropfiles^.fwide:=False; longint(pFile):=longint(dropfiles)+SizeOf(TDropFiles); StrPCopy(pFichier,NomFichier); Inc(pFichier,Longueur(NomFichier)+1); pFichier^:=#0; enfin GlobalUnlock(Medium.hGlobal); fin; Clipboard.SetAsHandle(CF_HDROP,Medium.hGlobal); fin; fin; ◇[DELPHI] Répertorie les processus en cours d'exécution du système utiliseTLHelp32 ; procédureTForm1.Button1Click(Expéditeur:TObject); varlppe:TProcessEntry32; trouvé : booléen ; Main : TPoignée ; commencer Main :=CreateToolhelp32Snapshot(TH32CS_SNAPALL,0); trouvé:=Process32First(Hand,lppe); pendant que je suis trouvé commencer ListBox1.Items.Add(StrPas(lppe.szExeFile)); trouvé:=Process32Next(Hand,lppe); fin; fin; ◇[DELPHI]Créer une nouvelle table Table2 basée sur BDETable1 Table2:=TTable.Create(nil); essayer Table2.DatabaseName:=Table1.DatabaseName; Table2.FieldDefs.Assign(Table1.FieldDefs); Table2.IndexDefs.Assign(Table1.IndexDefs); Table2.TableName:='nouvelle_table'; Table2.CreateTable(); enfin Tableau2.Free(); fin; ◇[DELPHI] La meilleure façon de comprendre la création et la référence de DLL //Regardez d'abord DLLsource(FILE-->NEW-->DLL) projet de bibliothèque1 ; utilise SysUtils,Classes ; functionaddit(f:entier;s:entier):entier;export; commencer makeasum:=f+s; fin; exportations ajouter; fin. //Appel (INurPROJECT) mise en œuvre functionaddit(f:integer;s:integer):integer;far;external'project1';//Déclaration {L'appel est addit(2,4); le résultat montre 6} ◇[DELPHI] Lire dynamiquement la taille du programme lui-même fonctionGesSelfSize:entier; var f:fichierd'octet; commencer mode fichier :=0 ; assignfile(f,application.exename); réinitialiser(f); Résultat :=filesize(f);//L'unité est en octets fichier proche(f); fin; ◇[DELPHI]Lire les informations du BIOS avecMemo1.Linesdo commencer Add('MainBoardBiosName:'+^I+string(Pchar(Ptr($FE061)))); Add('MainBoardBiosCopyRight:'+^I+string(Pchar(Ptr($FE091)))); Add('MainBoardBiosDate:'+^I+string(Pchar(Ptr($FFFF5)))); Ajouter('MainBoardBiosSerialNo:'+^I+string(Pchar(Ptr($FEC71)))); fin; ◇[DELPHI]Créer dynamiquement des alias MSSQL procédureTForm1.Button1Click(Expéditeur:TObject); varMaListe:TStringList; commencer MaListe:=TStringList.Create; essayer avecMaListedo commencer Ajouter('NOM DU SERVEUR=210.242.86.2'); Ajouter('DATABASENAME=db'); Ajouter('USERNAME=sa'); fin; Session1.AddAlias('TESTSQL','MSSQL',MaListe);//ミMSSQL Session1.SaveConfigFile ; enfin MaListe.Gratuit ; Session1.Active :=Vrai ; Database1.DatabaseName:='DB'; Base de données1.AliasName:='TESTSQL'; Database1.LoginPrompt :=False ; Database1.Params.Add('USERNAME=sa'); Database1.Params.Add('MOT DE PASSE='); Base de données1.Connected :=Vrai ; fin; fin; procédureTForm1.Button2Click(Expéditeur:TObject); commencer Base de données1.Connected :=False ; Session1.DeleteAlias('TESTSQL'); fin; ◇[DELPHI] Jouer de la musique de fond utilise le système mm //Jouer de la musique MCISendString('OPENe:/1.MIDTYPESEQUENCERALIASNN','',0,0); MCISendString('PLAYNNFROM0','',0,0); MCISendString('FERMETURE','',0,0); fin; // Arrête de jouer MCISendString('OPENe:/1.MIDTYPESEQUENCERALIASNN','',0,0); MCISendString('STOPNN','',0,0); MCISendString('FERMETURE','',0,0); ◇[DELPHI]Un exemple de code pour les interfaces et les classes Type{Déclaration d'interface et de classe : la différence est que les données membres, les méthodes non publiques et les méthodes publiques n'utilisent pas le mot clé PUBLIC dans l'interface} Isample=interface//Définir l'interface Isample fonctiongetstring:string; fin; Tsample=class(TInterfacedObject,Isample) publique fonctiongetstring:string; fin; //définition de la fonction functionTsample.getstring:string; commencer result:='ce qui est montré'; fin; //Appeler l'objet de classe varsample:Tsample; commencer exemple:=Tsample.create; showmessage(sample.getstring+'classobject!'); échantillon.gratuit ; fin; //Interface d'appel varsampleinterface:Isample; échantillon : Téchantillon ; commencer exemple:=Tsample.create; sampleInterface:=sample;//L'implémentation d'Interface doit utiliser la classe {Les deux lignes ci-dessus peuvent également être exprimées sous la forme sampleInterface:=Tsample.create;} showmessage(sampleInterface.getstring+'Interface!'); //sample.free;{Contrairement aux classes locales, les classes dans Interface sont automatiquement publiées} sampleInterface :=nil ;{objet d'interface de version} fin; ◇[DELPHI] La barre des tâches ne ressemble pas à un programme approprié var Style étendu : entier ; commencer Application.Initialiser ; ExtendedStyle:=GetWindowLong(Application.Handle,GWL_EXSTYLE); SetWindowLong(Application.Handle,GWL_EXSTYLE,ExtendedStyleORWS_EX_TOOLWINDOWANDNOTWS_EX_APPWINDOW); Application.CreateForm(TForm1,Form1); Application.Exécuter ; fin. ◇[DELPHI]ALT+CTRL+DEL ne peut pas voir le programme Ajouter une déclaration après l'implémentation : functionRegisterServiceProcess(dwProcessID,dwType:Integer):Integer;stdcall;external'KERNEL32.DLL'; RegisterServiceProcess(GetCurrentProcessID,1);//Masquer RegisterServiceProcess(GetCurrentProcessID,0);//Affichage ◇[DELPHI] Détecter le symbole du lecteur optique vardrive:char; ID cdrom : entier ; commencer fordrive:='d'to'z'do commencer cdromID:=GetDriveType(pchar(lecteur+':/')); ifcdromID=5thenshowmessage('Votre lecteur de CD-ROM est :'+lecteur+'disque !'); fin; fin; ◇[DELPHI] détecter la carte son ifauxGetNumDevs()<=0thenshowmessage('Nosoundcardfound!')elseshowmessage('Anysoundcardfound!'); ◇[DELPHI]Dessinez dans la grille de chaînes Événement StringGrid.OnDrawCell avecStringGrid1.Canvasdo Draw(Rect.Left,Rect.Top,Image1.Picture.Graphic); ◇[SQLSERVER]Une autre façon d'écrire l'instruction Like en SQL Par exemple, pour rechercher tous les utilisateurs dont le nom d'utilisateur contient "c", vous pouvez utiliser utiliser ma base de données select*fromtable1whereusernamelike'%c%" Voici une autre façon de remplir la fonction ci-dessus : utiliser ma base de données select*fromtable1wherecharindex('c',nom d'utilisateur)>0 En théorie, cette méthode a une déclaration de jugement de plus que la méthode précédente, c'est-à-dire >0, mais ce processus de jugement est le plus rapide, je crois que plus de 80 % des opérations sont consacrées à la recherche de mots. Pour les opérations sur les chaînes et autres, ce n'est pas grave d'utiliser la fonction charindex. Il y a aussi des avantages à utiliser cette méthode, c'est-à-dire que vous ne pouvez pas utiliser directement like for %, |, etc. Les caractères trouvés peuvent être utilisés directement dans ce charindex, comme suit : utiliser ma base de données select*fromtable1wherecharindex('%',nom d'utilisateur)>0 On peut aussi l'écrire sous la forme : utiliser ma base de données select*fromtable1wherecharindex(char(37),username)>0 Le caractère ASCII est % ◇[DELPHI]SQL affiche plusieurs bases de données/tables SELECTDISTINCTA.bianhao,a.xingming,b.gongziFROM"jianjie.dbf"a,"gongzi.DBF"b OÙ.bianhao=b.bianhao ◇[DELPHI]RFC (RequestForComment) lié L'IETF (Internet Engineering Task Force) gère les documents RFC http://www.ietf.cnri.reston.va.us RFC882 : structure d'en-tête de message RFC1521 : MIME Partie 1, méthode de transmission de messages RFC1945 : Documentation sur le transfert de documents multimédias ◇[DELPHI]Utilisation du processeur TNMUUP varinStream,outStream:TFileStream; commencer 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 ; {traitement d'encodage} //NMUUE.Decode;{traitement de décodage} inStream.free; outStream.free; fin; ◇[DELPHI]Opération TFileStream //Lire le nombre d'octets de la position actuelle du flux de fichiers vers le tampon BUFFER functionread(varbuffer;count:longint):longint;override; // Lisez le tampon de tampon dans le flux de fichiers functionwrite (constbuffer; count: longint): longInt; override; // Définissez le pointeur de lecture et d'écriture actuel du flux de fichiers à décalé functionseek (Offset: longInt; Origin: Word): longInt; Override; origine = {sofrombeginning, sofromcurrent, sofromend} // Copier le nombre de la position actuelle dans un autre flux de fichiers à la position actuelle dans le flux de fichiers actuel FunctionCopyFrom (Source: TStream; Count: Longint): Longint; // Lisez le fichier spécifié au flux de fichiers Varmyfstream: tFilestream; commencer myfstream: = tFileStream.Create (OpenDialog1.FileName, fmOpenRead); fin; [JavaScript] Vérifiez si IE Plug-In Shockwave & Quicktime est installé ------------------- Merci pour votre patience en lecture, vous avez une compétence, j'espère que vous continuerez à la publier!