Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.08.11;
Скачать: CL | DM;

Вниз

Позиционирование надписи на отрезке   Найти похожие ветки 

 
Arezzz ©   (2003-07-26 19:23) [0]

В общем такая вот проблема, никак не могу спозиционировать надпись по середине нарисованной линии. вот фрагмент кода который отвечает за позиционирование

unit
...
uses
...
procedure TDlina.BitSaveClick(Sender: TObject);
var
Znachenie,pos:String;
PositOld, positN:TPoint;
X,Y,X1,Y1,X2,Y2,XX,YY,iii:Integer;
begin
// Graf.ClearAll;
//DM.TDate.Post;//
Graf.Calculare;

DM.TDate.Filter:="[Detal]="+IntToStr(1);//???????? 1 ?? ????? ??????
DM.TDate.Filtered:=True;

with DM.TDate do
First;
repeat
Znachenie:=DM.TDate["Dlina"];//? ????????? ???
X1:=DM.TDate.FieldValues["X1"];
Y1:=DM.TDate.FieldValues["Y1"];
X2:=DM.TDate.FieldValues["X2"];
Y2:=DM.TDate.FieldValues["Y2"];
begin
if X2>X1 then //????????? ??????????
begin
begin
X:=((X2-X1) div 2)+X1; //???=
end;
end
else
if X2<X1 then
begin
begin
X:=((X1-X2) div 2)+X2;
end;
end
else
begin
X:=X1;
end;
if Y2>Y1 then
begin
begin
Y:=((Y2-Y1) div 2)+Y1;
end;
end
else
if Y2<Y1 then
begin
begin
Y:=((Y1-Y2) div 2)+Y2;
end;
end
else
begin
Y:=Y1;
end;
if Y>X then
begin
pos:="Left";
end
else
pos:="Top";
end;
Graf.CreateLabel(iii, Znachenie, pos, X, Y);
iii:=iii+1;
until not DM.TDate.FindNext;
Graf.RePaintDraw(1);//???????? 1 ?? ????? ??????
DM.TDate.Filtered:=False;

FormZakaz.InsertOkno();
end;

...

function TGraf.RePaintDraw(Detal:Integer):boolean;
begin
DM.TDate.Filter:="[Detal]="+IntToStr(Detal);//???????? 1 ?? ????????
DM.TDate.Filtered:=true; // ??? ?????????? ?? ??????
//?????????????, ?????? ????? ??????????????
if not DM.TDate.IsEmpty then
begin
Graf.Repaint;//?????????????? Canvas
with DM.TDate do
First;// ??????? ? ?????? ?????? ??
Graf.Canvas.MoveTo(DM.TDate.FieldValues["X1"], DM.TDate.FieldValues["Y1"]);
Graf.Canvas.Ellipse(DM.TDate.FieldValues["X1"]+3,DM.TDate.FieldValues["Y1"]+3,
DM.TDate.FieldValues["X1"]-3,DM.TDate.FieldValues["Y1"]-3);
//????????? ????? ?? ????? ?????
repeat
Graf.Canvas.LineTo(DM.TDate.FieldValues["X2"], DM.TDate.FieldValues["Y2"]);
Graf.Canvas.Ellipse(DM.TDate.FieldValues["X2"]+3,DM.TDate.FieldValues["Y2"]+3,
DM.TDate.FieldValues["X2"]-3,DM.TDate.FieldValues["Y2"]-3);
//????????? ????? ?? ????? ?????
until not DM.TDate.FindNext;//???, ??? ????
end;
DM.TDate.Filtered:=False;//?????? ??????????
result:=True;
end;

...


 
easy ©   (2003-07-26 19:28) [1]

кайфовые комменты..=))


 
Arezzz ©   (2003-07-26 19:30) [2]

