Thema: Delphi Farbwahl bei PALM

Einzelnen Beitrag anzeigen

Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#2

Re: Farbwahl bei PALM

  Alt 2. Apr 2004, 14:53
Hängt vom OS ab, da das OS lange Zeit garkeine Farben unterstützte.
Um es teilweise OS unabhängig zu machen habe ich mir folgende Routinen gecodet:

Delphi-Quellcode:
function CheckROMVersion(RequiredVersion: UInt32): Boolean;
var
  RomVersion: UInt32;
begin
  FtrGet(sysFtrCreator, sysFtrNumROMVersion, RomVersion);
  Result := RomVersion >= RequiredVersion;
end;

function WinSetFgColor(FgColor: IndexedColorType): IndexedColorType;
type
  TWinSetForeColor = function(foreColor: IndexedColorType): IndexedColorType;
var
  P: Pointer;
begin
  if CheckROMVersion($03503000) then
  begin
    P := SysGetTrapAddress(sysTrapWinSetForeColor);
    Result := TWinSetForeColor(P)(FgColor);
  end else Result := FgColor;
end;

function WinSetBkColor(BkColor: IndexedColorType): IndexedColorType;
type
  TWinSetBackColor = function(backColor: IndexedColorType): IndexedColorType;
var
  P: Pointer;
begin
  if CheckROMVersion($03503000) then
  begin
    P := SysGetTrapAddress(sysTrapWinSetBackColor);
    Result := TWinSetBackColor(P)(BkColor);
  end else Result := BkColor;
end;

function WinSetTxColor(TxColor: IndexedColorType): IndexedColorType;
type
  TWinSetTextColor = function(textColor: IndexedColorType): IndexedColorType;
var
  P: Pointer;
begin
  if CheckROMVersion($03503000) then
  begin
    P := SysGetTrapAddress(sysTrapWinSetTextColor);
    Result := TWinSetTextColor(P)(TxColor);
  end else Result := TxColor;
end;

function ColorIndex(ColorIndex: UIColorTableEntries): IndexedColorType;
type
  TUIColorGetTableEntryIndex = function(which: UIColorTableEntries): IndexedColorType;
var
  P: Pointer;
begin
  if CheckROMVersion($03503000) then
  begin
    P := SysGetTrapAddress(sysTrapUIColorGetTableEntryIndex);
    Result := TUIColorGetTableEntryIndex(P)(ColorIndex);
  end else Result := 0;
end;

procedure Test;
var
  C: IndexedColorType;
begin
  C := WinSetFgColor(ColorIndex(UIFieldTextLines));
  WinDrawGrayLine(0, 10, 160, 10);
  WinSetFgColor(C);
end;
Wie man sieht wird beim Palm OS von einem Object-Farbindex der in eine Object-Farb-Tabelle zeigt in einen Device-Farbindex der in eine Device-Farb-Tabelle zeigt in den realen Farbwert konvertiert. Also eigentlich ziemlich bescheuert.

Gruß Hagen
  Mit Zitat antworten Zitat