|
Форуми -> Програмування -> Delphi FAQ
|
Скидатиму сюди відповіді на питання, які мені часто задають по Delphi
|
|
Програмка переведення двійкового числа в десяткове:
function Conv2to10(s:string):string;
var
r:integer;
b:integer;
i:integer;
begin
r:=0;
b:=1;
for i:=1 to length(s) do
begin
if s[ i ]='1' then
r:=r+b;
b:=b*2;
end;
result:=IntToStr(r);
end;
|
|
Конвертування дати в формат MySQL
Для переведення дати з компоненти DateTimePicker в формат MySQL в текст програми потрібно включити наступну функцію (попередньо вписавши в розділ uses модуля DateUtils).
function DateToSQLFormat(t:TDateTime):string;
var
s1,s2,s3:string;
begin
s1:=IntToStr(DayOf(t));
while length(s1)<2 do s1:='0'+s1;
s2:=IntToStr(MonthOf(t));
while length(s2)<2 do s2:='0'+s2;
s3:=IntToStr(YearOf(t));
while length(s3)<2 do s3:='0'+s3;
result:=s3+'-'+s2+'-'+s1;
end;
Приклад використання функції (вибрати співробітників, у яких дата народження вказана в компоненті DateTimePicker):
Query1.SQL.Add('SELECT * FROM sp WHERE data_nar=' +QuotedStr(DateToSQLFormat(DateTimePicker1.Date)));
|
|
Сортування масиву методом бульбашки.
program Bulbashka;
{$APPTYPE CONSOLE}
uses
SysUtils;
const
n=10;
var
mas:array [1..n] of integer=
(30, 2, 5, 7, 1, 6, 35, 22, 14, 10);
var
i,j,k:integer;
begin
for i:=1 to n-1 do
begin
for j:=i+1 to n do
begin
if mas[ i ]>mas[ j ] then
begin
k:=mas[ i ];
mas[ i ]:=mas[ j ];
mas[ j ]:=k;
end;
end;
end;
readln;
end.
|
|
На формі розміщено кілька компонент Edit. Як зробити так, щоб в спільному обробнику події OnKeyPress фокус передавався по натисненні клавіші Enter на наступну компоненту?
procedure TFormX.EditKeyPress(Sender: TObject; var Key: Char);
begin
if key=#13 then
SelectNext(screen.ActiveControl, True, True);
end;
|
|
Як округлити до X знаків після коми?
Для округлення необхідно викликати функцію RoundTo(<число>, -X), яка описана в модуді Math.
uses
Windows, ..., Math;
...
Z:=RoundTo(Y, -X);
...
|
|
Як зробити так, щоб програма запускалась лише в одному екземплярі?
Один з варіантів вирішення цієї проблеми:
program SampleProgram;
...
var
hMutex:Cardinal;
PSA:PSecurityAttributes;
begin
hMutex:=OpenMutex(MUTEX_ALL_ACCESS, false, 'Sample_Mutex');
if (hMutex<>0) then
exit;
new(PSA);
PSA^.nLength:=sizeof(SECURITY_ATTRIBUTES);
PSA^.lpSecurityDescriptor:=NIL;
PSA^.bInheritHandle:=false;
hMutex:=CreateMutex(PSA,false, 'Sample_Mutex');
dispose(PSA);
Application.Initialize;
...
Application.Run;
ReleaseMutex(hMutex);
end.
|
|
Функція транслітерування з української кирилиці на латиницю.
function ConvertToTranslit(s:string):string;
const
ukr:array[1..66, 1..2] of string=(
('А', 'A'),
('Б', 'B'),
('В', 'V'),
('Г', 'G'),
('Ґ', 'G'),
('Д', 'D'),
('Е', 'E'),
('Є', 'YE'),
('Ж', 'J'),
('З', 'Z'),
('И', 'Y'),
('І', 'I'),
('Ї', 'YI'),
('Й', 'Y'),
('К', 'K'),
('Л', 'L'),
('М', 'M'),
('Н', 'N'),
('О', 'O'),
('П', 'P'),
('Р', 'R'),
('С', 'S'),
('Т', 'T'),
('У', 'U'),
('Ф', 'F'),
('Х', 'H'),
('Ц', 'C'),
('Ч', 'CH'),
('Ш', 'SH'),
('Щ', 'SHCH'),
('Ю', 'YU'),
('Я', 'YA'),
('Ь', '_'),
('а', 'a'),
('б', 'b'),
('в', 'v'),
('г', 'g'),
('ґ', 'g'),
('д', 'd'),
('е', 'e'),
('є', 'ye'),
('ж', 'j'),
('з', 'z'),
('и', 'y'),
('і', 'i'),
('ї', 'yi'),
('й', 'y'),
('к', 'k'),
('л', 'l'),
('м', 'm'),
('н', 'n'),
('о', 'o'),
('п', 'p'),
('р', 'r'),
('с', 's'),
('т', 't'),
('у', 'u'),
('ф', 'f'),
('х', 'h'),
('ц', 'c'),
('ч', 'ch'),
('ш', 'sh'),
('щ', 'shch'),
('ю', 'yu'),
('я', 'ya'),
('ь', '_')
);
var
i,j:integer;
u:boolean;
begin
result:='';
if length(s)=0 then exit;
for i:=1 to length(s) do
begin
case s[ i ] of
#0..#32:result:=result+'_';
'0'..'9', 'A'..'z':result:=result+s[ i ];
else
begin
u:=false;
for j:=1 to 66 do
begin
if ukr[j,1]=s[ i ] then
begin
u:=true;
result:=result+ukr[j, 2];
break;
end;
end;
if not u then
result:=result+'_';
end;
end;
end;
end;
|
|
Динамічне створення компонент в програмі
Label1:=TLabel.Create(self);
Label1.Parent:=self;
Label1.Font.Size:=10;
Label1.AutoSize:=true;
Label1.Caption:='Test';
Label1.Top:=10;
Label1.Left:=20;
Label1.Repaint();
|
|
Книга Фріланс на західному ринку
|
|