Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.09.2010, 17:41   #1
AndreyFreeman
Пользователь
 
Регистрация: 09.09.2009
Сообщений: 18
Восклицание Конвертиция WideString в String [D2007]

Здравствуйте, друзья! Столкнулся с проблемой ковертации строки типа widestring в string. Работаю в delphi 2007, мне именно нужна Delphi 2007 ибо DirectX заголовочники не робят как надо под Delphi2009-2010. А с конвертицией я парюсь дабы прикрутить поддержку юникода для вывода текста под DirectX
AndreyFreeman вне форума Ответить с цитированием
Старый 18.09.2010, 17:43   #2
AndreyFreeman
Пользователь
 
Регистрация: 09.09.2009
Сообщений: 18
По умолчанию

Код:
program D3DTut9;

{$R *.res}

uses
  SysUtils,
  Direct3D9,
  Windows,
  DXUT,
  MainUnit in 'MainUnit.pas';

begin
  DXUTSetCallbackDeviceCreated(OnCreateDevice);
  DXUTSetCallbackDeviceReset(OnResetDevice);
  DXUTSetCallbackDeviceLost(OnLostDevice);
  DXUTSetCallbackDeviceDestroyed(OnDestroyDevice);
  DXUTSetCallbackMsgProc(MsgProc);
  DXUTSetCallbackFrameRender(OnFrameRender);
  DXUTSetCallbackFrameMove(OnFrameMove);

  // TODO: Perform any application-level initialization here

  DXUTInit(True, True, True);
  DXUTSetCursorSettings(True, True);
  DXUTCreateWindow('D3DTut9');
  DXUTCreateDevice(D3DADAPTER_DEFAULT, True, 800, 600, IsDeviceAcceptable, ModifyDeviceSettings);

  DXUTMainLoop;

  // TODO: Perform any application-level cleanup here

  ExitCode:= DXUTGetExitCode;

  DXUTFreeState;
end.
AndreyFreeman вне форума Ответить с цитированием
Старый 18.09.2010, 17:44   #3
AndreyFreeman
Пользователь
 
Регистрация: 09.09.2009
Сообщений: 18
По умолчанию

Код:
unit MainUnit;

interface

uses
  Windows, Messages, SysUtils, Types,
  DXTypes, Direct3D9, D3DX9,
  DXUT, DXUTcore, DXUTSettingsDlg, DXUTenum, DXUTmisc, DXUTgui;

function IsDeviceAcceptable(const pCaps: TD3DCaps9; AdapterFormat, BackBufferFormat: TD3DFormat; bWindowed: Boolean; pUserContext: Pointer): Boolean; stdcall;
function ModifyDeviceSettings(var pDeviceSettings: TDXUTDeviceSettings; const pCaps: TD3DCaps9; pUserContext: Pointer): Boolean; stdcall;
function OnCreateDevice(const pd3dDevice: IDirect3DDevice9; const pBackBufferSurfaceDesc: TD3DSurfaceDesc; pUserContext: Pointer): HRESULT; stdcall;
function OnResetDevice(const pd3dDevice: IDirect3DDevice9; const pBackBufferSurfaceDesc: TD3DSurfaceDesc; pUserContext: Pointer): HRESULT; stdcall;
procedure OnFrameMove(const pd3dDevice: IDirect3DDevice9; fTime: Double; fElapsedTime: Single; pUserContext: Pointer); stdcall;
procedure OnFrameRender(const pd3dDevice: IDirect3DDevice9; fTime: Double; fElapsedTime: Single; pUserContext: Pointer); stdcall;
function MsgProc(hWnd: HWND; uMsg: LongWord; wParam: WPARAM; lParam: LPARAM; out pbNoFurtherProcessing: Boolean; pUserContext: Pointer): LRESULT; stdcall;
procedure OnLostDevice(pUserContext: Pointer); stdcall;
procedure OnDestroyDevice(pUserContext: Pointer); stdcall;

implementation

var
  TahomaFont: ID3DXFont;
  TahomaBoldFont: ID3DXFont;
  TimesNewRomanFont: ID3DXFont;

function IsDeviceAcceptable(const pCaps: TD3DCaps9; AdapterFormat, BackBufferFormat: TD3DFormat; bWindowed: Boolean; pUserContext: Pointer): Boolean; stdcall;
begin
  Result:= True;
end;

function ModifyDeviceSettings(var pDeviceSettings: TDXUTDeviceSettings; const pCaps: TD3DCaps9; pUserContext: Pointer): Boolean; stdcall;
begin
  Result:= True;
  pDeviceSettings.pp.BackBufferWidth := 800;
  pDeviceSettings.pp.BackBufferHeight := 600;
end;

