Хитрости в С++ 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.