C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 VCL / Borland C++ FAQ / Borland C++

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

Автор: OlegGG
Исходная ссылка: - - -

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


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

Автор: OlegGG
Исходная ссылка: - - -

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

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

Автор: KAV
Исходная ссылка: - - -

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

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

Автор: OlegGG
Исходная ссылка: - - -

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

Вручную в блокноте создаём файл с именем, например, "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 ) - общие вопросы

Автор(ы): KAV, trainer
Исходная ссылка: - - -

Для начала краткая информация: 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
				   //  но дата осталась прежней


Как определить, является ли год високосным?
Для этого надо использовать функцию IsLeapYear. Например, следующий код покажет окно с текстом о том, является ли год високосным или нет:
int year = 2100;  // тут какой надо год
ShowMessage( IntToStr(year) + " год - " + ((IsLeapYear(year)) ? "" : "не ") + "високосный" );
Как видно, функция IsLeapYear принимает параметр - год и возвращает true, если он високосный и false в противном случае.

P.S. Троеточие в примерах заменяет некоторое выражение, позволяющее записать в объект корректное значение.

Компоненты - динамическое создание

Автор: OlegGG
Исходная ссылка: - - -

Например, так:
for (int i=0;i<5;i++)
        {
        TEdit *edit = new TEdit(this);
        edit->Parent = this;
        edit->Name = "edit"+AnsiString(i);
        edit->Height = 16;
        edit->Width = 104;
        edit->Left = 0;
        edit->Top = i*edit->Height;
        edit->Text = AnsiString(i);
        }
Этот код создаст 5 TEdit'ов.
Обращатся к ним можно так (по имени):
for (int i=0;i<5;i++)
        {
        TEdit *edit = (TEdit*)FindComponent("edit"+AnsiString(i));
        edit->Text = "www.sources.ru";
        }
Или совершенно другой вариант - использование массива:
TEdit *edit[5];

for (int i=0;i<5;i++)
        {
        edit[i] = new TEdit(this);
        edit[i]->Parent = this;
        edit[i]->Name = "edit"+AnsiString(i);
        edit[i]->Height = 16;
        edit[i]->Width = 104;
        edit[i]->Left = 0;
        edit[i]->Top = i * edit[i]->Height;
        edit[i]->Text = AnsiString(i);
        }

for (int i=0;i<5;i++)
        {
        edit[i]->Text = "www.sources.ru";
        } 

Строки(AnsiString) - общие вопросы

Автор: trainer
Исходная ссылка: - - -

Для начала краткая информация
AnsiString - класс динамической строки емкостью до 232-1 символов. Базой для создания этого класса послужил паскалевский тип String, который был расширен в соответствии с возможностями C++.
Особенностью его является то, что два экземпляра этого класса могут физически занимать один и тот же участок памяти. Экземпляр этого класса содержит счетчик ссылок к нему, когда этот счетчик обнуляется, экземпляр автоматически уничтожается. Если попытаться изменить экземпляр, к которому имеется более одной ссылки, то будет создана новая копия этой строки, которая и будет изменяться. Это уменьшает портебность программы в памяти, но и уменьшает скорость обработки.
Наследием Паскаля является также то, что символы в нем нумеруются с 1, а не с 0, как это принято в C/C++

Создание строки
Благодаря наличию перегруженных конструкторов строку можно создавать из большого количества базовых типов языка C++, например:
AnsiString empty_string;	 /* пустая строка */
AnsiString one = 1;		 /* строка one будет содержать "1" */
AnsiString one_and_half = 1.5;   /* в one_and_half содержится строка "1.5" */
AnsiString one_charachter = 'a'; /* в one_charachter содержится строка "a" */
AnsiString dup_string = AnsiString::StringOfChar('A',5); /* dup_string получит значение "AAAAA" */
AnsiString simply_string = "string";
AnsiString shorten("Длинная строка",7); /* в shorten попадут только первые 7 символов */

получение символа из строки
Получить символ из строки типа AnsiString можно с помощью индексного оператора:
AnsiString ansi_string = "Строка";
char character = ansi_string[1];   /* получаем самый первый символ */
ansi_string[6] = 'и';		   /* заменим 6-й на букву 'и' */

Получение символьного массива, содержащего значение AnsiString
Функции библиотеки исполнения C и функции WinAPI требуют, чтобы строки передавались им в виде символьных массивов. В AnsiString для этого предназначены функции c_str и data. Разница между ними в том, что для пустой строки c_str возвращает "", а data - NULL. Это отличие может быть проиллюстрировано следующим примером:
AnsiString ansi_string;
char * str1 = ansi_string.c_str();
char * str2 = (char *)ansi_string.data();

