名前 題名 ▼ Mr.XRAYさん > ▼ TSさん > > TSさんがわからないものは私には分かりません。 > という振りはさておいて、コンボボックスの操作だけであれば特に共有メモリ > を使用する必要はありませんが、いかがでしょう。 > > > SendMessage(hStatusbar,XX_XXXXXX,i,LPARAM(CM.MemPtr)) > > lParamで共有メモリの情報を取得しなければ、あるいは取得可能なものは、 > 共有メモリの利用もいいかと思います。これについては、提示のHalbow資料館 > の解説も、共有メモリの使用例というポリシーで、Halbowさんも書いています。 > > コンボボックスの操作だけであれば、 > http://mrxray.on.coocan.jp/Delphi/plSetPrinter/OthesDialog.htm > が参考になると思います。年のため参考コードを以下に示します。 > ただし、HDD内の半整備のコードですのであしからず。 > > 受信側 > > unit ReceiverUnit; > > interface > > uses > Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, > StdCtrls; > > type > TReceivForm = class(TForm) > Edit1: TEdit; > Button1: TButton; > ComboBox1: TComboBox; > procedure FormCreate(Sender: TObject); > procedure Button1Click(Sender: TObject); > private > { Private 宣言 } > public > { Public 宣言 } > end; > > //送信側ではTReceivFormというクラス名のウィンドウに対して操作する > var > ReceivForm: TReceivForm; > > implementation > > {$R *.DFM} > > //============================================================================= > // 他のアプリから操作しやすいように,EditとComboBoxにID値を付けておく > // 当然であるが,Handleプロパティを持たないコントロールにはID値を付けられない > // Edit1のテキストを空にするのにEdit1:=''; ではなくEdit1.Text:=EmptyStr; を使 > // 用してみた。EmptyStrはSysUtilsにある > //============================================================================= > procedure TReceivForm.FormCreate(Sender: TObject); > begin > SetWindowLong(Edit1.Handle,GWL_ID,1000); > SetWindowLong(ComboBox1.Handle,GWL_ID,1100); > Edit1.Text:=EmptyStr; > ComboBox1.ItemIndex:=0; > end; > //============================================================================= > // テキストをクリア > //============================================================================= > procedure TReceivForm.Button1Click(Sender: TObject); > begin > Edit1.Clear; > end; > > > 送信側 > > unit SenderUnit; > > interface > > uses > Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, > StdCtrls, ExtCtrls; > > type > TSenderForm = class(TForm) > Button1: TButton; > Edit1: TEdit; > Panel1: TPanel; > Memo1: TMemo; > procedure Button1Click(Sender: TObject); > private > { Private 宣言 } > public > { Public 宣言 } > end; > > var > SenderForm: TSenderForm; > > implementation > > {$R *.DFM} > > //============================================================================= > // Button1をクリックすると > // ID値が1000のコントロールに文字列をセットする > // ID値が1100のコントロール(ここではコンボボックス)を操作 > //============================================================================= > procedure TSenderForm.Button1Click(Sender: TObject); > var > hWindow : HWND; > RevHandle : HWND; > PStr : PChar; > Str : String; > i : Integer; > Cnt : Integer; > Len : Integer; > begin > //受取る側のウィンドウハンドル > hWindow := FindWindow('TReceivForm',nil); > if hWindow<>0 then begin > //hWindowのID値が1000の子ウィンドウのハンドル > RevHandle:=GetDlgItem (hWindow,1000); > //そこにEdit1.Textを送る > SendMessage(RevHandle,WM_SETTEXT,0,LPARAM(PChar(Edit1.Text))); > > > Memo1.Lines.Clear; > //hWindowのID値が1100の子ウィンドウのハンドル > //ここではコンボボックス > RevHandle:=GetDlgItem (hWindow,1100); > //その項目数 > Cnt:=SendMessage(RevHandle,CB_GETCOUNT,0,0); > Panel1.Caption:='対象コンボボックスの項目数 : '+IntToStr(Cnt); > //削除の場合はdowntoで > for i:=Cnt-1 downto 0 do begin > //メモリ確保のために文字列の長さを取得 > Len:=SendMessage(RevHandle,CB_GETLBTEXTLEN,i,0); > GetMem(PStr,Len+1); > try > //i番目の項目の文字列を取得 > SendMessage(RevHandle,CB_GETLBTEXT,i,LongInt(PStr)); > Str:=PStr; > Memo1.Lines.Add(PStr); > finally > FreeMem(PStr); > end; > //対象コンボボックスのItemに東という文字が含まれてる場合は項目から削除 > if Pos('東',Str)<>0 then begin > SendMessage(RevHandle,CB_DELETESTRING,i,0); > if Cnt>2 then SendMessage(RevHandle,CB_SETCURSEL,1,0); > end; > end; > //対象コンボボックスの項目数を再取得 > //ここではわかりきっているが確認のため > Cnt:=SendMessage(RevHandle,CB_GETCOUNT,0,0); > Panel1.Caption:='対象コンボボックスの項目数 : '+IntToStr(Cnt); > end; > end; > > GIF,JPEG,PNG画像ファイル及びLZH,ZIPファイルをアップロードできます.600 x 1200 ピクセルを超える画像は縮小表示されます(画像クリックで拡大表示). (上限122000(120k)バイト) 削除キー Link