Sites of the week

ads ads ads ads

Delphi: Поиск и замена текста в TMemo или RichEdit

Posted by admin | Delphi, Контролы | Пятница 15 Июнь 2007 11:38

 Данный пример реализует диалог поиска и замены текста в компоненте TMemo. Пример можно легко переделать под RichEdit.

 
procedure TMainForm.FindItemClick(Sender: TObject);
begin
FPos:=Memo.SelStart;
FindDialog.FindText:=Memo.SelText;
FindDialog.Position:=Point(MainForm.Left+(MainForm.Width div 3),MainForm.Top);
FindDialog.Options:=FindDialog.Options+[frHideUpDown,frHideWholeWord];
FindDialog.Execute;
end;
procedure TMainForm.FindDialogFind(Sender: TObject);
begin
if frMatchCase in FindDialog.Options then
Memo.SelStart:=Pos(FindDialog.FindText,
Copy(Memo.Lines.Text,FPos+1,
Length(Memo.Lines.Text)))+FPos-1
else
Memo.SelStart:=Pos(AnsiLowerCase(FindDialog.FindText),
AnsiLowerCase(Copy(Memo.Lines.Text,FPos+1,
Length(Memo.Lines.Text))))+FPos-1;
if Memo.SelStart>=FPos then
begin
Memo.SelLength:=Length(FindDialog.FindText);
FPos:=Memo.SelStart+Memo.SelLength+1;
end
else
if Application.MessageBox(PChar('Текст "'+FindDialog.FindText+
'" не найден. Продолжить поиск?'),'Сообщение',
mb_YesNo or mb_IconQuestion)<>mrYes
then FindDialog.CloseDialog;
Memo.SetFocus;
end;
procedure TMainForm.ReplaceItemClick(Sender: TObject);
begin
FPos:=Memo.SelStart;
ReplaceDialog.FindText:=Memo.SelText;
ReplaceDialog.Position:=Point(MainForm.Left+(MainForm.Width div 3),MainForm.Top);
ReplaceDialog.Options:=FindDialog.Options+
[frHideUpDown,frHideWholeWord];
ReplaceDialog.Execute;
end;
procedure TMainForm.ReplaceDialogFind(Sender: TObject);
begin
if frMatchCase in ReplaceDialog.Options then
Memo.SelStart:=Pos(ReplaceDialog.FindText,
Copy(Memo.Lines.Text,FPos+1,
Length(Memo.Lines.Text)))+FPos-1
else
Memo.SelStart:=Pos(AnsiLowerCase(ReplaceDialog.FindText),
AnsiLowerCase(Copy(Memo.Lines.Text,FPos+1,
Length(Memo.Lines.Text))))+FPos-1;
if Memo.SelStart>=FPos then
begin
Memo.SelLength:=Length(ReplaceDialog.FindText);
FPos:=Memo.SelStart+RichEdit.SelLength+1;
end
else
if Application.MessageBox(PChar('Текст "'+ReplaceDialog.FindText+
'" не найден. Продолжить поиск?'),'Сообщение',
mb_YesNo or mb_IconQuestion)<>mrYes
then ReplaceDialog.CloseDialog;
Memo.SetFocus;
end;
procedure TMainForm.ReplaceDialogReplace(Sender: TObject);
begin
if Memo.SelText<>'' then
Memo.SelText:=ReplaceDialog.ReplaceText;
if frReplaceAll in ReplaceDialog.Options then
ReplaceDialogFind(Self);
end;

Создание БД Firebird (.fbd-файл) средствами Delphi

Posted by admin | Delphi, Базы данных | Пятница 15 Июнь 2007 07:25

Данный пример создает .fbd файл (база данных Firebird) средствами Delphi

 
IBDatabase1.DatabaseName := ChangeFileExt(Application.ExeName, '.fdb');
IBDatabase1.Params.Add('USER ''SYSDBA''');
IBDatabase1.Params.Add('PASSWORD ''masterkey''');
IBDatabase1.Params.Add('PAGE_SIZE 4096');
IBDatabase1.Params.Add('DEFAULT CHARACTER SET WIN1250');
IBDatabase1.CreateDatabase;

Delphi: Открыть сайт в Internet Explorer

Posted by admin | Delphi, Internet | Пятница 15 Июнь 2007 01:47

Данный пример показывает как запустить Internet Explorer с открыванием какого-либо URL. Для работы требуется модуль ShellAPI

 
ShellExecute(TForm(Owner).Handle,nil,PChar('http://codesources.net/'), nil, nil,SW_SHOWNORMAL);