Копирование значения AnsiString в символьный массив Unicode
Для этого предназначена функция WideChar, а размер требуемого массива можно узнать, воспользовавшись функцией WideCharBufSize
AnsiString ansi_string = "Строка AnsiString";   /* наша строка */
wchar_t * UnicodeString = new wchar_t[ansi_string.WideCharBufSize()]; /* массив-получатель */
ansi_string.WideChar(UnicodeString,ansi_string.WideCharBufSize());
// используем полученную строку, затем удаляем
delete [] UnicodeString;

Как узнать, сколько символов в строке?
Для этого надо воспользоваться функцией Length.

Как удалить в строке концевые пробелы?
Это делают функции Trim, TrimLeft и TrimRight соответственно с обоих концов, только с начала и только с конца.

Работа с фрагментами строки
AnsiString предоставлякт возможность поиcка(Pos), вставки(Insert), удаления(Delete) и получения копии(SubString) фрагмента текста в строке:
AnsiString ansi_string = "Строка";
int index = ansi_string.Pos("ка");  /* найдем окончание слова */
if( index != 0 ) {
   ansi_string.Insert("чеч",index); /* теперь строка имеет вид "Строчечка" */
   ansi_string.Delete(index,2);	   /* а теперь - "Строчка" */
}

Как зарезервировать строке определенный размер
Иногда бывает нужно зарезервировать для строки пространство, достаточное для хранения определенного количества символов. Сделать это можно при помощи функции SetLength

Строки( AnsiString ) - преобразования - другие типы

Автор: OlegGG, trainer
Исходная ссылка: - - -

Частично преобразования значений в/из AnsiString рассмотрены в теме "Строки(AnsiString) - общие вопросы"
Кроме того, возможны следующие преобразования:

AnsiString в целочисленный тип(int,long):
AnsiString int_as_AnsiString = "123";
int int_as_int_1 = int_as_AnsiString.ToInt();
int int_as_int_2 = StrToInt(int_as_AnsiString);

AnsiString в число с плавающей точкой(float,double):
AnsiString float_as_AnsiString = "3.14";
float float_as_float_1 = float_as_AnsiString.ToDouble();
float float_as_float_2 = StrToFloat(float_as_AnsiString);

AnsiString <-> цвет(TColor):
AnsiString ansi_string = "clBtnText";
TColor color = StringToColor(ansi_string);	  /* цвет в строку */
AnsiString color_string = ColorToString(clWhite); /* строку в цвет */

AnsiString <-> курсор(TCursor):
AnsiString ansi_string = "crHandPoint";
TCursor cursor = StringToCursor(ansi_string);	   /* строка в курсор */
AnsiString cursor_string = CursorToString(crHelp); /* курсор в строку */

Строки( AnsiString ) и бинарные файлы

Автор: trainer
Исходная ссылка: - - -

Запись в двоичный файл
Для того, чтобы записать AnsiString в бинарный файл, его нужно сначала преобразовать к массиву char.
Пример записи в файл:
TFileStream *out = new TFileStream("info", fmCreate); // создаем файл 
if( out != NULL ) { 
   AnsiString text = "www.sources.ru"; // исходная строка 
   int size = text.Length();
   out->Write(&size, sizeof(size)); 
   if( size != 0 ) out->Write(text->data(), size); 
} 
delete out;

Чтение из двоичного файла
Пример реализации:
AnsiString text;
TFileStream *in = new TFileStream("info",fmOpenRead); // открываем файл 
if( in != NULL ) { 
   int size; 
   in->Read(&size, sizeof(size)); 
   if( size != 0 ) { 
      try { 
         text.SetLength(size); 
         in->Read((void *)(text.data()), size); 
      } catch( EOutOfMemory& ) {} 
   } 
} 
delete in; 

ShowMessage(text);

Цвет( TColor ) - общие вопросы

Автор(ы): KAV, OlegGG, trainer
Исходная ссылка: - - -

Как получить TColor, имея значения красной, синей и зелёной составляющих?
int red = random(255);		  // красная составляющая
int blue = random(255);		  // синяя составляющая
int green = random(255);	  // зеленая составляющая
Label1->Font->Color = (TColor)RGB(red,green,blue);

Как имея TColor, получить значения красной, синей и зелёной составляющих?
TColor color = ...;
unsigned red   = GetRValue(color); // красная составляющая
unsigned green = GetGValue(color); // зеленая составляющая
unsigned blue  = GetBValue(color); // синяя составляющая

Как узнать яркость цвета?
TColor color = ...;
unsigned luminosity = (GetRValue(color)*77 + GetGValue(color)*151 + GetBValue(color)*28) >> 8;