Wednesday, May 6, 2009

Thursday, April 30, 2009

[Delphi] Changing Printer Paper Size


var
Device, Driver, Port: array[0..80] of Char;
DevMode: THandle;
pDevmode: PDeviceMode;
...
...
// Get printer device name etc.
Printer.GetPrinter(Device, Driver, Port, DevMode);
// force reload of DEVMODE
Printer.SetPrinter(Device, Driver, Port, 0) ;
// get DEVMODE handle
Printer.GetPrinter(Device, Driver, Port, DevMode);
If Devmode <> 0 Then Begin
// lock it to get pointer to DEVMODE record
pDevMode := GlobalLock( Devmode );
If pDevmode <> Nil Then
try
With pDevmode^ Do Begin
// modify paper size
DEBUG('Old dmPapersize = ' + IntToStr(dmPapersize) );

if Unit2.ActiveAccount.clPaperSize = 0 then // Letter
dmPaperSize := DMPAPER_LETTER
else
dmPapersize := DMPAPER_A4;

DEBUG('New dmPapersize = ' + IntToStr(dmPapersize) );
// tell printer driver that dmPapersize field contains
// data it needs to inspect.
dmFields := dmFields or DM_PAPERSIZE;
End;
finally
// unlock devmode handle.
GlobalUnlock( Devmode );
end;
End; { If }

source: http://www.efg2.com/Lab/Library/UseNet/2000/0314.txt

Tuesday, April 7, 2009

[Delphi] I always forgot, the Exception

var
number1, number0 : Integer;
begin
try
number0 := 0;
number1 := 1;
number1 := number1 div number0;
ShowMessage('1 / 0 = '+IntToStr(number1));
except
on E : Exception do
begin
ShowMessage('Exception class name = '+E.ClassName);
ShowMessage('Exception message = '+E.Message);
end;
end;
end;

Monday, April 6, 2009

[Delphi] Using Ampersands inside Delphi

How can I make a Window control's text property contain an ampersand character?

Use two ampersand characters. The Windows default text handling for controls interprets a single Ampersand character as meaning the next character is a hot key. Example: Button .Caption := 'This && That';

Source: http://www.delphi32.com/info_facts/faq/faq_184.asp

Wednesday, January 21, 2009

[Java] Creating JTable from Resultset

import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import javax.swing.table.AbstractTableModel; 

public
class ResultTableModel extends AbstractTableModel {
      /**
       *
       */
      private static final long serialVersionUID = 1L;
      boolean DEBUG = false;
      private String[] columnNames;
      private Object[][] data;

      
public ResultTableModel(ResultSet rs, String[] columnNames) {
            ResultSetMetaData meta;
            if (rs != null) {
                  this.columnNames = columnNames;
                  try {
                        meta = rs.getMetaData();
                        int rowcount = 0, colcount = 0;
                        if (rs.last()) {
                              rowcount = rs.getRow();
                              rs.first();
                        }
                        colcount = meta.getColumnCount();
                        data = new Object[rowcount][colcount];
                        int i = 0;
                        do {
                              for (int j = 0; j < colcount; j++) {
                                    data[i][j] = rs.getObject(j + 1);
                              }
                              i++;
                        } while (rs.next());
                  } catch (SQLException e) {
                        e.printStackTrace();
                  }
            }
      }

      
public int getColumnCount() {
            return columnNames.length;
      }

      
public int getRowCount() {
            return data.length;
      }

      
public String getColumnName(final int col) {
            return columnNames[col];
      }

      
public Object getValueAt(final int row, final int col) {
            return data[row][col];
      }

      
/*
       * JTable uses this method to determine the default renderer/ editor for
       * each cell. If we didn't implement this method, then the last column would
       * contain text ("true"/"false"), rather than a check box.
       */
      public Class getColumnClass(final int c) {
            return getValueAt(0, c).getClass();
      }

      
/*
       * Don't need to implement this method unless your table's editable.
       */
      public boolean isCellEditable(final int row, final int col) {
            // Note that the data/cell address is constant,
            // no matter where the cell appears onscreen.
            if (col < 2) {
                  return false;
            } else {
                  return true;
            }
      }

      
/*
       * Don't need to implement this method unless your table's data can change.
       */
      public void setValueAt(final Object value, final int row, final int col) {
            data[row][col] = value;
            fireTableCellUpdated(row, col);
      }
}

Monday, January 12, 2009

[Delphi] String Split

function TForm1.Split(s:String): TStringList;
var
sl : TStringList;
i : Integer;
tmp : String;
begin
sl := TStringList.Create;
for i := 1 to Length(s) do
begin
if s[i] <> ',' then
begin
if s[i] <> '"' then // skip "
begin
tmp := tmp + s[i];
end;
end else
begin
sl.Add(tmp);
tmp := '';
end;
end;
sl.Add(tmp);
Result := sl;
end;