Grundlegende DELPHI-Entwicklungsfähigkeiten
◇[DELPHI] Kopieren Sie Dateien aus der Netzwerkumgebung
verwendet Shellapi;
copyfile(pchar('newfile.txt'),pchar('//computername/direction/targer.txt'),false);
◇[DELPHI] erzeugt einen Mauszieheffekt
Implementiert durch MouseMove-Ereignis, DragOver-Ereignis, EndDrag-Ereignis, wie z. B. LABEL auf PANEL:
varxpanel,ypanel,xlabel,ylabel:integer;
PANELs MouseMove-Ereignis:xpanel:=x;ypanel:=y;
PANELs DragOver-Ereignis:xpanel:=x;ypanel:=y;
LABELs MouseMove-Ereignis:xlabel:=x;ylabel:=y;
EndDrag-Ereignis von LABEL: label.left:=xpanel-xlabel;label.top:=ypanel-ylabel;
◇[DELPHI] Rufen Sie das WINDOWS-Verzeichnis ab
verwendet Shellapi;
varwindir:array[0..255]ofchar;
getwindowsdirectory(windir,sizeof(windir));
Oder lesen Sie den Speicherort aus der Registrierung:
HKEY_LOCAL_MACHINE/Software/Microsoft/Windows/CurrentVersion
SystemRoot-Schlüssel, erhalten als: C:/WINDOWS
◇[DELPHI] Zeichnen Sie Linien auf FORM oder anderen Containern
varx,y:array[0..50]ofinteger;
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] Verwendung der Zeichenfolgenliste
vartips:tstringlist;
Tipps:=tstringlist.create;
Tips.loadfromfile('filename.txt');
edit1.text:=tips[0];
Tips.add('lastlineadditionstring');
Tips.insert(1,'insertstringatNO2line');
Tips.savetofile('newfile.txt');
Tips.Free;
◇[DELPHI]Einfache Bedienung der Zwischenablage
richedit1.selectall;
richedit1.copytoclipboard;
richedit1.cuttoclipboard;
edit1.pastefromclipboard;
◇[DELPHI] Über Datei- und Verzeichnisoperationen
Chdir('c:/abcdir');Gehe zum Verzeichnis
Mkdir('dirname');Verzeichnis erstellen
Rmdir('dirname'); Verzeichnis löschen
GetCurrentDir;//Den aktuellen Verzeichnisnamen abrufen, ohne „/“
Getdir(0,s);//Holen Sie sich den Namen des Arbeitsverzeichnisses s:='c:/abcdir';
Deletfile('abc.txt');//Datei löschen
Renamefile('old.txt','new.txt');//Datei umbenennen
ExtractFilename(filelistbox1.filename);//Den Dateinamen abrufen
ExtractFileExt(filelistbox1.filename);//Holen Sie sich das Dateisuffix
◇[DELPHI] Dateiattribute verarbeiten
attr:=filegetattr(filelistbox1.filename);
if(attrandfaReadonly)=faReadonlythen...//schreibgeschützt
if(attrandfaSysfile)=faSysfilethen...//System
if(attrandfaArchive)=faArchivethen...//Archive
if(attrandfaHidden)=faHiddenthen...//Hide
◇[DELPHI]Dateien außerhalb des Programms ausführen
WINEXEC//Ausführbare Datei aufrufen
winexec('command.com/ccopy*.*c:/',SW_Normal);
winexec('startabc.txt');
ShellExecute oder ShellExecuteEx//Starten Sie das Dateizuordnungsprogramm
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] Rufen Sie den Namen des Prozesses ab, der auf dem System ausgeführt wird
varhCurrentWindow:HWnd;szText:array[0..254]ofchar;
beginnen
hCurrentWindow:=Getwindow(handle,GW_HWndFrist);
whilehCurrentWindow<>0do
beginnen
ifGetwindowtext(hcurrnetwindow,@sztext,255)>0thenlistbox1.items.add(strpas(@sztext));
hCurrentWindow:=Getwindow(hCurrentwindow,GW_HWndNext);
Ende;
Ende;
◇[DELPHI]Informationen zum Einbetten von Baugruppen
AsmEnd;
EAX, ECX und EDX können nach Belieben geändert werden; ESI, EDI, ESP, EBP und EBX können nicht geändert werden.
◇[DELPHI]Informationen zur Typkonvertierungsfunktion
FloatToStr//Gleitkomma zu String
FloatToStrF//Formatierter Gleitkommawert in Zeichenfolge
IntToHex//Ganzzahl zu Hexadezimal
TimeToStr
DateToStr
DateTimeToStr
FmtStr//Gib eine Zeichenfolge im angegebenen Format aus
FormatDateTime('YYYY-MM-DD,hh-mm-ss',DATE);
◇[DELPHI]String-Prozeduren und -Funktionen
Insert(obj,target,pos);// Der String target wird an der Position von pos eingefügt. Wenn das Einfügeergebnis größer als die maximale Länge des Ziels ist, werden die zusätzlichen Zeichen abgeschnitten. Wenn Pos außerhalb von 255 liegt, tritt ein Betriebsfehler auf. Beispiel: st:='Brian', dann ändert Insert('OK',st,2) st in 'BrOKian'.
Delete(st,pos,Num);//Löschen Sie eine Teilzeichenfolge von Num-Zeichen (Ganzzahl), beginnend mit der Pos-Position (Ganzzahl) in der ST-Zeichenfolge. Beispiel: st:='Brian', dann wird aus Löschen(st,3,2) Brn.
Str(value,st);//Konvertieren Sie den numerischen Wert (Ganzzahl oder Realtyp) in eine Zeichenfolge und fügen Sie ihn in st ein. Wenn beispielsweise a=2,5E4 ist, sorgt str(a:10,st) dafür, dass der Wert von st „25000“ ist.
Val(st,var,code);//Konvertieren Sie den Zeichenfolgenausdruck st in den entsprechenden ganzzahligen oder reellen Wert und speichern Sie ihn in var. St muss eine Zeichenfolge sein, die einen numerischen Wert darstellt und den Regeln für numerische Konstanten entspricht. Wenn während des Konvertierungsvorgangs kein Fehler erkannt wird, wird der Variablencode auf 0 gesetzt, andernfalls wird er auf die Position des ersten Fehlerzeichens gesetzt. Beispiel: st:=25.4E3, x ist eine reelle Variable, dann ergibt val(st,x,code) den X-Wert 25400 und den Codewert 0.
Copy(st.pos.num);//Gibt einen Teilstring zurück, der an der Position pos (Ganzzahl) im st-String beginnt und num (Ganzzahl) Zeichen enthält. Wenn pos größer als die Länge des st-Strings ist, wird ein leerer String zurückgegeben. Wenn pos außerhalb von 255 liegt, tritt ein Laufzeitfehler auf. Beispiel: st:='Brian', dann gibt Copy(st,2,2) 'ri' zurück.
Concat(st1,st2,st3...,stn);//Verketten Sie die durch alle unabhängigen Variablen dargestellten Zeichenfolgen in der angegebenen Reihenfolge und geben Sie den verketteten Wert zurück. Wenn die Länge des Ergebnisses 255 beträgt, tritt ein Laufzeitfehler auf. Beispiel: st1:='Brian',st2:='',st3:='Wilfred', dann gibt Concat(st1,st2,st3) 'BrianWilfred' zurück.
Länge(st);//Gibt die Länge des String-Ausdrucks st zurück. Beispiel: st:='Brian', dann ist der Rückgabewert von Length(st) 5.
Pos(obj, target);//Gibt die Position zurück, an der die Zeichenfolge obj zum ersten Mal in der Zielzeichenfolge erscheint. Wenn target keine passende Zeichenfolge hat, ist der Rückgabewert der Pos-Funktion 0. Beispiel: target:='BrianWilfred', dann ist der Rückgabewert von Pos('Wil',target) 7 und der Rückgabewert von Pos('hurbet',target) ist 0.
◇[DELPHI]Über den Umgang mit der Registrierung
nutztRegistry;
varreg:Tregistry;
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.frei;
◇[DELPHI]Über Tastaturkonstantennamen
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) – 7 Milliarden $ (123)
AZ: 41 $ (65) – 5 A $ (90)
0–9: 30 $ (48) – 39 $ (57)
◇[DELPHI] Bestimmen Sie vorab die Muttersprache des Programms
DOS-Eingabeaufforderung der DELPHI-Software: ThisPROgramMustBeRunUnderWin32.
DOS-Eingabeaufforderung für VC++-Software: ThisProgramCannotBeRunInDOSMode.
◇[DELPHI]Betrieb von Cookies
Response.cookies("Name").domain:='http://www.086net.com';
withresponse.cookies.adddo
beginnen
name:='Benutzername';
value:='Benutzername';
Ende
◇[DELPHI] zum Dokumentmenü-Link hinzugefügt
nutztshellapi,shlOBJ;
shAddToRecentDocs(shArd_path,pchar(filepath));//Verbindung hinzufügen
shAddToRecentDocs(shArd_path,nil);//Clear
◇[Verschiedenes] Sichern Sie das Wörterbuch der intelligenten ABC-Eingabemethoden
windows/system/user.rem
windows/system/tmmr.rem
◇[DELPHI] Bestimmen Sie die Maustasten
ifGetAsyncKeyState(VK_LButton)<>0then...//Linke Taste
ifGetAsyncKeyState(VK_MButton)<>0then...//Mitteltaste
ifGetAsyncKeyState(VK_RButton)<>0then...//Rechtsklick
◇[DELPHI]Legen Sie die maximale Anzeige des Formulars fest
onFormCreate-Ereignis
self.width:=screen.width;
self.height:=screen.height;
◇[DELPHI]-Taste zum Annehmen von Nachrichten
Verarbeitet im OnCreate-Ereignis: application.OnMessage:=MyOnMessage;
procedureTForm1.MyOnMessage(varMSG:TMSG;varHandle:Boolean);
beginnen
ifmsg.message=256then...//JEDER Schlüssel
ifmsg.message=112then...//F1
ifmsg.message=113then...//F2
Ende;
◇[Verschiedenes]Freigegebene Ordner ausblenden
Sharing-Effekt: zugänglich, aber unsichtbar (im Ressourcenmanagement, Netzwerkumgebung)
Benennen Sie die Freigabe: Direction$
Besuchen Sie ://computer/direction/
◇[javaScript]Häufig verwendete Effekte auf JavaScript-Webseiten
Die Webseite soll in 60 Sekunden geschlossen werden
Fenster schließen
Schließung
Geplante URL-Übertragung
Es ist auch möglich, TQuery während des Betriebs zu konfigurieren. Weitere Informationen finden Sie in der Delphi-Hilfe.
□◇[DELPHI] Ruft den RGB-Wert eines bestimmten Punkts im Bild ab
procedureTForm1.Image1MouseDown(Sender:TObject;Button:TMouseButton;
Shift:TShiftState;X,Y:Integer);
var
rot,grün,blau:byte;
i:Ganzzahl;
beginnen
i:=image1.Canvas.Pixels[x,y];
Blue:=GetBValue(i);
Grün:=GetGValue(i):
Red:=GetRValue(i);
Label1.Caption:=inttostr(Red);
Label2.Caption:=inttostr(Green);
Label3.Caption:=inttostr(Blue);
Ende;
□◇[DELPHI]Über die Zerlegung und Konvertierung von Datumsformaten
variierenJahr, Monat, Tag:Word;now2:Tdatatime;
now2:=date();
decodedate(now2,year,month,day);
lable1.Text:=inttostr(year)+'year'+inttostr(month)+'month'+inttostr(day)+'day';
◇[DELPHI]So ermitteln Sie den aktuellen Netzwerkverbindungsmodus
Das Beurteilungsergebnis ist MODEM-, LAN- oder Proxy-Server-Modus.
nutztwininet;
FunctionConnectionKind:boolean;
varflags:dword;
beginnen
Ergebnis:=InternetGetConnectedState(@flags,0);
ifResultthen
beginnen
if(flagsandINTERNET_CONNECTION_MODEM)=INTERNET_CONNECTION_MODEMthen
beginnen
showmessage('Modem');
Ende;
if(flagsandINTERNET_CONNECTION_LAN)=INTERNET_CONNECTION_LANthen
beginnen
showmessage('LAN');
Ende;
if(flagsandINTERNET_CONNECTION_PROXY)=INTERNET_CONNECTION_PROXYthen
beginnen
showmessage('Proxy');
Ende;
if(flagsandINTERNET_CONNECTION_MODEM_BUSY)=INTERNET_CONNECTION_MODEM_BUSYthen
beginnen
showmessage('ModemBusy');
Ende;
Ende;
Ende;
◇[DELPHI]So ermitteln Sie, ob eine Zeichenfolge eine gültige E-MAIL-Adresse ist
functionIsEMail(EMail:String):Boolean;
vars:String;ETpos:Integer;
beginnen
ETpos:=pos('@',EMail);
ifETpos>1then
beginnen
s:=copy(EMail,ETpos+1,Length(EMail));
if(pos('.',s)>1)and(pos('.',s)<length(s))then
Ergebnis:=trueelseResult:=false;
Ende
anders
Ergebnis:=false;
Ende;
◇[DELPHI] Stellen Sie fest, ob das System mit dem INTERNET verbunden ist
Die InetIsOffline-Funktion in URL.DLL muss eingeführt werden.
Die Funktionsdeklaration lautet:
functionInetIsOffline(Flag:Integer):Boolean;stdcall;external'URL.DLL';
Anschließend können Sie die Funktion aufrufen, um festzustellen, ob das System mit dem INTERNET verbunden ist
ifInetIsOffline(0)thenShowMessage('notconnected!')
elseShowMessage('verbunden!');
Diese Funktion gibt TRUE zurück, wenn das lokale System nicht mit dem INTERNET verbunden ist.
Beigefügt:
Die meisten Systeme mit IE oder OFFICE97 verfügen über diese DLL zum Aufrufen.
InetIsOffline
BOOLInetIsOffline(
DWORDdwFlags,
);
◇[DELPHI]WAV-Dateien einfach abspielen und anhalten
nutzt mmsystem;
functionPlayWav(constFileName:string):Boolean;
beginnen
Ergebnis:=PlaySound(PChar(FileName),0,SND_ASYNC);
Ende;
procedureStopWav;
var
buffer:array[0..2]ofchar;
beginnen
Puffer[0]:=#0;
PlaySound(Buffer,0,SND_PURGE);
Ende;
◇[DELPHI] Rufen Sie die BIOS-Informationen der Maschine ab
mitMemo1.Linesdo
beginnen
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))));
Ende;
◇[DELPHI] Laden Sie Dateien aus dem Internet herunter
nutztUrlMon;
functionDownloadFile(Source,Dest:string):Boolean;
beginnen
versuchen
Ergebnis:=UrlDownloadToFile(nil,PChar(source),PChar(Dest),0,nil)=0;
außer
Ergebnis:=Falsch;
Ende;
Ende;
ifDownloadFile('http://www.borland.com/delphi6.zip,'c:/kylix.zip')then
ShowMessage('Downloadsuccesful')
elseShowMessage('Downloadunsuccesful')
◇[DELPHI]Server-IP-Adresse auflösen
verwendetwinsock
functionIPAddrToName(IPAddr:String):String;
var
SockAddrIn:TSockAddrIn;
HostEnt:PHostEnt;
WSAData:TWSAData;
beginnen
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:='';
Ende;
◇[DELPHI] Rufen Sie die Verbindung in der Verknüpfung ab
functionExeFromLink(constlinkname:string):string;
var
FDir,
Name,
ExeName:PChar;
z:Ganzzahl;
beginnen
ExeName:=StrAlloc(MAX_PATH);
FName:=StrAlloc(MAX_PATH);
FDir:=StrAlloc(MAX_PATH);
StrPCopy(FName,ExtractFileName(linkname));
StrPCopy(FDir,ExtractFilePath(linkname));
z:=FindExecutable(FName,FDir,ExeName);
ifz>32then
Ergebnis:=StrPas(ExeName)
anders
Ergebnis:='';
StrDispose(FDir);
StrDispose(FName);
StrDispose(ExeName);
Ende;
◇[DELPHI]Steuern Sie die automatische Vervollständigung von TCombobox
{'Sorted'propertyoftheTComboboxtotrue}
varlastKey:Word;//globale Variable
//OnChange-Ereignis von TCombobox
procedureTForm1.AutoCompleteChange(Sender:TObject);
var
SearchStr:string;
retVal:integer;
beginnen
SearchStr:=(SenderasTCombobox).Text;
iflastKey<>VK_BACKthen//backspace:VK_BACKor$08
beginnen
retVal:=(SenderasTCombobox).Perform(CB_FINDSTRING,-1,LongInt(PChar(SearchStr)));
ifretVal>CB_Errthen
beginnen
(SenderasTCombobox).ItemIndex:=retVal;
(SenderasTCombobox).SelStart:=Length(SearchStr);
(SenderasTCombobox).SelLength:=
(Length((SenderasTCombobox).Text)-Length(SearchStr));
end;//retVal>CB_Err
end;//lastKey<>VK_BACK
lastKey:=0;//resetlastKey
Ende;
//OnKeyDown-Ereignis von TCombobox
procedureTForm1.AutoCompleteKeyDown(Sender:TObject;varKey:Word;
Shift:TShiftState);
beginnen
lastKey:=Schlüssel;
Ende;
◇[DELPHI]So löschen Sie ein Verzeichnis
functionEmptyDirectory(TheDirectory:String;Recursive:Boolean):
Boolescher Wert;
var
SearchRec:TSearchRec;
Res:Integer;
beginnen
Ergebnis:=Falsch;
TheDirectory:=NormalDir(TheDirectory);
Res:=FindFirst(TheDirectory+'*.*',faAnyFile,SearchRec);
versuchen
whileRes=0do
beginnen
if(SearchRec.Name<>'.')and(SearchRec.Name<>'..')then
beginnen
if((SearchRec.AttrandfaDirectory)>0)andRecursive
dann beginnen
EmptyDirectory(TheDirectory+SearchRec.Name,True);
RemoveDirectory(PChar(TheDirectory+SearchRec.Name));
Ende
elsebegin
DeleteFile(PChar(TheDirectory+SearchRec.Name))
Ende;
Ende;
Res:=FindNext(SearchRec);
Ende;
Ergebnis:=True;
Endlich
FindClose(SearchRec.FindHandle);
Ende;
Ende;
◇[DELPHI]So berechnen Sie die Größe eines Verzeichnisses
functionGetDirectorySize(constADirectory:string):Integer;
var
Dir:TSearchRec;
Ret:Ganzzahl;
Pfad:string;
beginnen
Ergebnis:=0;
Path:=ExtractFilePath(ADirectory);
Ret:=Sysutils.FindFirst(ADirectory,faAnyFile,Dir);
ifRet<>NO_ERRORthenexit;
versuchen
whileret=NO_ERRORdo
beginnen
inc(Ergebnis,Richtungsgröße);
if(Dir.Attrin[faDirectory])and(Dir.Name[1]<>'.')then
Inc(Result,GetDirectorySize(Path+Dir.Name+'/*.*'));
Ret:=Sysutils.FindNext(Dir);
Ende;
Endlich
Sysutils.FindClose(Dir);
Ende;
Ende;
◇[DELPHI]So fügen Sie das Installationsprogramm zur Deinstallationsliste hinzu
Betreiben Sie die Registry wie folgt:
1. Erstellen Sie einen Primärschlüssel unter dem Schlüssel HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Uninstall mit einem beliebigen Namen.
BeispielHKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Uninstall/MyUninstall
2. Geben Sie zwei Zeichenfolgenwerte unter HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Uninstall/MyUnistall ein.
Die Namen dieser beiden Zeichenfolgenwerte sind spezifisch: DisplayName und UninstallString.
3. Weisen Sie den Wert der Zeichenfolge DisplayName dem in der „Delete Application List“ angezeigten Namen zu, z. B. „AimingUninstallone“;
Weisen Sie dem ausgeführten Löschbefehl die Zeichenfolge UninstallString zu, z. B. C:/WIN97/uninst.exe-f „C:/TestPro/aimTest.isu“
◇[DELPHI]Abgefangene WM_QUERYEND-Nachricht zum Beenden der Sitzung
Typ
TForm1=Klasse(TForm)
procedureWMQueryEndSession(varMessage:TWWMQueryEndSession);messageWM_QUERYENDSESSION;
procedureCMEraseBkgnd(varMessage:TWMEraseBkgnd);MessageWM_ERASEBKGND;
Privat
{Privatedeclarations}
öffentlich
{Öffentliche Erklärungen}
Ende;
procedureTForm1.WMQueryEndSession(varMessage:TWMQueryEndSession);
beginnen
Showmessage('computerisabouttoshutdown');
Ende;
◇[DELPHI]Holen Sie sich Online-Nachbarn
proceduregetnethood();//NT wird als Server verwendet und das Debuggen erfolgt unter WIN98.
var
a,i:integer;
Fehlercode:Ganzzahl;
netres:array[0..1023]ofnetresource;
enumhandle:thandle;
Aufzählungen:dword;
Puffergröße:dword;
s:string;
mylistitems:tlistitems;
mylistitem:tlistitem;
alldomain:tstrings;
begin//listcomputerisalistviewtolistallcomputers;controlcenterisaform.
alldomain:=tstringlist.Create;
withnetres[0]dobegin
dwscope:=RESOURCE_GLOBALNET;
dwtype:=RESOURCETYPE_ANY;
dwdisplaytype:=RESOURCEDISPLAYTYPE_DOMAIN;
dwusage:=RESOURCEUSAGE_CONTAINER;
lplocalname:=nil;
lpremotename:=nil;
lpcomment:=nil;
lpprovider:=nil;
end;//Alle Domänen abrufen
errcode:=wnetopenenum(RESOURCE_GLOBALNET,RESOURCETYPE_ANY,RESOURCEUSAGE_CONTAINER,@netres[0],enumhandle);
iferrcode=NO_ERRORthenbegin
Aufzählungen:=1024;
buffersize:=sizeof(netres);
errcode:=wnetenumresource(enumhandle,enumentries,@netres[0],buffersize);
Ende;
a:=0;
mylistitems:=controlcenter.lstcomputer.Items;
mylistitems.Clear;
while(string(netres[a].lpprovider)<>'')and(errcode=NO_ERROR)do
beginnen
alldomain.Add(netres[a].lpremotename);
a:=a+1;
Ende;
wnetcloseenum(enumhandle);
//Alle Computer abrufen
mylistitems:=controlcenter.lstcomputer.Items;
mylistitems.Clear;
fori:=0toalldomain.Count-1do
beginnen
withnetres[0]dobegin
dwscope:=RESOURCE_GLOBALNET;
dwtype:=RESOURCETYPE_ANY;
dwdisplaytype:=RESOURCEDISPLAYTYPE_SERVER;
dwusage:=RESOURCEUSAGE_CONTAINER;
lplocalname:=nil;
lpremotename:=pchar(alldomain[i]);
lpcomment:=nil;
lpprovider:=nil;
Ende;
ErrCode:=WNetOpenEnum(RESOURCE_GLOBALNET,RESOURCETYPE_ANY,RESOURCEUSAGE_CONTAINER,@netres[0],EnumHandle);
iferrcode=NO_ERRORthen
beginnen
EnumEntries:=1024;
BufferSize:=SizeOf(NetRes);
ErrCode:=WNetEnumResource(EnumHandle,EnumEntries,@NetRes[0],BufferSize);
Ende;
a:=0;
while(string(netres[a].lpprovider)<>'')and(errcode=NO_ERROR)do
beginnen
mylistitem:=mylistitems.Add;
mylistitem.ImageIndex:=0;
mylistitem.Caption:=uppercase(stringreplace(string(NetRes[a].lpremotename),'//','',[rfReplaceAll]));
a:=a+1;
Ende;
wnetcloseenum(enumhandle);
Ende;
Ende;
◇[DELPHI] Rufen Sie das freigegebene Verzeichnis auf einem bestimmten Computer ab
proceduregetsharefolder(constcomputername:string);
var
errcode,a:integer;
netres:array[0..1023]ofnetresource;
enumhandle:thandle;
Aufzählungen, Puffergröße: Dword;
s:string;
mylistitems:tlistitems;
mylistitem:tlistitem;
mystrings:tstringlist;
beginnen
withnetres[0]dobegin
dwscope:=RESOURCE_GLOBALNET;
dwtype:=RESOURCETYPE_DISK;
dwdisplaytype:=RESOURCEDISPLAYTYPE_SHARE;
dwusage:=RESOURCEUSAGE_CONTAINER;
lplocalname:=nil;
lpremotename:=pchar(computername);
lpcomment:=nil;
lpprovider:=nil;
end;//Den Wurzelknoten abrufen
errcode:=wnetopenenum(RESOURCE_GLOBALNET,RESOURCETYPE_DISK,RESOURCEUSAGE_CONTAINER,@netres[0],enumhandle);
iferrcode=NO_ERRORthen
beginnen
EnumEntries:=1024;
BufferSize:=SizeOf(NetRes);
ErrCode:=WNetEnumResource(EnumHandle,EnumEntries,@NetRes[0],BufferSize);
Ende;
wnetcloseenum(enumhandle);
a:=0;
mylistitems:=controlcenter.lstfile.Items;
mylistitems.Clear;
while(string(netres[a].lpprovider)<>'')and(errcode=NO_ERROR)do
beginnen
withmylistitemsdo
beginnen
mylistitem:=add;
mylistitem.ImageIndex:=4;
mylistitem.Caption:=extractfilename(netres[a].lpremotename);
Ende;
a:=a+1;
Ende;
Ende;
◇[DELPHI] Holen Sie sich die Seriennummer der Festplatte
varSerialNum:pdword;a,b:dword;Buffer:array[0..255]ofchar;
beginnen
ifGetVolumeInformation('c:/',Buffer,SizeOf(Buffer),SerialNum,a,b,nil,0)thenLabel1.Caption:=IntToStr(SerialNum^);
Ende;
◇[DELPHI]MEMOs automatisches Umblättern
ProcedureScrollMemo(Memo:TMemo;Direction:char);
beginnen
Fallrichtungvon
'd':beginnen
SendMessage(Memo.Handle,{HWNDoftheMemoControl}
WM_VSCROLL,{WindowsMessage}
SB_PAGEDOWN,{ScrollCommand}
0){NotUsed}
Ende;
'u':beginnen
SendMessage(Memo.Handle,{HWNDoftheMemoControl}
WM_VSCROLL,{WindowsMessage}
SB_PAGEUP,{ScrollCommand}
0);{NotUsed}
Ende;
Ende;
Ende;
procedureTForm1.Button1Click(Sender:TObject);
beginnen
ScrollMemo(Memo1,'d');//Seite aufblättern
Ende;
procedureTForm1.Button1Click(Sender:TObject);
beginnen
ScrollMemo(Memo1,'u');//Seite umblättern
Ende;
◇[DELPHI]Drücken Sie die Eingabetaste, um zur nächsten Position im DBGrid zu gelangen (Tabulatortaste).
procedureTForm1.DBGrid1KeyPress(Sender:TObject;varKey:Char);
beginnen
ifKey=#13then
ifDBGrid1.Columns.Grid.SelectedIndex<DBGrid1.Columns.Count-1then
DBGrid1.Columns[DBGrid1.Columns.grid.SelectedIndex+1].Field.FocusControl
anders
beginnen
Table1.next;
DBGrid1.Columns[0].field.FocusControl;
Ende;
Ende;
◇[DELPHI]So installieren Sie die Steuerung
Installationsmethode:
1. Für ein einzelnes Steuerelement: Component-->installcomponent..-->PAS- oder DCU-Datei-->install
2. Für Steuerpakete mit *.dpk-Dateien klicken Sie einfach auf Datei -> Öffnen (wählen Sie *.dpk im Dropdown-Listenfeld aus) -> Installieren.
3. Für Steuerpakete mit *.dpl-Dateien: InstallPackages-->Add-->dpl-Dateiname.
4. Wenn die obige Schaltfläche „Installieren“ ungültig ist, versuchen Sie es mit der Schaltfläche „Kompilieren“.
5. Wenn es runtimelib ist, fügen Sie es zu runtimepackes unter Pakete unter der Option hinzu.
Wenn beim Kompilieren die Meldung angezeigt wird, dass die Datei nicht gefunden werden kann, liegt das normalerweise daran, dass sich das Installationsverzeichnis des Steuerelements nicht im Lib-Verzeichnis von Delphi befindet. Es gibt zwei Möglichkeiten, das Problem zu lösen:
1. Kopieren Sie die Originalinstallationsdateien in das Lib-Verzeichnis von Delphi.
2. Oder fügen Sie den ursprünglichen Codepfad des Steuerelements zum Delphi Lib-Verzeichnis unter Tools-->EnvironmentOptions hinzu.
◇[DELPHI] Verzeichnis vollständig löschen (deltree)
procedureTForm1.DeleteDirectory(strDir:String);
var
sr:TSearchRec;
FileAttrs:Integer;
strfilename:string;
strPth: string;
beginnen
strpth:=Getcurrentdir();
FileAttrs:=faAnyFile;
ifFindFirst(strpth+'/'+strdir+'/*.*',FileAttrs,sr)=0then
beginnen
if(sr.AttrandFileAttrs)=sr.Attrthen
beginnen
strfilename:=sr.Name;
iffileexists(strpth+'/'+strdir+'/'+strfilename)then
deletefile(strpth+'/'+strdir+'/'+strfilename);
Ende;
whileFindNext(sr)=0do
beginnen
if(sr.AttrandFileAttrs)=sr.Attrthen
beginnen
strfilename:=sr.name;
iffileexists(strpth+'/'+strdir+'/'+strfilename)then
deletefile(strpth+'/'+strdir+'/'+strfilename);
Ende;
Ende;
FindClose(sr);
Removedir(strpth+'/'+strdir);
Ende;
Ende;
◇[DELPHI] Ruft die Zeilen- und Spalteninformationen des aktuellen Cursors des TMemo-Steuerelements in Tpoint ab
1.functionReadCursorPos(SourceMemo:TMemo):TPoint;
varPoint:TPoint;
beginnen
point.y:=SendMessage(SourceMemo.Handle,EM_LINEFROMCHAR,SourceMemo.SelStart,0);
point.x:=SourceMemo.SelStart-SendMessage(SourceMemo.Handle,EM_LINEINDEX,point.y,0);
Ergebnis:=Punkt;
Ende;
2.LineLength:=SendMessage(memol.handle,EM-LINELENGTH,Cpos,0);//Zeilenlänge
◇[DELPHI]Festplatten-Seriennummer lesen
functionGetDiskSerial(DiskChar:Char):string;
var
SerialNum:pdword;
a,b:dword;
Puffer:array[0..255]ofchar;
beginnen
Ergebnis:="";
ifGetVolumeInformation(PChar(diskchar+":/"),Buffer,SizeOf(Buffer),SerialNum,
a,b,nil,0)dann
Ergebnis:=IntToStr(SerialNum^);
Ende;
◇[INTERNET]Allgemeine umfassende CSS-Kenntnisse
1. P:first-letter{font-size:300%;float:left}//Der erste Buchstabe ist dreimal größer als die normale Schriftart.
2.
3. Betten Sie ein Stylesheet ein
4.
Arial//SPAN akzeptiert die Attribute STYLE, CLASS und ID
DIV kann Absätze, Titel, Tabellen und sogar andere Teile enthalten
5.
6. //Siehe 3 für Definition. 7. Immobilienliste Schriftstil:font-style:[normal|italic|oblique]; Schriftgröße: Schriftgröße: [xx-klein|x-klein|klein|mittel|groß|x-groß|xx-groß|größer|kleiner|<Länge>|<Prozent>] Textdekoration: Textdekoration: [underline||overline||line-through||blink] Texttransformation:[keine|Großschreibung|Großschreibung|Kleinschreibung] Hintergrundfarbe:background-color:[<color>|transparent] Hintergrundbild:Hintergrundbild:[ Zeilenhöhe:[normal|<Anzahl>|<Länge>|<Prozent>] Randstil:[keine|gepunktet|gestrichelt|durchgezogen|doppelt|groove|grat|inset|outset] float:float:[left|right|none] 8. Längeneinheit Relative Einheiten: em (em, die Höhe der Schriftart des Elements) ex(x-height, die Höhe des Buchstabens „x“) px (Pixel, relativ zur Bildschirmauflösung) Absolute Länge: in (Zoll, 1 Zoll = 2,54 Zentimeter) cm (Zentimeter, 1 Zentimeter = 10 Millimeter) mm(Meter) pt (Punkt, 1 Punkt = 1/72 Zoll) pc (Pa, 1 Pa = 12 Punkte) ◇[DELPHI] Kurze Schritte zur Erstellung von VCL 1. Erstellen Sie Komponentenattributmethodenereignisse (Bibliothekseinheiten erstellen, als neue Typen erben, Eigenschaften, Methoden, Ereignisse hinzufügen, Komponenten registrieren, Paketdateien erstellen) 2. Nachrichtenverarbeitung 3. Ausnahmebehandlung 4. Teile sichtbar ◇[DELPHI] Laden der dynamischen Linkbibliothek Statisches Laden: procedurename;external'lib.dll'; Dynamisches Laden:varhandle:Thandle; handle:=loadlibrary('lib.dll'); ifhandle<>0then beginnen {etwas tun} freelibrary(handle); Ende; ◇[DELPHI]Zeigervariablen und Adressen varx,y:integer;p:^integer;//Zeiger auf INTEGER-Variable x:=10; //Variablenzuweisung p:=@x;//Die Adresse der Variablen x y:=p^;//Zeiger P zu Y zuweisen @@procedure//Gibt die Speicheradresse der Prozessvariablen zurück ◇[DELPHI] bestimmt, ob das Zeichen ein chinesisches Zeichen ist ByteType('How are you haha',1)=mbLeadByte//ist das erste Zeichen ByteType('How are you haha',2)=mbTrailByte//ist das zweite Zeichen ByteType('Wie geht es dir, haha',5)=mbSingleByte//Kein chinesisches Zeichen ◇[DELPHI]Memo-Positionierungsvorgang memo1.lines.delete(0)//Zeile 1 löschen memo1.selstart:=10//10 Bytes suchen ◇[DELPHI] Erhalten Sie den internen Doppelbyte-Zeichencode functiongetit(s:string):integer; beginnen Ergebnis:=byte(s[1])*$100+byte(s[2]); Ende; Verwendung: getit('calculation')//$bcc6 ist dezimal 48326 ◇[DELPHI]Aufruf der Datenspeicherungsprozedur ADD Die gespeicherte Prozedur lautet wie folgt: createprocedureaddrecord( record1varchar(10) record2varchar(20) ) als beginnen insertintotablename(field1,field2)values(:record1,:record2) Ende Gespeicherte Prozedur ausführen: EXECUTEprocedureaddrecord("urrecord1","urrecord2") ◇[DELPHI]Speichern Sie Dateien in Blob-Feldern functionblobcontenttostring(constfilename:string):string; beginnen mittfilestream.create(filename,fmopenread)do versuchen setlength(Ergebnis,Größe); read(Pointer(Result)^,size); Endlich frei; Ende; Ende; //Feld speichern beginnen if(opendialog1.execute)then beginnen sFileName:=OpenDialog1.FileName; adotable1.edit; adotable1.fieldbyname('visio').asstring:=Blobcontenttostring(FileName); adotable1.post; Ende; ◇[DELPHI]Kopieren Sie alle Dateien in die Zwischenablage nutztshlobj,activex,clipbrd; procedureTform1.copytoclipbrd(varFileName:string); var FE:TFormatEtc; Medium:TStgMedium; dropfiles:PDropFiles; pFile:PChar; beginnen 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); versuchen dropfiles^.pfiles:=SizeOf(TDropFiles); dropfiles^.fwide:=False; longint(pFile):=longint(dropfiles)+SizeOf(TDropFiles); StrPCopy(pFile,FileName); Inc(pFile,Length(FileName)+1); pFile^:=#0; Endlich GlobalUnlock(Medium.hGlobal); Ende; Clipboard.SetAsHandle(CF_HDROP,Medium.hGlobal); Ende; Ende; ◇[DELPHI] Listet die aktuell im System ausgeführten Prozesse auf nutztTLHelp32; procedureTForm1.Button1Click(Sender:TObject); varlppe:TProcessEntry32; gefunden:boolean; Hand:TGriff; beginnen Hand:=CreateToolhelp32Snapshot(TH32CS_SNAPALL,0); gefunden:=Process32First(Hand,lppe); whilefounddo beginnen ListBox1.Items.Add(StrPas(lppe.szExeFile)); gefunden:=Process32Next(Hand,lppe); Ende; Ende; ◇[DELPHI]Erstellen Sie eine neue Tabelle Table2 basierend auf BDETable1 Table2:=TTable.Create(nil); versuchen Table2.DatabaseName:=Table1.DatabaseName; Table2.FieldDefs.Assign(Table1.FieldDefs); Table2.IndexDefs.Assign(Table1.IndexDefs); Table2.TableName:='new_table'; Table2.CreateTable(); Endlich Table2.Free(); Ende; ◇[DELPHI] Der beste Weg, die DLL-Erstellung und -Referenz zu verstehen //Schauen Sie sich zuerst DLLsource(FILE-->NEW-->DLL) an Bibliotheksprojekt1; verwendet SysUtils,Classes; functionaddit(f:integer;s:integer):integer;export; beginnen makeasum:=f+s; Ende; Exporte addit; Ende. //Aufruf (INurPROJECT) Durchführung functionaddit(f:integer;s:integer):integer;far;external'project1';//Deklaration {Der Aufruf ist addit(2,4); das Ergebnis zeigt 6} ◇[DELPHI] Lesen Sie dynamisch die Größe des Programms selbst functionGesSelfSize:integer; var f:fileofbyte; beginnen Dateimodus:=0; zuweisenfile(f,application.exename); zurücksetzen(f); Ergebnis:=filesize(f);//Die Einheit ist Bytes closefile(f); Ende; ◇[DELPHI]BIOS-Informationen lesen mitMemo1.Linesdo beginnen 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)))); Ende; ◇[DELPHI]Erstellen Sie dynamisch MSSQL-Aliase procedureTForm1.Button1Click(Sender:TObject); varMyList:TStringList; beginnen MyList:=TStringList.Create; versuchen mitMyListdo beginnen Add('SERVERNAME=210.242.86.2'); Add('DATABASENAME=db'); Add('USERNAME=sa'); Ende; Session1.AddAlias('TESTSQL','MSSQL',MyList);//ミMSSQL Session1.SaveConfigFile; Endlich MyList.Free; Session1.Active:=True; Datenbank1.Datenbankname:='DB'; Database1.AliasName:='TESTSQL'; Database1.LoginPrompt:=False; Database1.Params.Add('USERNAME=sa'); Database1.Params.Add('PASSWORD='); Database1.Connected:=True; Ende; Ende; procedureTForm1.Button2Click(Sender:TObject); beginnen Database1.Connected:=False; Session1.DeleteAlias('TESTSQL'); Ende; ◇[DELPHI] Spielen Sie Hintergrundmusik ab verwendet mmsystem //Musik abspielen MCISendString('OPENe:/1.MIDTYPESEQUENCERALIASNN','',0,0); MCISendString('PLAYNNFROM0','',0,0); MCISendString('CLOSEANIMATION','',0,0); Ende; //Hör auf zu spielen MCISendString('OPENe:/1.MIDTYPESEQUENCERALIASNN','',0,0); MCISendString('STOPNN','',0,0); MCISendString('CLOSEANIMATION','',0,0); ◇[DELPHI]Ein Beispielcode für Schnittstellen und Klassen Typ{Schnittstellen- und Klassendeklaration: Der Unterschied besteht darin, dass Datenmitglieder, alle nicht öffentlichen Methoden und öffentlichen Methoden nicht das Schlüsselwort PUBLIC in der Schnittstelle verwenden} Isample=interface//Isample-Schnittstelle definieren functiongetstring:string; Ende; Tsample=class(TInterfacedObject,Isample) öffentlich functiongetstring:string; Ende; //Funktionsdefinition functionTsample.getstring:string; beginnen result:='whatshowis'; Ende; //Klassenobjekt aufrufen varsample:Tsample; beginnen sample:=Tsample.create; showmessage(sample.getstring+'classobject!'); probenfrei; Ende; //Schnittstelle aufrufen varsampleinterface:Isample; Probe:Tsample; beginnen sample:=Tsample.create; sampleInterface:=sample;//Die Implementierung von Interface muss eine Klasse verwenden {Die beiden obigen Zeilen können auch als sampleInterface:=Tsample.create;} ausgedrückt werden showmessage(sampleInterface.getstring+'Interface!'); //sample.free;{Im Gegensatz zu lokalen Klassen werden Klassen im Interface automatisch freigegeben} sampleInterface:=nil;{Schnittstellenobjekt freigeben} Ende; ◇[DELPHI] Die Taskleiste sieht nicht wie ein geeignetes Programm aus var ExtendedStyle:Integer; beginnen Application.Initialize; ExtendedStyle:=GetWindowLong(Application.Handle,GWL_EXSTYLE); SetWindowLong(Application.Handle,GWL_EXSTYLE,ExtendedStyleORWS_EX_TOOLWINDOWANDNOTWS_EX_APPWINDOW); Application.CreateForm(TForm1,Form1); Application.Run; Ende. ◇[DELPHI]ALT+STRG+ENTF kann das Programm nicht sehen Deklaration nach Implementierung hinzufügen: functionRegisterServiceProcess(dwProcessID,dwType:Integer):Integer;stdcall;external'KERNEL32.DLL'; RegisterServiceProcess(GetCurrentProcessID,1);//Ausblenden RegisterServiceProcess(GetCurrentProcessID,0);//Display ◇[DELPHI]Erkennen Sie das Symbol des optischen Laufwerks vardrive:char; cdromID:integer; beginnen fordrive:='d'to'z'do beginnen cdromID:=GetDriveType(pchar(drive+':/')); ifcdromID=5thenshowmessage('Ihr CD-ROM-Laufwerk ist:'+Laufwerk+'Disk!'); Ende; Ende; ◇[DELPHI] erkennt Soundkarte ifauxGetNumDevs()<=0thenshowmessage('Nosoundcardfound!')elseshowmessage('Anysoundcardfound!'); ◇[DELPHI]Zeichnen Sie das String-Gitter ein StringGrid.OnDrawCell-Ereignis withStringGrid1.Canvasdo Draw(Rect.Left,Rect.Top,Image1.Picture.Graphic); ◇[SQLSERVER]Eine andere Möglichkeit, die Like-Anweisung in SQL zu schreiben Um beispielsweise alle Benutzer zu finden, deren Benutzername „c“ enthält, können Sie verwenden benutze meine Datenbank select*fromtable1whereusernamelike'%c%" Hier ist eine weitere Möglichkeit, die obige Funktion abzuschließen: benutze meine Datenbank select*fromtable1wherecharindex('c',username)>0 Theoretisch hat diese Methode eine Beurteilungsaussage mehr als die vorherige Methode, nämlich >0, aber dieser Beurteilungsprozess ist meiner Meinung nach der schnellste, da mehr als 80 % der Operationen für die Suche nach Wörtern aufgewendet werden. Für String- und andere Operationen ist die Verwendung der charindex-Funktion keine große Sache. Die Verwendung dieser Methode bietet auch Vorteile, das heißt, Sie können like nicht direkt für %, | usw. verwenden. Die gefundenen Zeichen können wie folgt direkt in diesem Charindex verwendet werden: benutze meine Datenbank select*fromtable1wherecharindex('%',username)>0 Es kann auch geschrieben werden als: benutze meine Datenbank select*fromtable1wherecharindex(char(37),username)>0 Das ASCII-Zeichen ist % ◇[DELPHI]SQL zeigt mehrere Datenbanken/Tabellen an SELECTDISTINCTA.bianhao,a.xingming,b.gongziFROM"jianjie.dbf"a,"gongzi.DBF"b WHEREA.bianhao=b.bianhao ◇[DELPHI]RFC (RequestForComment) bezogen IETF (Internet Engineering Task Force) verwaltet RFC-Dokumente http://www.ietf.cnri.reston.va.us RFC882: Nachrichtenkopfstruktur RFC1521: MIME Teil 1, Übertragungsnachrichtenmethode RFC1945: Multimedia-Dokumentübertragungsdokumentation ◇[DELPHI]Nutzung des TNMUUPProcessor varinStream,outStream:TFileStream; beginnen 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;{Kodierungsverarbeitung} //NMUUE.Decode;{Dekodierungsverarbeitung} inStream.free; outStream.free; Ende; ◇[DELPHI]TFileStream-Vorgang //Zählbytes von der aktuellen Position des Dateistreams in den Puffer BUFFER lesen functionread(varbuffer;count:longint):longint;override; //Lesen Sie den Puffer BUFFER in den Dateistream functionwrite(constbuffer;count:longint):longint;override; //Setze den aktuellen Lese- und Schreibzeiger des Dateistreams auf OFFSET functionseek(offset:longint;origin:word):longint;override; origin={soFromBeginning,soFromCurrent,soFromEnd} //COUNT von der aktuellen Position in einem anderen Dateistream an die aktuelle Position im aktuellen Dateistream kopieren functioncopyfrom(source:TStream;count:longint):longint; //Lesen Sie die angegebene Datei in den Dateistream varmyFStream:TFileStream; beginnen myFStream:=TFileStream.create(OpenDialog1.filename,fmOpenRead); Ende; [Javascript] Überprüfen Sie, ob das IE-Plugin Shockwave&Quicktime installiert ist ------------------- Vielen Dank für Ihre Geduld beim Lesen, Sie haben eine Fähigkeit, ich hoffe, Sie werden sie weiterhin veröffentlichen!