Модератор: Модераторы
vvvch писал(а):установка точек останова не всегда хорошо
vvvch писал(а):AlphaBlend
Если Вы используете Windows, то можно делать так:
В uses добавляете модуль Windows, потом когда нужно вывести что-то в Log, то пишете в коде OutputDebugString(PChar('Вывод текста')); Текст это всегда строка, если надо вывести что-то другое, то используйте ф-ю format так OutputDebugString(PChar(Format('текст для вывода %d',[var]))); var - целая переменная (посмотрите описание ф-ии format, там много чего можно)
Теперь открываете окно "Журнал событий" (ВидОкна отладкиЖурнал событий).
В свойствах Окна (Правая кнопка мыши Параметры журнала событий) ставите галку "вывод" в "Сообщениях" далее "Ок". Всё. Сам этим пользуюсь уже давно, установка точек останова не всегда хорошо. Сначала ф-я OutputDebugString не выводила русские буквы, написал разработчикам Lazarus, исправили, сейчас нормально.
AlphaBlend писал(а):вы не описали саму процедуру
procedure TPyramid.SetApof(NewApof:Integer);
begin
if Apof >0 then Apof:=NewApof;
end;
S:=SQRT(p * ( p - Apof) * (p - Apof) * (p - Side));
AlphaBlend писал(а):Bombucho разобрались Вы со своей задачей ?
Добавлено спустя 2 минуты 4 секунды:
не разобрались ...
vvvch писал(а):Вообще-то я это не Вам писал, думаю Вы это и без меня знаете.
Просто несколько раньше AlphaBlend мне ответила что LNet поще Synapse, вот и решил "отплатить"...
unit AlphaBlendRectangle;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils;
type
{ Введем новый тип TRectangle }
{ Этот тип - запись, в которой хранятся стороны четырехугольника ( НЕ Квадрата ! ) }
TARect = packed record
{ признак квадратности }
{
В этом месте я применила "динамическую запись" , которая создает поля в зависимости от условий .
Тут это очень удобно и полезно , так как можно знать , с какой фигурой работаешь
и в последующем ориентироваться на поле SignRect ( " ПризнакКвадрата " )
}
case SignRect:boolean of
true:
(
{ у квадрата все стороны равны }
Side:Integer;
);
false:
(
{ у четырехугольника - не равны }
SideA,
SideB,
SideC,
SideD:Integer;
);
{ Момент - в данном случае я не принимаю во внимание прямоугольность фигуры . Положим , что
фигура прямоугольна. Мне думается, что Bombucho сам додумает, как сделать проверку на
прямоугольность
}
end;
{ TRadius }
TRadius = (rdWithinCircle, rtOutsideCircle);
{ Базовый класс "Квадратик" }
TARectangle = class
public { открытые методы }
function GetRadius(Radius:TRadius):Real;
function GetArea:Real;
function GetPerimetr:Real;
constructor Create(VSide:Real);
protected { защищенные методы }
function XGetArea:Real;
function XGetPerimetr:Real;
function XGetORadius:Real;
function XGetWRadius: Real;
private { скрытые поля }
Side:real;
Area : Real;
Perimetr: Real;
Oradius : Real;
WRadius : Real;
end;
implementation
function TArectangle.XGetWRadius:Real;
begin
result:=Wradius;
end;
function TArectangle.XGetArea:Real;
begin
result:=Area;
end;
function TArectangle.XGetPerimetr:Real;
begin
result:=Perimetr;
end;
function Tarectangle.XGetORadius:Real;
begin
result:=ORadius;
end;
{ public }
{ получить радиус вписанной или описанной окружности }
function TArectangle.GetRadius(Radius: TRadius):Real;
begin
{ rdWithinCircle, rtOutsideCircle }
case Radius of
rtOutsideCircle: result:=XGetOradius;
rdWithinCircle : result:=XgetWRadius;
end;
end;
{ Получить площадь }
function TArectangle.GetArea:Real;
begin
result:=XGetArea;
end;
{ Получить периметр }
function TArectangle.GetPerimetr:REal;
begin
result:=XGetPerimetr;
end;
constructor TArectangle.Create(VSide:Real);
begin
Side:=Vside;
if Side > 0 then
begin
Area:= Side * Side;
Perimetr:=Side * 4;
Oradius:=SQRT(2 * (Side * Side)) / 2;
Wradius:=Side / 2;
end;
end;
end.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 246