Архив за апреля, 2008

Apr27

Количество недель в месяце

Для календаря, который я делаю, мне понадобилось узнать, сколько недель затрагивает месяц. Решение пришло моментально:

Результат := Неделя_последнего_дня - Неделя_первого_дня;

 

В коде я оформил это так:

function GetWeekInMonth(ADate: TDate): Integer;

begin
  Result := WeekOf(EndOftheMonth(ADate)) - WeekOf(StartOfTheMonth(ADate));
end;

 

Через полчаса понял, что решение не верное :(.

Читать далее »

Apr26

Неверное сравнение Wide-строки и символа

Тестовый код:

 

var
  W: WideString;
begin
  W := 'я';
  if W[1] = 'я' then
    ShowMessage('Ok')
  else
    ShowMessage('Fail');
end;

 

Появляется надпись "Fail".

Читать далее »

Apr22

MessageBoxTimeOut

Хоть и ругают MS за большой объем операционной системы, но как много всего в ней. Например, в XP появилась функция MessageBoxTimeOut - это обычный MessageBox, но исчезающий через определенный промежуток времени.

 

Так как эта функция недокументированна, ее нельзя найти в модуле Windows.pas, но можно самому экспортировать:

MB_TIMEDOUT = 32000;

function MessageBoxTimeOut; external user32 name 'MessageBoxTimeoutA';
function MessageBoxTimeOutA; external user32 name 'MessageBoxTimeoutA';
function MessageBoxTimeOutW; external user32 name 'MessageBoxTimeoutW';

Читать далее »

Apr21

Разбиение строки на подстроки

Когда я начинал изучение PHP, мне, после Delphi, понравилась одна функция - explode. Ее работа очень проста - разбить строку на подстроки. В Delphi, до этого, я делал примерно следующее:

var

  sl: TStringList;

begin

  sl := TStringList.Create;

  try

    sl.Text := 'str1, str2, str3, str4, str5';

    sl.Delimiter := ',';

    // тут обрабатываем sl.Items

  finally

    sl.Free;

  end;

end;

Все бы хорошо, но... Что делать, если разделителей несколько? Например, как разбить такую строку:

language: russian; delphi, php, c++; Ivanov

и получить следующее:

language: russian

delphi

php

c++

Ivanov

Да, можно, конечно, разбить строку, а потом разбивать подстроки. Можно использовать регулярки. Но, как я уже писал - я противник использования, для таких случаев, регулярных выражений. Да и рекурсию/множество циклов использовать не люблю. И, как оказалось, не только я. В Delphi есть стандартная функция для разбиения строки на подстроки, совсем как в PHP :).

Читать далее »

Apr21

Сравнение строки с маской

Иногда возникает необходимость сравнить строку с каким-то шаблоном, например соответствует ли домен (http://delphist.ru) маске доменов в зоне .ru? Подобную задачу можно решить многими способами, начиная от того, что в ручную проверять посимвольно, заканчивая преминением регулярных выражений.

Читать далее »

Лимузины на свадьбу алматы полезные советы при выборе проката лимузина. Регистрация ценных бумаг в Иркутске. Смотрите информацию Лечение алкоголизма в Краснодаре у нас на сайте.
-->