Конфигурирование DNS-сервера BIND

Posted by admin | DNS, Unix | Вторник 12 Июнь 2007 15:25

Данное руководство описывает механизмы конфигурирования DNS-сервера BIND 8.х и выше. Рассматриваются не только вопросы настройки сервера, доменных зон, но и ряд функциональных возможностей, повышающих безопасность работы данного сервиса.
далее...

list-style-type

Posted by admin | CSS | Понедельник 11 Июнь 2007 23:11

Изменяет вид маркера для каждого элемента списка. Этот атрибут используется только в случае, когда значение свойства list-style-image установлено как none. Маркеры различаются для маркированного списка (тег UL) и нумерованного (тег OL).

далее...

Функция перевода SYSTEMTIME в TDateTime

Posted by admin | Delphi, Дата и время | Понедельник 11 Июнь 2007 22:00

Данная функция переводит тип данных SYSTEMTIME в TDateTime:

 
function SystemTime2DateTime(const SystemTime : TSystemTime; var DateTime : TDateTime ) : Boolean;
var I : Integer;
_Day : Integer;
DayTable: PDayTable;
begin
Result := False;
DateTime := 0.0;
DayTable := @MonthDays[IsLeapYear(SystemTime.wYear)];
with SystemTime do
if {(wYear >= 0) !always true! and} (wYear <= 9999) and
{(wMonth >= 1) and !otherwise can not convert time only!}
(wMonth <= 12) and
{(wDay >= 1) and !otherwise can not convert time only!}
(wDay <= DayTable^[wMonth]) and                                      //
(wHour < 24) and (wMinute < 60) and (wSecond < 60) and (wMilliSeconds < 1000) then   //
begin
_Day := wDay;
for I := 1 to wMonth - 1 do
Inc(_Day, DayTable^[I]);
I := wYear - 1;
//--------------- by Vadim Petrov ------++
if I<0 then i := 0;                     //
//--------------------------------------++
DateTime := I * 365 + I div 4 - I div 100 + I div 400 + _Day
+ (wHour * 3600000 + wMinute * 60000 + wSecond * 1000 + wMilliSeconds) / MSecsPerDay;
Result := True;
end;
end;

Перевод TDateTime в SYSTEMTIME

Posted by admin | Delphi, Дата и время | Понедельник 11 Июнь 2007 21:56

Данная функция переводит тип данных TDateTime в SYSTEMTIME

 
procedure _DateTimeToSystemTime(DateTime: TDateTime; var SystemTime: TSystemTime);
var
FT:TFileTime;
begin
Int64(FT):=Round((DateTime+109205.0)*864000000000.0);
FileTimeToSystemTime(FT,SystemTime);
end;

Delphi: Разность дат

Posted by admin | Delphi | Воскресенье 10 Июнь 2007 15:19

Данный пример реализует функцию для получения разности двух дат в формате DateTime. На выходе мы получаем количество дней, месяцев, лет.

 
function IsLeapYear(AYear: Integer): Boolean;
begin
Result := (AYear mod 4 = 0) and ((AYear mod 100 <> 0) or (AYear mod 400 = 0));
end;
 
