Форум: "Основная";
Текущий архив: 2003.08.11;
Скачать: [xml.tar.bz2];
ВнизПозиционирование надписи на отрезке Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.01 c