サイトカレンダー

サイトカレンダーをスキップ

2018年 01月
«
»
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31

記事カテゴリ

ユーザー機能


 2018年1月22日(月) 01:13 JST

[Delphi] ショートカット作成&情報取得

  • 記事を友だちにメール
  • 印刷用ページ
  • 2010年9月26日(日) 19:56 JST
  • 投稿者:
  • 表示回数
    1,976

客先でショートカットの内容を判断して書き換える必要に迫られまして・・・
同じようなアプリを置き換えるときに探してショートカットも置き換えてねと…
よく考えたらExcelからOpenOfficeに変えてもExcelにドキュメントを引数で渡すようなショートカットでなく、素直にドキュメントへのショートカットを作っておけば対応できるアプリが普通に対応してくれるんですけどね。

と愚痴っても仕方がないので、まずは一般的なショートカットの作成方法

uses に ActiveX, ComObj, ShlObj を追加する必要があるので忘れず追加!

/// ショートカットの作成
/// ショートカットのファイル名
/// コマンドライン文字列(ファイル名)
/// コマンドライン文字列(引数)
/// 作業場所文字列(引数)
/// 説明文字列
function CreateShortCut(const ShortcutPath: String;
                        const ExecFilePath: String;
                        const Params: String;
                        const WorkingDir: String = '';
                        const Description: String = ''): Boolean;
var
  ShellLink: IShellLink;
  PersistFile: IPersistFile;
{$IFDEF Unicode}
  FileName: String;
{$ELSE}
  FileName: WideString;
{$ENDIF}
begin
  // Create shell link object
  // Get IShellLink/IPersistent inferface
  ShellLink := CreateComObject(CLSID_ShellLink) as IShellLink;
  PersistFile := ShellLink as IPersistFile;
  // Set path to shell link 
  ShellLink.SetPath(PChar(ExecFilePath));

  // Set arguments to shell link
  ShellLink.SetArguments(PChar(Params));

  // Set description string
  ShellLink.SetDescription(PChar(Description));

  // Set working directory
  ShellLink.SetWorkingDirectory(PChar(WorkingDir));

  // Set location (path and index) of the icon
  ShellLink.SetIconLocation(PChar(ExecFilePath), 0);

  // Save to file
  FileName := ShortcutPath;
{$IFDEF Unicode}  
  Result := Succeeded(PersistFile.Save(PChar(FileName), True));
{$ELSE}
  Result := Succeeded(PersistFile.Save(PWChar(FileName), True));
{$ENDIF}
end;

DBGridのカラムをクリックでソート

  • 記事を友だちにメール
  • 印刷用ページ
  • 2010年9月20日(月) 19:01 JST
  • 投稿者:
  • 表示回数
    2,582

先日、お客様にExcelのように任意の順番でソートできないの?って聞かれました。
なので、「DBGridのカラムをクリックした時にソートの順序を指定するようにプログラムすれば出来るので、その方向で進めますね~。」って話をしていたら、それって毎回データベースを読みに行くの?Delphiってキャッシュできるんでしょ?と言われてキャッシュしてても操作できないよな~と思いつつ…。今思い出す限り出来ないですね~><;また調べておきます~。って返答しちゃいました。

TQueryでは出来ないのですが、TTableやMIDASのTClientDataSetを利用すると出来ちゃうんですね。

※MIDASを利用して多層アプリケーションを構築するとMIDASライセンスが別途必要ですが、クライアントにTClientDataSetを配置する2層アプリケーションでは不要でした。(2010やXEではMIDASライセンスって要らないらしいですね。)

[Delphi] OSのバージョン取得

  • 記事を友だちにメール
  • 印刷用ページ
  • 2010年9月11日(土) 09:42 JST
  • 投稿者:
  • 表示回数
    1,592

昔から思っていたこと。

気づくまでは、GetVersionEx APIを使うのが普通だと思っていた。まあ、それが普通なんでしょうが…
Delphiでは各バージョンに共通なもっと楽に取得できる方法があるのである。
まあ、Delphiが自身のためにGetVersionExを発行していてその結果をもらってくると言う感じなのだが

[Delphi] Paradoxでサブクエリーが使えない

  • 記事を友だちにメール
  • 印刷用ページ
  • 2008年11月 7日(金) 09:50 JST
  • 投稿者:
  • 表示回数
    2,244

下記のようなSQLを発行しようとしたところ、2つ目のSELECTが不正だとエラーが出て実行できません。
どうやら、Paradoxではサブクエリー(副問い合わせ)が出来ないようです。

回避方法はありませんか?

SELECT A.KeyField, A.FieldA1, Sub.CNT FROM TableA A
LEFT JOIN (SELECT KeyField, COUNT(*) AS CNT FROM TableB GROUP BY KeyField) Sub
 ON A.KeyField = Sub.KeyField

[Delphi] フォームの管理を多少楽にする

  • 記事を友だちにメール
  • 印刷用ページ
  • 2008年10月23日(木) 17:44 JST
  • 投稿者:
  • 表示回数
    4,791

くろねこがアプリを作るときには、フォームは毎回生成して破棄するタイプにすることにしている。
基本的に自動生成は使わない。自動生成する対象は、最初に使用するメインフォームとメインのデータモジュールだけと言う構成である。

通常のフォームの表示の場合...

with TXxxFrom.Create(Self) do
  try
    Show;
  finally
  end;

ダイアログフォームの表示の場合...

with TXxxFrom.Create(Self) do
  try
    ShowModal;
  finally
    // 処理内容...
    Release;
  end;

新着情報

記事 新着(24時間)

-

コメント 新着(2日)

-

トラックバック 新着(2日)

-

リンク 新着(2週)

新しいリンクはありません

ファイル (14日)