⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mywindow.dpr

📁 一个可用delphi来开发java的JNI开发包delphi接口
💻 DPR
字号:
library MyWindow;

uses
  windows,
  SysUtils,
  jawt_delphi in '..\..\Pas\jawt_delphi.pas',
  jawt_info in '..\..\Pas\jawt_info.pas',
  jawt_md in '..\..\Pas\jawt_md.pas',
  JNI in '..\..\Pas\JNI.pas';

{$R *.res}

var DC:integer;


procedure setupPixelFormat(DC:HDC);
const
pfd:TPIXELFORMATDESCRIPTOR = (
  nSize:sizeof(TPIXELFORMATDESCRIPTOR); // size
  nVersion:1;                           // version
  dwFlags:PFD_SUPPORT_OPENGL or PFD_DRAW_TO_WINDOW or
    PFD_DOUBLEBUFFER;                   // support double-buffering
  iPixelType:PFD_TYPE_RGBA;             // color type
  cColorBits:24;                        // preferred color depth
  cRedBits:0; cRedShift:0;              // color bits (ignored)
  cGreenBits:0; cGreenShift:0;
  cBlueBits:0; cBlueShift:0;
  cAlphaBits:0; cAlphaShift:0;          // no alpha buffer
  cAccumBits: 0;
  cAccumRedBits: 0;                     // no accumulation buffer,
  cAccumGreenBits: 0;                   // accum bits (ignored)
  cAccumBlueBits: 0;
  cAccumAlphaBits: 0;
  cDepthBits:16;                        // depth buffer
  cStencilBits:0;                       // no stencil buffer
  cAuxBuffers:0;                        // no auxiliary buffers
  iLayerType:PFD_MAIN_PLANE;            // main layer
  bReserved: 0;
  dwLayerMask: 0;
  dwVisibleMask: 0;
  dwDamageMask: 0;                      // no layer, visible, damage masks
);
var pixelFormat:integer;
begin
pixelFormat := ChoosePixelFormat(DC, @pfd);
if (pixelFormat = 0) then
exit;
if (SetPixelFormat(DC, pixelFormat, @pfd) <> TRUE) then
exit;
end;


procedure initOpenGl(Handle:integer);
var
RC:HGLRC;
i:integer;
begin
DC:=GetDC(Handle); //Actually, you can use any windowed control here
SetupPixelFormat(DC);
RC:=wglCreateContext(DC); //makes OpenGL window out of DC
wglMakeCurrent(DC, RC); //makes OpenGL window active
end;


procedure Java_MyWindow_initializeOpenGL(Env: PJNIEnv; canvas: JObject); stdcall;
var
    JAWT_Info:TJAWT_Info;
    hwnd:integer;
    aspectRatio:single;
begin
   { JAWT_Info:=TJAWT_Info.create(Env,canvas);
    hwnd := JAWT_Info.getHWND();
    initOpenGl(hwnd);
    ////////////////////////////////////////
    glViewport(0, 0, 100, 50);
	  glMatrixMode(GL_PROJECTION);
   	glLoadIdentity();
  	aspectRatio := 100 /50;
		glOrtho (-100.0 * aspectRatio, 100.0 * aspectRatio, -100.0, 100.0, 1.0, -1.0);
  	glMatrixMode(GL_MODELVIEW);
  	glLoadIdentity();
    glClearColor( 0.0, 0.0, 0.0, 0.0 );  }
    writeln('Java_MyWindow_initializeOpenGL');
end;

procedure draw(Handle:integer);
var
  BrushPt: TPoint;                   // holds the current brush origin
  BrushHndl, OldBrush: HBRUSH;       // handles to brushes
  FormDC: HDC;                       // the form's device context
  BrushOffset:integer;
begin
  FormDC := GetDC(Handle);
  // FormDC:=Handle;
  Inc(BrushOffset);
  BrushHndl := CreateHatchBrush(HS_CROSS, 255);
  SetBrushOrgEx(FormDC, BrushOffset, BrushOffset, nil);
  OldBrush := SelectObject(FormDC, BrushHndl);
  GetBrushOrgEx(FormDC, BrushPt);
  if BrushPt.X>7 then
  begin
    BrushOffset := 0;
    SetBrushOrgEx(FormDC, BrushOffset, BrushOffset, nil);
  end;
  Rectangle(FormDC, 10, 10, 110, 110);
  SelectObject(FormDC, OldBrush);
  DeleteObject(BrushHndl);
  ReleaseDC(Handle, FormDC);
end;

procedure Java_MyWindow_paintOpenGL(Env: PJNIEnv; canvas: JObject); stdcall;
var
    JAWT_Info:TJAWT_Info;
    hwnd:integer;
begin
    JAWT_Info:=TJAWT_Info.create(Env,canvas);
    hwnd := JAWT_Info.getHWND();
    if hwnd=0 then exit;
    draw(hwnd);
    //writeln('1'+inttostr(sizeof(test)));
    writeln('2'+inttostr(sizeof(jawt_Win32DrawingSurfaceInfo)));


   { glClear( GL_COLOR_BUFFER_BIT );
    glPushMatrix();
    glBegin( GL_TRIANGLES );
    glColor3f( 1.0, 0.0, 0.0 );
    glVertex2f( 0.0, 1.0 );
    glColor3f( 0.0, 1.0, 0.0 ); glVertex2f( 0.87, -0.5 );
    glColor3f( 0.0, 0.0, 1.0 ); glVertex2f( -0.87, -0.5 );
    glEnd();
    glPopMatrix();
    SwapBuffers( DC );  }
   // writeln('Java_MyWindow_paintOpenGL');
end;

procedure Java_MyWindow_cleanupOpenGL(Env: PJNIEnv; canvas: JObject); stdcall;
begin
    writeln('Java_MyWindow_cleanupOpenGL');

end;


exports
    Java_MyWindow_initializeOpenGL,
    Java_MyWindow_paintOpenGL,
    Java_MyWindow_cleanupOpenGL;

begin
end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -