Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
4-33402
kullibin
2003-06-10 15:58
2003.08.11
Сообщение


14-33285
Е-Моё имя
2003-07-24 11:04
2003.08.11
однако


3-33044
tamara
2003-07-17 15:43
2003.08.11
КАК ВЫДЕЛИТЬ ЦВЕТОМ СТРОКИ DBGrid


7-33381
RoadStar
2003-05-27 10:58
2003.08.11
Ramdrive


14-33312
AlexRush
2003-07-24 14:43
2003.08.11
Встраиваемый Движок Flash.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский