Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» FAQ по Borland C++ Builder

Автор: ShIvADeSt
Дата сообщения: 22.06.2005 00:41
greenfox
У StringGrid надо DefaultDrawing в False скинуть, тогда будет данное событие обрабатываться.

Цитата:

When DefaultDrawing is False, the cells should be painted using the DrawCell method. For TCustomGrid, DrawCell is an abstract method. Descendants of TCustomGrid use DrawCell to provide their own customized drawing code, or to generate an OnDrawCell event.

Автор: greenfox
Дата сообщения: 22.06.2005 12:06
EZH
понял, спасибо.

ShIvADeSt

Цитата:
У StringGrid надо DefaultDrawing в False скинуть, тогда будет данное событие обрабатываться
нарисовал такое
Код:
//установлено StringGridErr->DefaultDrawing = false в проекте;
AnsiString S = StringGridErr->Cells[i][2];
if (i == 2){StringGridErr->Canvas->Font->Color = clRed;}
else {StringGridErr->Canvas->Font->Color = clBlack;}
StringGridErr->Canvas->TextOut(Rect.Right-2-StringGrid->Canvas->TextWidth(S),Rect.Top+2,S);
Автор: ShIvADeSt
Дата сообщения: 23.06.2005 01:26
greenfox
вот рабочий пример. DefaultDrawing в фалсе.

Цитата:

procedure TForm1.BitBtn1Click(Sender: TObject);
var i:integer;
begin
for i:=1 to 4 do StringGrid1.Cells[2,i]:='qqqqqqq';
StringGrid1.Update;
end;

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
StringGrid1.Canvas.Font.Color:=clRed;
StringGrid1.Canvas.Brush.Color:=clBlue;
StringGrid1.Canvas.TextOut(Rect.Left,Rect.Top,StringGrid1.Cells[ACol,ARow]);
end;

У меня есть подозрение, что была ошибка как у меня вначале, текст рисовался за пределами ячейки. В общем вначал мой кусок попробуй 100% рабочий, потом свой подгони.
Автор: greenfox
Дата сообщения: 27.06.2005 09:56
ShIvADeSt
угу, за пример спасибо... как доберусь до програмулины сразу потестю его.


Ещё хотел спросить: как лучше функцию вынести - как метод одной из форм (те в заголовочном файле её описать) или в самом уже проектном файле (cpp) написать!? А то в первом варианте мне в этот метод не получается например засунуть некоторые операторы из другой формы, а во втором не могу правильно её определить - компилятор ругается ...
Автор: IGELSrus
Дата сообщения: 28.06.2005 07:05
Люди добрые, помогите бедному ламеру...
делаю программку в билдере: на экране образ клавиатуры, так вот как сделать чтобы после клика по кнопке она(кнопка) меняла цвет. Просмотрел свойства всех кнопок нигде цвета фона кнопки нет. Помогите кто сталкивался.
Автор: ShIvADeSt
Дата сообщения: 29.06.2005 00:55
IGELSrus
Цвет кнопки не меняется по умолчанию. Если тебе надо, чтобы кнопка меняла свой цвет, то
1. Сам создавай кнопки с Owner Draw стилем и рисуй их как тебе надо
2. Используй TImage для имитации кнопок и грузи на нем нужную картинку с фоном который тебе нужен.
3. Используй TPanel у нее можно менять цвет, она имеет Caption и может быть выпуклой и вогнутой. Отслеживай события нажатия на клавиши в самой форме KeyPreview установи в true и следи за событием OnKeyDown OnKeyUp самой формы, и в зависимости от нажатой клавиши меняй свойства соответсвущей панели на Raised Или Lowered. Одновременно закрашивая ее в нужный цвет.
Автор: greenfox
Дата сообщения: 30.06.2005 09:14
при перекомпиляции программы она начала выдавать ошибку что мол класс TPanel (для примера) не найден и всё такое... После нескольких манипуляций выяснилось что мешают временные файлы проекта (*.~*) C чем подобные случаи могут быть связаны? Может где галочку надо поставить\убрать что бы он бюлдер сам чистил\правил!? Или это нормальная ситуация что билдер иногда так себя ведёт!?
Автор: IGELSrus
Дата сообщения: 01.07.2005 14:07
ShIvADeSt
Тогда по поводу создания кнопок, где найти туториал по этой теме.
Автор: greenfox
Дата сообщения: 01.07.2005 15:34
А можно как готвый проект перенести на PoketPC!? (ну хотя бы на уровне уже исполн кода)
Автор: Darl
Дата сообщения: 02.07.2005 01:02
IGELSrus

