C++ Builder :: Игрописательство :: Как написать игру за 21 день ?

Главная

Введение

ЛИКБЕЗ
C++ Builder


ЛИКБЕЗ
C++

Глава №1
Глава №2
Глава №3
Глава №4
Глава №5
Глава №6

Исходники
к пособию

Мои исходники

Статьи
&
Книги


Гостевая

Ссылки

About

E-mail

Rambler's Top100


Статьи :: Хитрости в С++ Builder

 

Хитрости в С++ Builder

Tip#1

Интересная и опасная особенность: в массиве char элементы нумеруются с 0, а в типе String с 1.

--------------------------------------------------------------------------------
Tip#2

При переносе программ с системы на систему обычно возникает множество проблем. Одна из наиболее заметных - изменение разрешения экрана. Если программа создавалась при одном разрешении, а исполняется при другом, то размер ее окна, букв, кнопок и т.п. будет неправильный. Этого можно частично избежать, вставив следующий код в событие OnCreate необходимой формы:
void __fastcall TForm1::FormCreate(TObject *Sender)
{
//эта структура будет содержать разрешение экрана на системе
struct res{float x,y;}res;

/*здесь будет хранится коэфицент, показывающий во сколько раз
текущее разрешение больше исходного*/
struct factor{float x,y;}factor;

//считать текущее разрешение
res.x=Screen->Width;
res.y=Screen->Height;

//вычислить коэфицент. Если программа пишется при другом разрешении,
//то нужно только подставить его вместо 1024 и 768
factor.x=1024/res.x;
factor.y=768/res.y;

int cc=ControlCount-1; //количество объектов на форме
while(cc!=-1) //для каждого объекта выполняем следующие операции
{
Controls[cc]->Left/=factor.x; //правильно располагаем по горизонтали
Controls[cc]->Top/=factor.y; //…по вертикали
Controls[cc]->Width/=factor.x; //растягиваем до нужной ширины
Controls[cc]->Height/=factor.y; //…высоты
cc--;
}

//теперь растягиваем саму форму
Form1->Width/=factor.x;
Form1->Height/=factor.y;

//изменяем размер шрифтов; не забудьте поставить свойство формы Scaled=true
Form1->PixelsPerInch=Screen->PixelsPerInch;
}
Все структуры здесь используются для понятности, в реальном коде их выгоднее заменить на вектора.


--------------------------------------------------------------------------------
Tip#3

Каждый раз, когда вы наводите курсор на какой-либо задекларированый символ, об этом символе выводится информация. Процесс поиска этой информации отнимает у компа много ресурсов, так что лучше сделать так: Правой кнопкой нажать где-нибудь в Edit Window и выбрать Properties. Дальше нужно перейти ко вкладке Code Insight. Там можно передвинуть слайдер до упора, это увеличит задержку перед началом процесса поиска информации о символе. Или же, можно вообще отключить этот процесс, сняв галку с ToolTip symbol insight.

--------------------------------------------------------------------------------
Tip#4

При программировании под форточкой ну-у просто очень не хватает нормального буфера обмена. Слава богу, существует достаточно программ, заменяющих стандартный Windows Clipboard. Та, которой пользуюсь я, называется 3D Clipboard. Она сидит в tray-е и запоминает все, что юзер копирует в буфер обмена, и если юзер хочет вернуть информацию, скопированную давным-давно, ему нужно только нажать на иконку программы и выбрать из списка то, что его интересует.

--------------------------------------------------------------------------------
Tip#5

Недавно набрел на интересный аргумент в пользу библиотек Borland: "Тест показал более чем четырехкратное превосходство менеджера Heap Delphi над менеджером Heap Windows." Взято с http://mazurkin.virtualave.net К сведению, Delphi и C++Builder используют одинаковые библиотеки.

--------------------------------------------------------------------------------
Tip#6

Тем, кто пишет cgi на билдере, советую делать все не так, как хотят в Borland, а почитать нормальный хелп по протоколам и начать проект как обычный ДОСовский ехе.

--------------------------------------------------------------------------------
Tip#7

Инструкции inline assembler значительно замедляют компиляцию, так что при написании и отладке программы их лучше поместить в отдельный .cpp файл. Например, предположим в файле unit1.cpp находится инструкция asm
{
mov eax,0x0e07
xor ebx,ebx
}
Тогда нам нужно добавить в проект файл AsmUnit2.cpp со следующим
содержанием:
//---------------------------------------------------------------------------
#include
#pragma hdrstop

#include "AsmUnit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
//---------------------------------------------------------------------------
void callcode()
{
asm //инструкции
{
mov eax,0x0e07
xor ebx,ebx
}
}

Теперь декларируем созданную функцию callcode() в файле AsmUnit2.h :

//---------------------------------------------------------------------------
#ifndef AsmUnit2H
#define AsmUnit2H
#endif
//---------------------------------------------------------------------------
void callcode();

Далее прописываем следующую строчку в unit1.cpp :
#include "AsmUnit2.h"
И теперь можно вызывать callcode(), который выполнит все необходимые ассемблерные инструкции.
На первый взгляд проделанные операции могут показаться муторными и ненужными, но в реальности они значительно сокращают время разработки программы.
Tip#8

При отладке функций, обрабатывающих строки, бывает удобно в строку записать значение "1234567890123..." и проследить как оно меняется. Такая запись позволяет легко подсчитать позицию изменившихся букв.

--------------------------------------------------------------------------------
Tip#9

Если на форму нужно добавить несколько компонентов одного типа, то это можно быстро сделать, пользуясь следующим методом. На панели компонентов выбрать тот, который нужен и удерживая shift нажать на него. Далее при каждом клике внутри формы, на ней будет появляться новый компонент.

--------------------------------------------------------------------------------
Tip#10

Если кому мешает заставка при загрузке билдера, то ее можно убрать, запустив его с параметром -ns (просто приписать к "пути к объекту" в свойствах shortcut-а).

--------------------------------------------------------------------------------
Tip#11

Чтобы программа была переносима с компьютер на компьютер и запускалась без посторонних библиотек, нужно снять галками с "Use dynamic RTL" в свойствах Linker и "Build with runtime packages" в свойствах Packages.

--------------------------------------------------------------------------------
Tip#12

Чтобы проверить закрыта ли фигурная скобка, нужно подвести к ней курсор и нажать alt+[ Если она закрыта, то курсор переместится в другой конец заключенного в скобки фрагмента.

--------------------------------------------------------------------------------
Tip#13

Существует довольно удобный способ поиска по документу. Просто нажмите ctrl+e и начинайте печатать нужную фразу для поиска. По ходу печати, будут высвечиваться найденные результаты. Для поиска следующего результата, нажмите F3.

 

 

 

 
 
Hosted by uCoz