お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル

"フォーム.dllから多次元配列の受け渡し"



はじめの2ファイルが、.DLLを構成するファイルです。
最後のファイルが、.DLLを呼び出している通常のプログラムです。
.DLLと通常のプログラムは、別々に作成します。そして、同一のフォルダーに置いて使
用します。
.DLLの画面でタイプした文字列が多次元配列に収められ、通常のプログラムのイベント
ハンドラに渡ります。

Library Fdll;

{
   Entry  Date  :  1999.11.03.
   Update       :  2000.1.14.
   Creator      :  Takehana,Tadashi
}


uses
{ ShareMem, }
  SysUtils,
  Classes,
  Fttl in 'e:\tonifdll\Fttl.pas' {Fmttl};

Exports
   Fdatttl;
begin
end.


///////////////////////////////////////

unit Fttl;
{
   Entry  Date  :  1999.11.03.
   Update       :  2000.1.14.
   Creator      :  Takehana,Tadashi
}

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Buttons, ExtCtrls;

type
  TFmttl = class(TForm)
    Panel1: TPanel;
    SpeedButton1: TSpeedButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    procedure SpeedButton1Click(Sender: TObject);
    procedure Edit1KeyPress(Sender: TObject; var Key: Char);
    procedure Edit2KeyPress(Sender: TObject; var Key: Char);
    procedure Edit3KeyPress(Sender: TObject; var Key: Char);
    procedure Edit4KeyPress(Sender: TObject; var Key: Char);
    procedure Edit5KeyPress(Sender: TObject; var Key: Char);
  private
    { Private 宣言 }
  public
    { Public 宣言 }
  end;


type
  reco5 = record

    ss    :  array[0..1,0..5,0..300] of Char;

  end;

procedure Fdatttl(var ttlrec:reco5);export;

var
  Fmttl: TFmttl;

implementation

var
  gss    :  array[0..1,0..5,0..300] of Char;
  gsize  :  array[0..1,0..5] of Integer;

{$R *.DFM}

procedure Fdatttl(var ttlrec:reco5);
begin

  Fmttl := TFmttl.Create(Application);
  Fmttl.ShowModal;
  Fmttl.Free;

  strcopy(ttlrec.ss[0][0],gss[0][0]);
  strcopy(ttlrec.ss[0][1],gss[0][1]);
  strcopy(ttlrec.ss[0][2],gss[0][2]);
  strcopy(ttlrec.ss[0][3],gss[0][3]);
  strcopy(ttlrec.ss[0][4],gss[0][4]);
  strcopy(ttlrec.ss[0][5],gss[0][5]);

end;

  
procedure TFmttl.SpeedButton1Click(Sender: TObject);
begin
  
  gss[0][0] := #0;
  gss[0][1] := #0;
  gss[0][2] := #0;
  gss[0][3] := #0;
  gss[0][4] := #0;
  gss[0][5] := #0;

  gsize[0][0] := 0;
  gsize[0][1] := 0;
  gsize[0][2] := 0;
  gsize[0][3] := 0;
  gsize[0][4] := 0;
  gsize[0][5] := 0;

  gsize[0][0] := length(edit1.text);
  if gsize[0][0] = 0 then
    begin
      //data nothing !
      gss[0][0] := #0;
      modalresult := -1;
      exit;
    end;
  strcopy(gss[0][0],pchar(edit1.text));



  gsize[0][1] := length(edit2.text);
  if gsize[0][1] = 0 then
    begin
      modalresult := 1;
      exit;
    end;
  strcopy(gss[0][1],pchar(edit2.text));



  gsize[0][2] := length(edit3.text);
  if gsize[0][2] = 0 then
    begin
      modalresult := 1;
      exit;
    end;
  strcopy(gss[0][2],pchar(edit3.text));



  gsize[0][3] := length(edit4.text);
  if gsize[0][3] = 0 then
    begin
      modalresult := 1;
      exit;
    end;
  strcopy(gss[0][3],pchar(edit4.text));



  gsize[0][4] := length(edit5.text);
  if gsize[0][4] = 0 then
    begin
      modalresult := 1;
      exit;
    end;
  strcopy(gss[0][4],pchar(edit5.text));

  modalresult := 1;
end;


procedure TFmttl.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  if Key = #13 then Edit2.SetFocus;

end;

procedure TFmttl.Edit2KeyPress(Sender: TObject; var Key: Char);
begin
  if Key = #13 then Edit3.SetFocus;

end;

procedure TFmttl.Edit3KeyPress(Sender: TObject; var Key: Char);
begin
  if Key = #13 then Edit4.SetFocus;

end;

procedure TFmttl.Edit4KeyPress(Sender: TObject; var Key: Char);
begin
  if Key = #13 then Edit5.SetFocus;

end;

procedure TFmttl.Edit5KeyPress(Sender: TObject; var Key: Char);
begin
  if Key = #13 then Edit1.SetFocus;

end;


end.


////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////

unit hivlm;

//
//  Update    :  2000.1.14.
//  Version   :  1.00.
//  Creator   :  Takehana,Tadashi
//

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Buttons, ExtCtrls, StdCtrls, FileCtrl;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private

    { Private 宣言 }
  public

    { Public 宣言 }
  end;

const
 STRMAX  = 300;

type
  reco5 = record

    ss    :  array[0..1,0..5,0..STRMAX] of Char;
    
  end;

var
  Form1: TForm1;
  
  ttlrec  :  reco5;

implementation

{$R *.DFM}

procedure Fdatttl(var ttlrec:reco5);external'Fdll.dll';



procedure TForm1.Button1Click(Sender: TObject);
begin
  Fdatttl(ttlrec);

  ShowMessage('ss[0][0] = '+ttlrec.ss[0][0]+#13#10+'ss[0][1] = '+ttlrec.ss[0][
1]+#13#10+
              'ss[0][2] = '+ttlrec.ss[0][2]+#13#10+'ss[0][3] = '+ttlrec.ss[0][
3]+#13#10+
              'ss[0][4] = '+ttlrec.ss[0][4]);

end;

end.

Original document by 竹花 忠        氏 ID:(VZN00647)


ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。

Copyright 1996-2002 Delphi Users' Forum