void __fastcall TForm1::Button1Click(TObject *Sender)
{
FillRect(GetDC(((TButton *)Sender)->Handle), &(((TButton *)Sender)->ClientRect),
(HBRUSH)CreateSolidBrush(clRed));
}

Best regards
Автор: IGELSrus
Дата сообщения: 02.07.2005 06:45
Darl

Огромное спасибо...

Автор: ShIvADeSt
Дата сообщения: 02.07.2005 12:15
Darl

Цитата:
{
FillRect(GetDC(((TButton *)Sender)->Handle), &(((TButton *)Sender)->ClientRect),
(HBRUSH)CreateSolidBrush(clRed));
}

Пример рабочий, только у него небольшой недочет. При следующей перерисовке окна, данная кнопка будет заново закрашена обычным цветом. В этом отличие OwnerDraw компонентов, что их отрисовка происходит во время WM_DRAWITEM, и при перерисовке окна они отрисовываются так, как надо.
IGELSrus

Цитата:
Тогда по поводу создания кнопок, где найти туториал по этой теме.

В любой среде программирования есть хелп, в котором надо либо посмотреть примеры на данное сообщение, тебя должно интерисовать ODC_BUTTON вроде бы, либо посмотри пример создания кнопок на АПИ в том же хелпе, там есть пример Onwer Draw Button, сам в свое время использовал кусок из хелпа, когда разбирался как это делается. Но в твоем случае ИМХО лучше

Цитата:
Используй TPanel у нее можно менять цвет, она имеет Caption и может быть выпуклой и вогнутой. Отслеживай события нажатия на клавиши в самой форме KeyPreview установи в true и следи за событием OnKeyDown OnKeyUp самой формы, и в зависимости от нажатой клавиши меняй свойства соответсвущей панели на Raised Или Lowered. Одновременно закрашивая ее в нужный цвет.

Автор: Darl
Дата сообщения: 02.07.2005 12:27
ShIvADeSt

Я показал токо один из путей как можно менять цвет кнопки, а не весь кусок кода.
Автор: raoulduke
Дата сообщения: 18.07.2005 19:21
объясните ламеру, как работает функция EndOfFile , это как, после каждого считывания проверять в конце указатель или нет? если можно лоховской пример
Автор: Darl
Дата сообщения: 18.07.2005 20:54
raoulduke

1) Такой ф-ции ни в VCL ни в АПИ нету.
2) есть eof/EOF, но что имеено тебе надо. В основном в классах где есть похожая ф-ция присутствует Next/GetNext/NextRecord и т.п.

Типа пример

while (!...->EOF)
{
...;
...->Next();
}
Автор: DieSel666
Дата сообщения: 19.07.2005 23:45
кажется есть endf, для закрытия файла...
Автор: raoulduke
Дата сообщения: 22.07.2005 19:01
Darl
попробую
мне просто надо текстовый файл считать