Возможно, решение, где то рядом... А у меня бошка уже расскалывается (((


 
Arezzz ©   (2003-07-26 19:31) [3]

to easy, конечно могу переписать, чтоб по русски было...


 
Arezzz ©   (2003-07-26 19:37) [4]

function TGraf.CreateLabel(Iii:Integer;Str:String;Position:String;X,Y:Integer):boolean;
var
LenX, LenY, OtstupTop, OtstupLeft:Integer;
begin
Lab[Iii]:=TPDJRotoLabel.Create(Application);
lab[Iii].Parent:=Graf;
lab[Iii].Tag:=Iii;
lab[Iii].ParentColor:=False;
lab[Iii].Transparent:=True;
lab[Iii].Font.Color:=clBlack;
lab[Iii].Caption:=Str;
lab[Iii].Width:=40;
lab[Iii].Height:=16;
labis[Iii]:=True;
if Position="Left" then
begin
lab[Iii].Angle:=ag90;
OtstupTop:=0;
OtstupLeft:=-25;//-25 ??? ?????? ?? ?????? ?????
end;
if Position="Top" then
begin
lab[Iii].Angle:=ag0;
OtstupTop:=-25;//-25 ??? ?????? ?? ????? ?????
OtstupLeft:=0;
end;
LenX:=Lab[Iii].Width div 2;
lab[Iii].Left:=X-LenX+OtstupLeft;
LenY:=Lab[Iii].Height div 2;
lab[Iii].Top:=Y-LenY+OtstupTop;
OtstupLeft:=0;
OtstupTop:=0;
result:=True;
end;


 
easy ©   (2003-07-26 19:48) [5]

теперь - гораздо лучше..


 
Arezzz ©   (2003-07-26 19:57) [6]

unit
...
uses
...
procedure TDlina.BitSaveClick(Sender: TObject);
var
Znachenie,pos:String;
PositOld, positN:TPoint;
X,Y,X1,Y1,X2,Y2,XX,YY,iii:Integer;
begin
Graf.Calculare;

DM.TDate.Filter:="[Detal]="+IntToStr(1);//Заменить 1 на номер детали
DM.TDate.Filtered:=True;

with DM.TDate do
First;
repeat
Znachenie:=DM.TDate["Dlina"];//и считываем его
X1:=DM.TDate.FieldValues["X1"];
Y1:=DM.TDate.FieldValues["Y1"];
X2:=DM.TDate.FieldValues["X2"];
Y2:=DM.TDate.FieldValues["Y2"];
begin
if X2>X1 then //Вычисляем координаты
begin
begin
X:=((X2-X1) div 2)+X1;
end;
end
else
if X2<X1 then
begin
begin
X:=((X1-X2) div 2)+X2;
end;
end
else
begin
X:=X1;
end;
if Y2>Y1 then
begin
begin
Y:=((Y2-Y1) div 2)+Y1;
end;
end
else
if Y2<Y1 then
begin
begin
Y:=((Y1-Y2) div 2)+Y2;
end;
end
else
begin
Y:=Y1;
end;
if Y>X then
begin
pos:="Left";
end
else
pos:="Top";
end;
Graf.CreateLabel(iii, Znachenie, pos, X, Y);
iii:=iii+1;
until not DM.TDate.FindNext;
Graf.RePaintDraw(1);//Заменить 1 на номер детали
DM.TDate.Filtered:=False;

FormZakaz.InsertOkno();
end;

...

function TGraf.RePaintDraw(Detal:Integer):boolean;
begin
DM.TDate.Filter:="[Detal]="+IntToStr(Detal);//Заменить 1 на номер детали
DM.TDate.Filtered:=true; // Для фильтрации по детали
//отфильтровали, теперь будем перерисовывать
if not DM.TDate.IsEmpty then
begin
Graf.Repaint;//перерисовываем Canvas
with DM.TDate do
First;// поехали с первой записи НД
Graf.Canvas.MoveTo(DM.TDate.FieldValues["X1"], DM.TDate.FieldValues["Y1"]);
Graf.Canvas.Ellipse(DM.TDate.FieldValues["X1"]+3,DM.TDate.FieldValues["Y1"]+3,
DM.TDate.FieldValues["X1"]-3,DM.TDate.FieldValues["Y1"]-3);
//Добавляем элипс на конец линии
repeat
Graf.Canvas.LineTo(DM.TDate.FieldValues["X2"], DM.TDate.FieldValues["Y2"]);
Graf.Canvas.Ellipse(DM.TDate.FieldValues["X2"]+3,DM.TDate.FieldValues["Y2"]+3,
DM.TDate.FieldValues["X2"]-3,DM.TDate.FieldValues["Y2"]-3);
//Добавляем элипс на конец линии
until not DM.TDate.FindNext;//Что, уже все?
end;
DM.TDate.Filtered:=False;//Отмена фильтрации
result:=True;
end;

...

function TGraf.CreateLabel(Iii:Integer;Str:String;Position:String;X,Y:Integer):boolean;
var
LenX, LenY, OtstupTop, OtstupLeft:Integer;
begin
Lab[Iii]:=TPDJRotoLabel.Create(Application);
lab[Iii].Parent:=Graf;
lab[Iii].Tag:=Iii;
lab[Iii].ParentColor:=False;
lab[Iii].Transparent:=True;
lab[Iii].Font.Color:=clBlack;
lab[Iii].Caption:=Str;
lab[Iii].Width:=40;
lab[Iii].Height:=16;
labis[Iii]:=True;
if Position="Left" then
begin
lab[Iii].Angle:=ag90;
OtstupTop:=0;
OtstupLeft:=-25;//-25 это отступ от центра линии
end;
if Position="Top" then
begin
lab[Iii].Angle:=ag0;
OtstupTop:=-25;//-25 это отступ от центра линии
OtstupLeft:=0;
end;
LenX:=Lab[Iii].Width div 2;
lab[Iii].Left:=X-LenX+OtstupLeft;
LenY:=Lab[Iii].Height div 2;
lab[Iii].Top:=Y-LenY+OtstupTop;
OtstupLeft:=0;
OtstupTop:=0;
result:=True;
end;


 
Fenik ©   (2003-07-26 21:07) [7]

Canvas.TextWidth(...) div 2;


 
Arezzz ©   (2003-07-27 12:18) [8]

"Утро вечера мудренее",- сказала Василиса вылазя из под Кащея. А вчера она весь вечер причитала за бутылкой шампанского -"Когда я пьяная, я такая дура, такая дура"...

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

Всем спасибо за участие!!!



Страницы: 1 вся ветка

Текущий архив: 2003.08.11;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.034 c
4-33402
kullibin
2003-06-10 15:58
2003.08.11
Сообщение


14-33288
GSV_
2003-07-23 13:25
2003.08.11
ISAPi. Клиенты работают в одном потоке. Опять грабли.


11-33084
Morthan
2002-12-05 08:21
2003.08.11
Как правильно обработать OnKeyDown?


9-33039
Кен
2003-02-07 02:37
2003.08.11
GLScene Как сделать реальную воду ? Типа океан. Чтобы было правдо


4-33408
Школьник
2003-06-09 12:11
2003.08.11
Как корректно разместится в чужом адресном пространстве???