Показать сообщение отдельно
  #2  
Старый 07.08.2014, 06:20
Tonyy Tonyy вне форума
Новичок
 
Регистрация: 05.04.2010
Сообщения: 85
Репутация: 10
По умолчанию

для выполнения пн 2. я в место панели поставил скроллбокс. но нарисованный на нем и увеличенный графический объект так, что границы его выходят за область видимости не приводят к появлению скроллов, хотя свойство автоскролл установлено в true. подскажите. как это исправить.
Код:
procedure SetDCPixelFormat ( hdc : HDC );
 	var
	 pfd : TPixelFormatDescriptor;
	 nPixelFormat : Integer;
begin
	 FillChar (pfd, SizeOf (pfd), 0);
         pfd.dwFlags  := PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL or PFD_DOUBLEBUFFER;
	 nPixelFormat := ChoosePixelFormat (hdc, @pfd);
	 SetPixelFormat (hdc, nPixelFormat, @pfd);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
dc:=GetDC(scrlbx1.Handle);
SetDCPixelFormat(dc); //Применяем формат пиксела заданный ранее
hrc := wglCreateContext(dc); //Выделяем контекст устройства
wglMakeCurrent(dc, hrc);
glEnable(GL_DEPTH_TEST); // включаем проверку разрешения фигур (впереди стоящая закрывает фигуру за ней)
glDepthFunc(GL_LEQUAL);

end;

procedure TForm1.FormResize(Sender: TObject);
begin
glViewport(0, 0, pnl1.Width, pnl1.Height); //выделяем область куда будет выводиться наш буфер
end;

procedure TForm1.tmr1Timer(Sender: TObject);
var
  i,j:Integer;
  X,Y:array of double;
  massXS,massXXS:array of double;
  massYS,massYYS:array of double;
  
begin

 FormResize(Sender); //процедура обновления
 glClearColor (0.97, 0.97, 0.97, 1.0); //Цвет фона
 glClear (GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); //Очистка буфера цвета и глубины
 glPointSize(7);  //размер точки
 glEnable(GL_POINT_SMOOTH);
 glBegin(GL_POINTS);
 glColor3f(0,0,1);
 SetLength(massXS,SPSS.SizeOfmas);
 SetLength(massYS,SPSS.SizeOfmas);
 SetLength(massXXS,SPSS.SizeOfmas);
 SetLength(massYYS,SPSS.SizeOfmas);
 
 for i:=0 to SPSS.SizeOfmas-1 do begin
 massXS[i]:=SPSS.SpsStroki[i].X;
 massYS[i]:=SPSS.SpsStroki[i].Y;
 end;

 for j:=0 to SPSS.SizeOfmas-1 do  begin
 massXXS[j]:=0.9*(2*massXS[j]-(MaxValue(massXS)+minvalue(massXS)))/(MaxValue(massXS)-minvalue(massXS));
 massYYS[j]:=0.9*(2*massYS[j]-(MaxValue(massYS)+minvalue(massYS)))/(MaxValue(massYS)-minvalue(massYS));
 end;

 for i:=0 to SPSS.SizeOfmas-1 do begin
 glVertex2d(massXXS[i],massYYS[i]);
 end;
 glEnd;

 SwapBuffers(dc);
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
spsS.free;
end;

procedure TForm1.scrlbx1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);

var
    shiftcoorX,shiftcoorY:Integer;
begin
shiftcoorX:=Xdown-X;
shiftcoorY:=Ydown-Y;
if (Button=mbLeft) And ((shiftcoorX<>0)or(shiftcoorY<>0)) then
glTranslatef(0.3, 0.3, 0.0) else

if Button=mbRight then  glScalef (0.5, 0.5, 0.5)else
 glScalef (2.0, 2.0, 1.0);
end;

procedure TForm1.scrlbx1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  Xdown:=X;
 Ydown:=Y;
end;

и еще может в моем коде есть какие-то оплошности - был бы рад узнать о них. так как opengl только только начал изучать.
Ответить с цитированием