function OnCreateDevice(const pd3dDevice: IDirect3DDevice9; const pBackBufferSurfaceDesc: TD3DSurfaceDesc; pUserContext: Pointer): HRESULT; stdcall;
begin
  Result := D3DXCreateFont
    (pd3dDevice, -12, 0, FW_DONTCARE, 1, FALSE,
     DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, DEFAULT_QUALITY,
     DEFAULT_PITCH or FF_DONTCARE, 'Calibri', TahomaFont);

  if FAILED(RESULT) then
    Exit;

  Result := D3DXCreateFont
    (pd3dDevice, -40, 0, FW_BOLD, 1, FALSE,
     DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, DEFAULT_QUALITY,
     DEFAULT_PITCH or FF_DONTCARE, 'Calibri', TahomaBoldFont);

  if FAILED(RESULT) then
    Exit;

  Result := D3DXCreateFont
    (pd3dDevice, -20, 0, FW_DONTCARE, 1, FALSE,
     DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, DEFAULT_QUALITY,
     DEFAULT_PITCH or FF_DONTCARE, 'Calibri', TimesNewRomanFont);
end;

function OnResetDevice(const pd3dDevice: IDirect3DDevice9; const pBackBufferSurfaceDesc: TD3DSurfaceDesc; pUserContext: Pointer): HRESULT; stdcall;
begin
  TahomaFont.OnResetDevice;
  TahomaBoldFont.OnResetDevice;
  TimesNewRomanFont.OnResetDevice;
  Result := S_OK;
end;

var
  XPos: Single;

procedure OnFrameMove(const pd3dDevice: IDirect3DDevice9; fTime: Double; fElapsedTime: Single; pUserContext: Pointer); stdcall;
begin
  XPos := Sin(fTime) * 300;
end;

procedure OnFrameRender(const pd3dDevice: IDirect3DDevice9; fTime: Double; fElapsedTime: Single; pUserContext: Pointer); stdcall;
var
  R: TRect;
  S: String;
  wstring: WideString;
begin
  wstring:='Γεια σας';
  pd3dDevice.Clear(0, nil, D3DCLEAR_TARGET or D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(0, 0, 0), 1.0, 0);

  if SUCCEEDED(pd3dDevice.BeginScene) then
  begin
    R := Rect(8, 8, 0, 0);
    S := 'Раз.' + #13#10 +
      'Два.';
    TahomaFont.DrawTextA(nil, PChar(S), Length(S), @R, DT_NOCLIP, $FF00FF00);

    R := Rect(8, 50, 400, 100);
    S := 'Зелёный текст сверху.' + #13#10 +
      'И ещё одна строка';
    TahomaFont.DrawTextA(nil, PChar(S), Length(S), @R, 0, $FF00FF00);

    R := Rect(0, 0, 800, 600);
    S := 'Синий текст посередине';
    TahomaBoldFont.DrawTextA(nil, PChar(S), Length(S), @R, DT_CENTER or DT_VCENTER, $FF0000FF);

    R := Rect(0 + Round(XPos), 500, 800 + Round(XPos), 600);
    S := String(wstring); // как ??
    TimesNewRomanFont.DrawTextA(nil, PChar(S), Length(S), @R, DT_CENTER, $FFFF0000);

    pd3dDevice.EndScene;
  end;
end;

function MsgProc(hWnd: HWND; uMsg: LongWord; wParam: WPARAM; lParam: LPARAM; out pbNoFurtherProcessing: Boolean; pUserContext: Pointer): LRESULT; stdcall;
begin
  Result := 0;
end;

procedure OnLostDevice; stdcall;
begin
  TahomaFont.OnLostDevice;
  TahomaBoldFont.OnLostDevice;
  TimesNewRomanFont.OnLostDevice;
end;

procedure OnDestroyDevice; stdcall;
begin
  TahomaFont := nil;
  TahomaBoldFont := nil;
  TimesNewRomanFont := nil;
end;

end.
AndreyFreeman вне форума Ответить с цитированием
Старый 18.09.2010, 17:47   #4
AndreyFreeman
Пользователь
 
Регистрация: 09.09.2009
Сообщений: 18
По умолчанию

Для компиляции надо заголвочники с clootie.ru
AndreyFreeman вне форума Ответить с цитированием
Старый 18.09.2010, 17:49   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
ибо DirectX заголовочники не робят как надо под Delphi2009-2010.
Почему? Недавно я кому-то правил дириксовский компонент, в 2010ке - и все работало как полагается.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.09.2010, 17:51   #6
AndreyFreeman
Пользователь
 
Регистрация: 09.09.2009
Сообщений: 18
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Почему? Недавно я кому-то правил дириксовский компонент, в 2010ке - и все работало как полагается.
Немогли бы Вы мне его отправить на mastergordon(@)mail.ru, или здесь прикрепить к сообщению ? Очень надо! Спасибо!

Последний раз редактировалось AndreyFreeman; 18.09.2010 в 19:11.
AndreyFreeman вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Pointer через Move в WideString проблема daemon-rm Помощь студентам 2 31.07.2010 19:37
Delphi 7 - скрытые возможности Unicode (WideString) BOBAH13 Общие вопросы Delphi 7 13.03.2009 08:40
Проблема в dbkdebugide100.bpl в D2007 TREY Общие вопросы Delphi 2 29.07.2008 12:24
Ищу компоненты D2007 Veiron Компоненты Delphi 1 25.05.2008 17:37
WideString и String Mitron Общие вопросы Delphi 1 11.02.2008 19:14