フォーラム


ゲスト  

ようこそ ゲスト さん。このフォーラムに投稿するには 登録が必要です。

ページ: [1]
トピック: Win32 API by Object Pascal of Delphi (Halbow資料館)
DEKO
管理者
投稿数: 2616
Win32 API by Object Pascal of Delphi (Halbow資料館)
on: 2013/04/04 20:17 Thu

Windows の話はこちらが参考になります。

[Win32 API by Object Pascal of Delphi (Halbow資料館)]
http://mrxray.on.coocan.jp/Halbow/

Mr.XRAY
メンバー
投稿数: 192
Re: Win32 API by Object Pascal of Delphi (Halbow資料館)
on: 2013/04/29 20:08 Mon

Halbow 資料館のサンプルは,Delphi 3 から Delphi 5 のコードです.
Windows 98 から Windows 2000 の時代のものです.
Delphi 2009 以降で使用するには,文字列関係で修正が必要なコードがあります.
その 1 つの例です.

[第5章 文字列の操作] [5-1 部分文字列を数える]
http://mrxray.on.coocan.jp/Halbow/VCL05.html#VChap5-1

というのがあります.このコードは,以下のように,文字単位で操作するコードにすれば,動作します.
UniCode では,原則,文字列は,文字単位で処理します.

//-----------------------------------------------------------------------------
// 文字列検索関数
// Halbow資料館の同名関数をUnicode化
//
// 引数
// Str : この文字列の中を検索する
// SubStr : 検索文字列
// 戻り値 : 検索数
//
// StrEnd(SysUtils.pas) は,ヌルで終わる文字列の末尾を指すポインタを返す関数
//-----------------------------------------------------------------------------
function HowManyWords(const Str, SubStr: string):Integer;
var
PStr : PChar;
PSubStr : PChar;
L : Integer;
PStrEnd : PChar;
begin
Result := 0;
L := Length(SubStr);
if L = 0 then exit;

PStr := @Str[1];
PSubStr := @SubStr[1];
PStrEnd := StrEnd(PStr);

while PStrEnd > PStr do begin
if StrLIComp(PStr, PSubStr, L) = 0 then begin
//見つかったら検索文字数だけ次へ
Inc(result);
Inc(PStr, L);
end else begin
//見つからなかったら1文字だけ次へ
Inc(PStr, 1);
end;
Application.ProcessMessages;
end;
end;

  
Habow 資料館の文字列関係のサンプルについては,以下も参考にしてください.
[955] [12_任意のデリミタによる文字列の分離]
http://mrxray.on.coocan.jp/Delphi/plSamples/955_SearchStr2_Halbow.htm#12

Mr.XRAY
メンバー
投稿数: 192
Re: Win32 API by Object Pascal of Delphi (Halbow資料館)
on: 2013/04/29 20:23 Mon

同じく文字列関係です.
[第23章 ダイアログボックスの研究 その1] の [23-5 モーダルダイアログクラス]
http://mrxray.on.coocan.jp/Halbow/Chap23.html#Chap23-5
のプロジェクトをコンパイルすると,

[DCC エラー] APIControl.pas(1999): E2008 互換性の無い型です

  
というエラーが発生します.これは,APIControl.pas 内のコードを以下のように修正します.

  XXXX := '['+Vol+']';   
XXXX := '[' +String(Vol)+']'; // String型でキャストする

  

Mr.XRAY
メンバー
投稿数: 192
Re: Win32 API by Object Pascal of Delphi (Halbow資料館)
on: 2013/04/29 20:52 Mon

Delphi XE2 以降で,ターゲットプラットフォームを 64 ビットとした場合です.
前と同じく,
[第23章 ダイアログボックスの研究 その1] の [23-5 モーダルダイアログクラス]
http://mrxray.on.coocan.jp/Halbow/Chap23.html#Chap23-5
のプロジェクトをコンパイルしてみると,

[DCC 警告] APIWindow.pas(321): W1012 定数式が範囲を越えました

 
という警告が発生します.
この場合は,該当する変数の定義を, Integer 型から NativeInt 型に変更することで対応できます. 
 

ページ: [1]
WP Forum Server by ForumPress | LucidCrew
バージョン: 1.7.5 ; ページロード: 0.047 sec.