function DaysPerMonth(AYear, AMonth: Integer): Integer;
const
DaysInMonth: array[1..12] of Integer =
(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
begin
Result := DaysInMonth[AMonth];
if (AMonth = 2) and IsLeapYear(AYear) then Inc(Result); { leap-year Feb is special }
end;
 
procedure DateDiff(Date1, Date2: TDateTime; var Days, Months, Years: Word);
var
DtSwap: TDateTime;
Day1, Day2, Month1, Month2, Year1, Year2: Word;
begin
if Date1 > Date2 then begin
DtSwap := Date1;
Date1 := Date2;
Date2 := DtSwap;
end;
DecodeDate(Date1, Year1, Month1, Day1);
DecodeDate(Date2, Year2, Month2, Day2);
Years := Year2 - Year1;
Months := 0;
Days := 0;
if Month2 < Month1 then begin
Inc(Months, 12);
Dec(Years);
end;
Inc(Months, Month2 - Month1);
if Day2 < Day1 then begin
Inc(Days, DaysPerMonth(Year1, Month1));
if Months = 0 then begin
Dec(Years);
Months := 11;
end
else Dec(Months);
end;
Inc(Days, Day2 - Day1);
end;

Компоненты ADO

Posted by admin | Delphi, Базы данных, Контролы | Воскресенье 10 Июнь 2007 14:12

В Delphi 5.0 появились компоненты для работы с Microsoft® ActiveX® Data Objects (далее ADO). ADO это технология стандартного обращения к реляционным данным от Microsoft. Эта технология аналогична BDE по назначению и довольно близка по возможностям.

далее...

PHP: sprintf

Posted by admin | PHP, Функции | Воскресенье 10 Июнь 2007 13:58

(PHP 3, PHP 4 , PHP 5)

sprintf -- Возвращает отформатированную строку

Описание

[cc lang="php"]

string sprintf ( string format [, mixed args])

Возвращает строку, созданную с использованием строки формата format.

Строка формата состоит из директив: обычных символов (за исключением %), которые копируются в результирующую строку, и описатели прреобразований, каждый из которых заменяется на один из параметров. Это относится также к fprintf(), sprintf() и printf().

Каждый описатель прреобразований состоит из знака процента (%), за которым следует один или более дополнительных элементов (в том порядке, в котором они здесь перечислены):

  1. Необязательный описатель заполнения, который определяет, какой символ будет использоваться для дополнения результата до необходимой длины. Это может быть пробел или 0. По умолчанию используется пробел. Альтернативный символ может быть указан с помощью '. См. примеры ниже.
  2. Необязательный описатель выравнивания, определяющий выранивание влево или вправо. По умолчанию выравнивается вправо, - используется для выравнивания влево.
  3. Необязательное число, описатель ширины, определяющий минимальное число символов, которое будет содержать результат этого преобразования.
  4. Необязательный описатель точности, определяющий, сколько десятичных разрядов отображать для чисел с плавающей точкой. Имеет смысл только для числовых данных типа float. (Для форматирования чисел удобно также использовать функцию number_format().)
  5. Описатель типа, определяющий, как трактовать тип данных аргумента. Допустимые типы:
  • % - символ процента. Аргумент не используется.
  • b - аргумент трактуется как целое и выводится в виде двоичного числа.
  • c - аргумент трактуется как целое и выводится в виде символа с соответствующим кодом ASCII.
  • d - аргумент трактуется как целое и выводится в виде десятичного числа со знаком.
  • u - аргумент трактуется как целое и выводится в виде десятичного числа без знака.
  • f - аргумент трактуется как float и выводится в виде десятичного числа с плавающей точкой.
  • o - аргумент трактуется как целое и выводится в виде восьмеричного числа.
  • s - аргумент трактуется как строка.
  • x - аргумент трактуется как целое и выводится в виде шестнадцатиричного числа (в нижнем регистре букв).
  • X - аргумент трактуется как целое и выводится в виде шестнадцатиричного числа (в верхнем регистре букв).

Начиная с PHP 4.0.6 в строке формата поддерживается нумерация и изменение порядка параметров. Например:

Пример 1. Изменение порядка параметров

[cc lang="php"]
$format = "There are %d monkeys in the %s";
printf($format, $num, $location);

Этот код выведет "There are 5 monkeys in the tree". Теперь представьте, что строка формата содержится в отдельном файле, который потом будет переведен на другой язык, и мы переписываем ее в таком виде:

Пример 2. Изменение порядка параметров

[cc lang="php"]

$format = "The %s contains %d monkeys";
printf($format, $num, $location);

Появляется проблема: порядок описателей преобразования не соответствует порядку аргументов. Мы не хотим менять код, и нам нужно указать, какому аргументу соответствует тот или иной описатель преобразования.

Пример 3. Изменение порядка параметров

[cc lang="php"]
$format = "The %2\$s contains %1\$d monkeys";
printf($format, $num, $location);

Нумерация аргументов имеет еще одно применение: она позволят вывести один и тот же аргумент несколько раз без передачи функции дополнительных параметров.

Пример 4. Изменение порядка параметров

[cc lang="php"]
$format = "The %2\$s contains %1\$d monkeys.
That's a nice %2\$s full of %1\$d monkeys.";
printf($format, $num, $location);

См. также описание функций printf(), sscanf(), fscanf(), vsprintf() и number_format().
Пример 5. sprintf(): заполнение нулями

[cc lang="php"]

$isodate = sprintf("%04d-%02d-%02d", $year, $month, $day);

Пример 6. sprintf(): форматирование денежных величин

[cc lang="php"]

$money1 = 68.75;
$money2 = 54.35;
$money = $money1 + $money2;
// echo $money выведет "123.1";
$formatted = sprintf("%01.2f", $money);
// echo $formatted выведет "123.10"

Страница 1 из 3123»