Добавлено:
например если в каждой строчке там имена файлов записаны, надо же как-то stdin переправить чтобы можно было обычной scanf считывать их в переменные?
Автор: IgorXI
Дата сообщения: 31.07.2005 11:29
У меня спустя некоторое время с проектом стали происходить странные вещи.
Если я изменяю исходник и даю команду make project то проект компилируется со старым исходником, как-будто я и не делал никаких изменений, при этом не помогает ни закрытие-открытие проекта, ни удаление изменённого компилируемого .obj файла - он создаётся такой, какой и был до изменения, ни перезапуск C++ Buildera, ни перезакрузка компьютера, помогает только Build All. Эта странность связана точно именно с этим проектом, потому что с другими такого нет и наблюдается на двух компьютерах, где приходится работать.
Подскажите, если кто знает из-за чего такое может произойти, я уже не знаю что делать, ведь после малейшего исправления приходится перекомпилировать весь проект, а это занимает целых пятьдесят пять минут, и работа идёт очень медленно.
Автор: Xarde
Дата сообщения: 31.07.2005 23:48
Было у меня такое. Несколько раз. Причину не выяснил, но помогало обычно одно - создать чистый новый проект и добавить в него все файлы из старого. Если разберешься в причине - буду рад ее узнать.
Автор: OdesitVadim
Дата сообщения: 01.08.2005 11:39
IgorXI
Посмотри внимательно папочу проекта - там есть файл с расширением tds (если память не изменяет) - узнаеш его быстро по размеру. Это, насколько мне извесно как-бы закешированый откомпилированый проект. Удаляеш и компилируеш по новой
Автор: Xarde
Дата сообщения: 01.08.2005 12:27
Мне такое не всегда помогало - я удалял все, что только можно, перекомпилировал, но проблема оставалась. Но попробовать, конечно, стоит - все проще, чем заново проект составлять.
Автор: IgorXI
Дата сообщения: 02.08.2005 10:09
Решил я эту проблему, не знаю на долго ли, но помогла компиляция вручную посредством экспорта mak файла и последующей его сборкой, после этого всё вроде стало сново нормально компилироватся, по всей видимости это какой-то глюк BCB IDE.
Автор: Sphinx333
Дата сообщения: 12.08.2005 19:30
Косяк может крыться в совсем другой причине.... Если программа сохранялась в одной папке, а потом скопирована в другую и открыта в билдере там... И при всем при этом автоматом сохранялись опции проекта... то надо кильнуть файл .dsk. Иначе все исходники будут сохраняться в старой папке - в .dsk полные пути к файлам, а компилиться из рабочей -)
Автор: nevuser
Дата сообщения: 14.08.2005 12:43
Sphinx333
Согласен, было дело. Скопировал проект в новую папку для экспериментов, чтобы рабочий код не попортить, а вышло наоборот, в старой папке похакались исходники...
Автор: spike
Дата сообщения: 06.09.2005 10:49
проблема установки компонета CB5 под CB6

есть packages для builder 5
когда я пробую поставить его под builder 6, то ругается:

Код: This appication has faild to start because Vcl50.bpl was not found. Re-installing the application may fix this problem.
Автор: EZH
Дата сообщения: 06.09.2005 11:02
spike
Думаю без перекомпиляции тут не обойтись, нужны исходники...
Автор: spike
Дата сообщения: 07.09.2005 08:57
EZH
исходники есть, но они на delphi
как их откомпилить для cb6 ?
Автор: Alexiski
Дата сообщения: 07.09.2005 16:25
spike

Цитата:
исходники есть, но они на delphi
как их откомпилить для cb6 ?

Builder отлично компилит дельфийские пакеты.
Можно вообще включить отдельные юниты в проект.
Автор: EZH
Дата сообщения: 07.09.2005 16:39
spike
Создавай в билдере аналогичные пэкаджи (bpk) и включаq туда те модули, что указаны в соответствующих dpk. Ну и не забывай подключать уже требуемые bpi/bpl.
Автор: spike
Дата сообщения: 08.09.2005 10:04
EZH
сорри за ламоту, а как делает packages

Страницы: 12345678910111213141516171819202122232425262728

Предыдущая тема: ms exchange


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.