ГоловнаКаталогБлогРейтингЕ-Пошта 
 
 
Зробити домашньою у вибране  

Форуми -> Програмування -> Delphi FAQ
 
Joe 08:40 26.02.2007 Цитувати № 1 [^]
 
Скидатиму сюди відповіді на питання, які мені часто задають по Delphi
 
Joe 08:48 26.02.2007 Цитувати № 2 [^]
 
Програмка переведення двійкового числа в десяткове:

Text
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;
 
 
Joe 10:19 26.02.2007 Цитувати № 3 [^]
 
Конвертування дати в формат MySQL  

Для переведення дати з компоненти DateTimePicker в формат MySQL в текст програми потрібно включити наступну функцію (попередньо вписавши в розділ uses модуля DateUtils).

Text
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):

Text
Query1.SQL.Add('SELECT * FROM sp WHERE data_nar=' +QuotedStr(DateToSQLFormat(DateTimePicker1.Date)));
 
Joe 11:26 26.02.2007 Цитувати № 4 [^]
 
Сортування масиву методом бульбашки.

Text
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.
 
Joe 18:09 02.03.2007 Цитувати № 5 [^]
 
На формі розміщено кілька компонент Edit. Як зробити так, щоб в спільному обробнику події OnKeyPress фокус передавався по натисненні клавіші Enter на наступну компоненту?

Text

procedure TFormX.EditKeyPress(Sender: TObject; var Key: Char);
begin
  if key=#13 then
    SelectNext(screen.ActiveControl, True, True);
end;
 
 
Joe 09:18 05.03.2007 Цитувати № 6 [^]
 
Як округлити до X знаків після коми?

Для округлення необхідно викликати функцію RoundTo(<число>, -X), яка описана в модуді Math.

Text

uses
    Windows, ..., Math;

...

    Z:=RoundTo(Y, -X);

...
 
 
Joe 19:08 06.03.2007 Цитувати № 7 [^]
 
Як зробити так, щоб програма запускалась лише в одному екземплярі?

Один з варіантів вирішення цієї проблеми:

Text
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.
 
Joe 10:16 19.04.2007 Цитувати № 8 [^]
 
Функція транслітерування з української кирилиці на латиницю.

Text

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;
 
 
Joe 22:16 28.01.2009 Цитувати № 9 [^]
 
Динамічне створення компонент в програмі

Text
  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();
 


  Логін:
  Пароль:
Книга Фріланс на західному ринку
Книга Фріланс на західному ринку
APServer | SiMan CMS | Лічильник відвідувань | Тека сайтів | Рейтинг | Форум | Download | Шаблони сторінок | Посібник Smarty | Підручник PHP | Статті/Огляди