Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 Вопрос по полигонам  [new]
adminsamara
Member

Откуда: Самара
Сообщений: 544
Отрисовать полигон я могу так:
FCanvas.Path.LineTo(1, 1);
                      FCanvas.Path.LineTo(60, 60);
                      FCanvas.Path.LineTo(30, 30);
                      FCanvas.Path.LineTo(40, 40);
                      FCanvas.Path.LineTo(256, 40);
                      FCanvas.Path.LineTo(40, 512);


Но никак не получается нарисовать его из VirtualTable...(были попытки сделать так FCanvas.Path.LineTo(Points[i].X, Points[i].Y);)

Процедура
procedure TForm1.DrawPolygon;
var
points:array of tpoint;
Fpoints:array of array of tpoint;
i:integer;
Index, PointIndex: Integer;
begin

if dm.VirtualTable_Polygon.RecordCount >0 then

  i:=0;
  setlength(points,dm.VirtualTable_Polygon.RecordCount);
  dm.VirtualTable_Polygon.First;
  repeat
  points[i]:=point(dm.VirtualTable_Polygon.Fields[0].AsInteger,dm.VirtualTable_Polygon.Fields[1].AsInteger);
  Image321.Bitmap.BeginUpdate;
                  try
                    begin
                      FCanvas := TCanvas32.Create(Bitmap);
                      FCanvas.Brushes.Add(TSolidBrush);
                      FSolid := TSolidBrush(FCanvas.Brushes[0]);
                      FSolid.FillColor := SetAlpha(clGreen32, 100);

                      FCanvas.Path.LineTo(1, 1);
                      FCanvas.Path.LineTo(60, 60);
                      FCanvas.Path.LineTo(30, 30);
                      FCanvas.Path.LineTo(40, 40);
                      FCanvas.Path.LineTo(256, 40);
                      FCanvas.Path.LineTo(40, 512); 
                     // FCanvas.Path.LineTo(Points[i].X, Points[i].Y);


                      FCanvas.Path.ClosePath;
                      FCanvas.Path.EndPath;
                    end;
                  finally
                    form1.Image321.Bitmap.EndUpdate;
                  end;
  Form1.image321.Bitmap.Clear(clWhite32);
  BitBlt(Form1.Image321.Bitmap.Handle,0,0,Bitmap.Width,Bitmap.Height,Bitmap.Handle,0,0, SRCCOPY);

  inc(i);
  dm.VirtualTable_Polygon.Next;
  label7.Caption:=inttostr(i);
  application.ProcessMessages;
  until dm.VirtualTable_Polygon.Eof;








end;
7 сен 18, 14:13    [21668188]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по полигонам  [new]
krapotkin
Member

Откуда: Екатеринбург
Сообщений: 634
так может СНАЧАЛА все точки заполнить из датасета в массив
а ПОТОМ их нарисовать??
а то вы каждый раз какой-то Canvas создаете заново...
7 сен 18, 18:40    [21668517]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по полигонам  [new]
Dimonka
Member

Откуда:
Сообщений: 1091
adminsamara
Но никак не получается нарисовать его из VirtualTable...(были попытки сделать так FCanvas.Path.LineTo(Points[i].X, Points[i].Y);)

Процедура
procedure TForm1.DrawPolygon;
..
                      FCanvas := TCanvas32.Create(Bitmap);
...


Замени на
                      FCanvas := Image321.Bitmap.Canvas;

И убери вот эту хрень из цикла, а то и совсем..
  Form1.image321.Bitmap.Clear(clWhite32);
  BitBlt(Form1.Image321.Bitmap.Handle,0,0,Bitmap.Width,Bitmap.Height,Bitmap.Handle,0,0, SRCCOPY);
10 сен 18, 10:31    [21669599]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить