フリーソフト

Delphi

[C++Builder,Delphi] デバッグウインドウにメッセージを表示する

OutputDebugString 関数を使うとIDEのデバッグ画面にメッセージを表示することができます。スレッドのデバッグなどに有効です。

[BCB/Delphi] 再描画に関するメソッド

再描画に関連するメソッド

・Invalidate
  再描画が必要であることを宣言します。実際の再描画は適当なタイミングで実施されます。

・Update
  Invalidateなどで保留中の再描画を強制的に実施します。

・Repaint
  Invalidateを呼び出した後、Updateを呼び出します。強制的に再描画します。

・Refresh
  Repaintと同じです。

[BCB,Delphi] RGBとHLSの変換

#include <GraphUtil.hpp>

void __fastcall ColorRGBToHLS(unsigned clrRGB, Word &Hue, Word &Luminance, Word &Saturation);

unsigned __fastcall ColorHLSToRGB(Word Hue, Word Luminance, Word Saturation);

[Delphi] 「デスクトップの表示」や「Windows+D」でも最小化されないウインドウの作り方

「デスクトップの表示」や「Windows+D」でも最小化されないウインドウの作り方

constructor TForm1.Create(AOwner: TComponent);
var
  ProgmanHwnd: THandle;
begin
  inherited;
  ProgmanHwnd:=FindWindow('Progman','Program Manager');
  if ProgmanHwnd<>0 then
  begin
    ParentWindow:= ProgmanHwnd;
  end;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
    //前面に表示する
    SetZOrder( True);
end;

[Delphi,BCB] アイコンリソースを追加したらアプリのアイコンが変わった!

rcファイルを使ってアイコンリソースをEXEファイルに埋め込んだときに、アプリケーションのメインアイコンが変わってしまうことがあります。これは、Delphi,BCBはリソース名でリソースを並び替えてしまうためにおきる問題です。

解決策としては、Delphi,BCBではメインアイコンをMAINICONの名前で保持していますので、ソートした時に、これよりも後に来るような名前を付けます。例えば、

OREICON  ICON  "aaa.ico"

のような感じです。MよりもOの方がアルファベット順が後になります。

[Delphi] マウスホイールに対応する

type
  TForm1 = class(TForm)
  private
   procedure WMMousewheel(var Msg: TMessage); message WM_MOUSEWHEEL;
        :

implemetation

procedure TForm1.WMMousewheel(var Msg: TMessage);
begin
 if (Msg.WParam > 0) then begin
    //奥の方向にホイール
  Sendmessage(○○.Handle, WM_VSCROLL, SB_LINEUP, 0); //or SB_PAGEUP
 end
  else
  begin
    //手前の方向にホイール
  Sendmessage(○○.Handle, WM_VSCROLL, SB_LINEDOWN, 0); //or SB_PAGEDOWN
 end;
end;

[Delphi,BCB] StrToIntで例外が発生するのがめんどくさい

StrToIntは文字列を数字に変換するための関数ですが、引数に数字として不正な文字列(例えば「125a」とか)を渡すと例外が発生してしまいます。これをきちんと処理するのが面倒だったり、単純に不正な文字列が渡された場合は-1を返してほしいと思う場合があったりします。そういう時に便利なのがStrToIntDefという関数です。

i:=StrToIntDef(Edit1.Text,-1);

というようにデフォルト値を指定して変換ができます。変換に失敗した場合はデフォルト値が返される仕組みです。例外は発生しません。場合によっては非常に便利な関数です。

[Delphi/BCB] manifestファイルをexeに埋め込む

manifestファイルの書き方はこちらを参照してください。

作成したmanifestファイルをexeファイルにリソースとして埋め込む方法です。

#define CREATEPROCESS_MANIFEST_RESOURCE_ID 1
#define CONTROL_PANEL_RESOURCE_ID 123
#define RT_MANIFEST 24
CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "○○.exe.manifest"

これをmanifest.rcというようなファイル名で保存します。なお上記の○○の部分には実行ファイルの名前を書きます。「プロジェクト」-「プロジェクトに追加」で作成したrcファイルをプロジェクトに追加します。

これでコンパイルすればOKです。

[Delphi] 独自のリソースを使う

リソースをテキストエディタなど作成して「tmp.rc」というような名前で保存します。そのファイルをプロジェクトに追加してコンパイルします。rcファイルをBRCC32でコンパイルしてresファイルに変換しなくてもOKです。

リソースファイル(*.rc)の中身は

リソース名  リソースタイプ  "ファイル名"

のように書きます。例えば、

MYICON  ICON  "MyIcon.ico"
MYBMP  BITMAP  "MyBmp.bmp"

のようです。

[Delphi] 画面をキャプチャする

procedure TScreenSaverForm.FormCreate(Sender: TObject);
var
  dc:hdc;
begin
  //キャプチャ
  Image1.Picture.Bitmap.width:=screen.Width;
  Image1.Picture.Bitmap.height:=screen.Height;

  dc:=GetDC(0);
  BitBlt(Image1.Picture.Bitmap.Canvas.Handle,0,0,
           Image1.Picture.Bitmap.Width,Image1.Picture.Bitmap.Height,
           dc,0,0,SRCCOPY);
  ReleaseDC(0,dc);
end;

より以前の記事一覧