Borland C++ VCL FAQ


Часто задаваемые вопросы по Borland C++ VCL

Какой способ очистки TCanvas самый быстрый?

АПИ функция PatBlt.
Пример:
PatBlt(PaintBox1->Canvas->Handle, // Handle Canvas'а
      
0,                         // начальная координата по X
      
0,                         // начальная координата по Y
      
PaintBox1->Width,          // конечная координата по X
      
PaintBox1->Height,         // конечная координата по Y
      
WHITENESS                  // как закрашивать
      
);

Почему у меня RichEdit не хочет откpывать и сохpанять RTF'ы?

Надо для этого RichEdit установить свойство PlainText в true.

Как с помощью TMediaPlayer узнать, сколько длится фильм в миллисекундах и в кадрах?

MediaPlayer1->TimeFormat = tfFrames;  // устанавливаем формат времени в кадрах
ShowMessage("Длина в кадрах: " + IntToStr(MediaPlayer1->Length));
MediaPlayer1->TimeFormat = tfMilliseconds;  // устанавливаем формат времени в миллисекундах
ShowMessage("Длина в миллисекундах: " + IntToStr(MediaPlayer1->Length));

Как работать с ресурсами?

Один из вариантов:

Вручную в блокноте создаём файл с именем, например, "resource.rc".
Внутри формат такой:
[имя_ресурса_без_пробелов] [тип_ресурса_без_пробелов] "[имя файла]"

В него пишем, например:
BOLSHOI_FILE BIG_FILES "bigfile.txt"

Подключаем файл .rc к программе (Shift + F11 а там выбираем наш файл).

А где-то в программе:
TResourceStream *res_stream = new TResourceStream(0,              // берём из нашего exe
                                                 
"BOLSHOI_FILE", // имя ресурса
                                                 
"BIG_FILES"     // тип ресурса
                                                 
);
res_stream->SaveToFile("big_file.bin");
delete res_stream;
Таким образом, получаем наш "bigfile.txt", сохранённый под именем "big_file.bin".

Естественно, лучше сделать обработку исключений!
 

Дата и время( TDateTime ) - общие вопросы


Для начала краткая информация: TDateTime - по сути всего лишь число с плавающей точкой двойной точности, со всеми вытекающими последствиями. То есть , например, для того, чтобы вычислить разницу между двумя датами, достаточно вычесть одно из другого:
TDateTime datetime1 = ...;
TDateTime datetime2 = ...;
double difference = (double)( datetime2 - datetime1 );
При этом получившееся значение будет представлять точное значение с учетом дней, часов, минут и секунд. Например, значение 3.25 - это три дня и еще 0.25 дня( т.е. 6 часов )

Как узнать текущие дату и/или время?


Нет ничего проще:
TDateTime CurrentDate = Date();// это текущая дата
TDateTime CurrentTime = Time();// это текущее время
TDateTime CurrentDateTime = Now(); // это текущие дата и время


Как сдвинуть дату на заданный промежуток?

TDateTime datetime = ...;
datetime += 1.0 / 24; // сдвигаем на час вперед
datetime -= 1.0; // сдвигам на день назад
datetime += 7.0; // сдвигаем на неделю вперед
datetime = IncMonth( datetime, -1 ); // сдвигаем на месяц назад


Как определить день недели?

TDateTime datetime = ...;
int day_of_week = ( datetime.DayOfWeek() + 5 ) % 7; // считаем с понедельника и с нуля


Как определить номер недели в году?


Следует иметь в виду, что первая неделя в году может быть неполной.
int week_num;
Word year, month, day;
TDateTime dt = ...;// "подопытная" дата
dt.DecodeDate(&year,&month,&day);// раскладываем нашу дату на составляющие
TDateTime _1_jan(year,1,1);// 1-е января того года, которому соответствует дата
int _1_jan_day_of_week = (_1_jan.DayOfWeek()+5)%7; // день недели 1-го января
week_num = (int)(dt-TDateTime(year,1,1)+_1_jan_day_of_week)/7; // искомый номер недели(с 0)


Как узнать, сколько дней в месяце?


Количество дней в месяце хранится в глобальном массиве MonthDays, получить значение можно так:
MonthDays[IsLeapYear(номер_года)][номер_месяца] 


Как изменить один из компонентов TDateTime, не затрагивая другой?

TDateTime datetime1 = ...;
TDateTime datetime2 = ...;
ReplaceDate(datetime1,datetime2); // datetime1 теперь содержит ту же дату, что и datetime2
// но время осталось прежним

ReplaceTime(datetime2,datetime1); // а теперь datetime2 содержит то же время, что и datetime1
// но дата осталась прежней
 
« Предыдущая статья   Следующая статья »