Текст в RoundRect
1. Как можно закрепить текст в фигуре RoundRect к примеру нужно начертить структурную схему чего-ниибудь(прямоугольник в нем текст, линия соединения, следующий прямоугольник с текстом и тд)Прямоугольник - RoundRect, Текст - TextOutA. Чтобы нарисовать TextOutA всередине фигуры надо знать размеры текстовой области, а у TextOutA в свойствах их нет.
2. Как передать данные из Unit1.cpp в Unit2.cpp
и наоборот.Например Form1 основное окно, а в Form2 настройки первого окна допустим размеры,как передатьданные вводимые в Form2 окну Form1?
Спасибо
HDC hdc, // handle to DC
UINT iFirstChar, // first character in range
UINT iLastChar, // last character in range
LPINT lpBuffer // buffer for widths
);
ширина букв от iFirstChar до iLastChar, заносится в lpBuffer, высота шрифта это ясно.
Чтобы формы видели друг друга на сделать #include "unit1.h"(или .hpp)в unit2.cpp и наоборот я хоткей на это дело по-моему Alt+F11.
Прошу прощения за разнобой в вопросах подскажите пожалуйста
1. Как можно закрепить текст в фигуре RoundRect к примеру нужно начертить структурную схему чего-ниибудь(прямоугольник в нем текст, линия соединения, следующий прямоугольник с текстом и тд)Прямоугольник - RoundRect, Текст - TextOutA. Чтобы нарисовать TextOutA всередине фигуры надо знать размеры текстовой области, а у TextOutA в свойствах их нет.
2. Как передать данные из Unit1.cpp в Unit2.cpp
и наоборот.Например Form1 основное окно, а в Form2 настройки первого окна допустим размеры,как передатьданные вводимые в Form2 окну Form1?
Спасибо
чтобы узнать размер строки в пикселях (ширину и высору) используй GetTextExtentPoint32
Прошу прощения за разнобой в вопросах подскажите пожалуйста
1. Как можно закрепить текст в фигуре RoundRect к примеру нужно начертить структурную схему чего-ниибудь(прямоугольник в нем текст, линия соединения, следующий прямоугольник с текстом и тд)Прямоугольник - RoundRect, Текст - TextOutA. Чтобы нарисовать TextOutA всередине фигуры надо знать размеры текстовой области, а у TextOutA в свойствах их нет.
int PosGor=40,PosVer=40;
TRect Num;
Num.Left = PosGor;
Num.Right = PosGor+pCanvas->TextWidth("№ п/п")+1;
Num.Top = PosVert;
Num.Bottom = PosVert+pCanvas->TextHeight("№ п/п")+40;
pCanvas->Pen->Color = clWindowText;
pCanvas->Font->Size = 10;
pCanvas->Brush->Color = clActiveCaption;
pCanvas->Font->Color = clWhite;
pCanvas->TextRect(Num,Num.Left+1,Num.Top+10,"№ п/п");
pCanvas->Brush->Color = clBlack;
pCanvas->FrameRect(Num);
Нарисует закрашенный прямоугольник с размерами по вертикали и по горизонтали больше чем текст внутри
его. Для получения высоты текста используется функция pCanvas->TextHeight("№ п/п"); сответственно ширину дает pCanvas->TextWidth("№ п/п")
С RowndRect все немного сложнее - я пытался рисовать сначала закругленный прямойгольник - а по верх его прямоугольник с текстом - но толку не было(или плохо пытался). На форуме предложили использовать для этих целей TShape+Label. Если нужно выводить только текст - то этого вполне достаточно - я для своих целей использовал TShape+TPaintBox. Но вообще для серьезных задач имеет смысл потратить время и организовать вывод через собственный класс.
2. Как передать данные из Unit1.cpp в Unit2.cpp
и наоборот.Например Form1 основное окно, а в Form2 настройки первого окна допустим размеры,как передатьданные вводимые в Form2 окну Form1?
Спасибо
Вывод может быть передан как через
#include "Unit1.h" во второй форме, тогда к открытым перемеменным класса можно обратится из второй формы напрямую:
Можно объявить класс второй формы дружественным - тогда ты можешь получить доступ и к защищенным переменным.
Можно передать параметры через реестр, тогда по событию onPaint форма просто будет перечитывать свои параметры, можно через функцию вне класса...
Кто знает подскажитеможно ли в Билдере реализовать многослойный рисунок (к примеру на нижнем слое фон, на верхнем какой-нибудь объект, который бде двигаться относиительно фонатаки образом что бы реализовать движение не было-бы необходимости перерисовывать всю канву заново)
Вывод может быть передан как через
#include "Unit1.h" во второй форме, тогда к открытым перемеменным класса можно обратится из второй формы напрямую:
Небольшая проблемка с переменными работает, а вот с функциями нет. Например в Unit2.cpp объявлена функция
void func(){
.........
}
а в Unit1.cpp её вызов
При компиляции происходит ошибка Call to undefinit function 'func', не спасает и обращение Form2->func();
Ошивка 'func'is not a member of TForm2
Unit'ы прописаны в обоих формах. Так в чем же дело?
Небольшая проблемка с переменными работает, а вот с функциями нет. Например в Unit2.cpp объявлена функция
void func(){
.........
}
а в Unit1.cpp её вызов
При компиляции происходит ошибка Call to undefinit function 'func', не спасает и обращение Form2->func();
Ошивка 'func'is not a member of TForm2
Unit'ы прописаны в обоих формах. Так в чем же дело?
Функция func() объявлена в public'e?
Функция func() объявлена в public'e?
Не была. После объявления дело пошло на поправку
:) Спасибо.правда появилось еще два вопроса если не втягость, объясните. Заранее благодарен.
1. Как сделать так, чтобы к функциям описанным в другом файле можно было обращаться без указателя на форму (как это организовано со стандартными функциями)Напр. Не Form2->printf("");,a просто printf("");
2. Как правильно использовать переменные другого Unit.cpp. Читал что просто нужно поставить extern перед объявлением переменной (extern int а) даже можно не включать юниты друг в друга(#include"Unit1.h"), но почему-то использовать переменные можно только включив юниты, определив в Unit.h переменные как public и только виде Form1->a=10; :(