Only German, but with samples for saving screenshots to bmp or tga file format.

http://wiki.delphigl.com/index.php/Screenshot

I try to translate the comments for bimtap version

Code:
procedure ScreenShot(const Name : string);
var 
  F : file;
  FileInfo: BITMAPINFOHEADER;
  FileHeader : BITMAPFILEHEADER;
  pPicData:Pointer;
  Viewport : array[0..3] of integer;
begin
  // clear header
  ZeroMemory(@FileHeader, SizeOf(BITMAPFILEHEADER));
  ZeroMemory(@FileInfo, SizeOf(BITMAPINFOHEADER));
 
  // query screen size of viewpoint 
  glGetIntegerv(GL_VIEWPORT, @Viewport);
 
  // Init header
  FileHeader.bfType := 19778; //$4D42 = 'BM'
  FileHeader.bfOffBits := SizeOf(BITMAPINFOHEADER)+SizeOf(BITMAPFILEHEADER);
 
  // setup bitmap header
  FileInfo.biSize := SizeOf(BITMAPINFOHEADER);
  FileInfo.biWidth := Viewport[2];
  FileInfo.biHeight := Viewport[3];
  FileInfo.biPlanes := 1;
  FileInfo.biBitCount := 32;
  FileInfo.biSizeImage := FileInfo.biWidth*FileInfo.biHeight*(FileInfo.biBitCount div 8);
 
  // setup file size
  FileHeader.bfSize := FileHeader.bfOffBits + FileInfo.biSizeImage;
 
  // get memory for image
  GetMem(pPicData, FileInfo.biSizeImage);
  try
    // read pixels from opengl frame buffer
    glReadPixels(0, 0, Viewport[2], Viewport[3], GL_BGRA, GL_UNSIGNED_BYTE, pPicData);
 
    // write image to disk, modern version are using streams
    AssignFile(f, name);
    Rewrite( f,1 );
    try
     BlockWrite(F, FileHeader, SizeOf(BITMAPFILEHEADER));
     BlockWrite(F, FileInfo, SizeOf(BITMAPINFOHEADER));
     BlockWrite(F, pPicData^, FileInfo.biSizeImage );
    finally
      CloseFile(f);
    end;
  finally
    // free reserved pixel data
    FreeMem(pPicData, FileInfo.biSizeImage);
  end;
end;