こんにちは ピタゴラスの定理です
また教えて頂きたく質問します。
あるEditに特定の分類された言葉を入れたく、
Popupを使うのが1つの案と思われますが
クリックした文字を取得するには
どの様にコードを書けば宜しいでしょうか
又動的にアイテム追加する方法も御指示下さい。
上記以外によい別案が有りましたら
ご指導願います。
尚会社の仕事が忙しくなりそうですので、
レスが遅くなると思いますが宜しくお願いいたします。
例)入力したい文字
小学校−××小学校
−○○小学校
・
・
高等学校−◇◇学校
−◎◎学校
・
・
××××−
××××−
procedure TForm1.LabeledEdit4MouseMove(Sender: TObject; Shift: TShiftState;X, Y: Integer);
begin
PopupMenu1.Popup(LabeledEdit4.ClientOrigin.X+70,
LabeledEdit4.ClientOrigin.Y + LabeledEdit4.Height);
//ShowMessage(PopupMenu1.Items.Caption);
↑これでは所得出来ませんでした
end;
PopupMenuのクリックイベントで取得では?
deldel様 早々のレス有り難うございます。
>PopupMenuのクリックイベントで取得では?
ですが、全てのアイテムのクリックイベントに
コードを書かなくてはいけないのでしょうか。
もう少しスマートは方法は無いのでしょうか?
引き続き宜しくお願いいたします。
直接の回答ではありませんが
https://www.petitmonte.com/bbs/answers?question_id=4231
igyさんの 2006/09/19(火) 13:10:53 のコメント参照
ぬこ様 レス有り難うございます
私欲を出しまして、最終的に下記の様な事がにしたいのですが、
まず未定義の識別子:'Self'で怒られました。
他にも間違えが有るかと思いますが
ご指導のほどお願いいたします。
//http://www.moonlight.gr.jp/~el/delphi/news/00000010.html
//TMenuItemをCreateしてPopupMenuにAddします。
procedure PopupItem_Add(Sender: TObject);
var
newMenuItem: TMenuItem;
begin
newMenuItem := TMenuItem.Create(Self); //メニュー項目作成
newMenuItem.Caption := 'New'; //Caption設定
newMenuItem.OnClick := MenuItem1Click; //OnClickイベントを関連づけ
PopupMenu1.Items.Add(NewMenuItem); //PopupMenu1に追加
end;
procedure TForm1.MenuItem1Click(Sender: TObject);
begin
Form1.LabeledEdit4.Text := PopupMenu1.newMenuItem.Caption;
end;
(*
procedure TForm1.hhhh1Click(Sender: TObject);
begin
Form1.LabeledEdit4.Text := PopupMenu1.Items.Caption;
end;
*)
procedure TForm1.LabeledEdit4MouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
begin
PopupItem_Add //とりあえずここでAdd
PopupMenu1.Popup(LabeledEdit4.ClientOrigin.X+70,
LabeledEdit4.ClientOrigin.Y + LabeledEdit4.Height);
end;
Self の意味わかってる?
PopupMenu1 も、未定義の識別子にならない?
PopupItem_Addを、Form1のメソッドにすること。
type
TForm1 = class(TForm)
private
{ Private 宣言 }
public
procedure PopupItem_Add(Sender: TObject);
end;
procedure TForm1.PopupItem_Add(Sender: TObject);
var
〜
ぬこ様 レス有り難うございます
>Self の意味わかってる?
自分自身と言う事と認識しています
それ以上は解りません。
ぬこ さんの通り下記に宣言しても
解消されません
public
{ Public 宣言 }
procedure PopupItem_Add(Sender: TObject);
procedure MenuItem1Click(Sender: TObject);
end;
>解消されません
具体的には、コンパイル時にどのようなエラーが表示するのですか?
ぬこ さんがと書かれているように
>procedure TForm1.PopupItem_Add(Sender: TObject);
TForm1. を PopupItem_Add の前に付けてますか?
igy 様 レス有り難うございます
>TForm1. を PopupItem_Add の前に付けてますか?
はい付けてませんでした。付けることによって前え進みました
そこで次のエラーが出ました
procedure TForm1.LabeledEdit4MouseMove(Sender: TObject;
Shift: TShiftState;X, Y: Integer);
begin
Form1.PopupItem_Add //とりあえずここでAdd
PopupMenu1.Popup(LabeledEdit4.ClientOrigin.X+70,
LabeledEdit4.ClientOrigin.Y + LabeledEdit4.Height);
end;
※beginのところで、識別子の多重定義'TForm1.LabeledEdit4MouseMove'
とエラーがでます。私には見当が付きません。
どなたかご指導下さい。
自己レスです
すいません上記のエラーは判りました。
二重にコードを書いていました。
まだエラーが出る様ですので、改めて質問させて
頂きます。
こんにちは
ひとつは
PopupItem_Addという処理を
TForm1に持たせるか、持たせないか
ということを理解されると
一段階レベルアップすると思います。
もう一つは
(Sender: TObject)は必ず付けなければならない
ものでもないので適宜選んでください。
もうひとつは
procedure TForm1.MenuItem1Click(Sender: TObject);
begin
Form1.LabeledEdit4.Text := PopupMenu1.newMenuItem.Caption;
end;
この場合のForm1はSelfと同じなので
Self.LabeledEdit4.Text := ...
とするか、Selfを省略する方が綺麗なコードになります。
SelfやSenderについてより調べると上達しますよ。
がんばってください。
Fusa様 暖かいお言葉有り難うございます。
ここ1週間ぐらい、会社の方が
忙しくなりましたので、検証及び試行錯誤の
作業はその後となります。
とりあえずはお礼のレスといたします。
とりあえず、
使ってるコンポーネントを教えてもらえませんか?
標準&非DBコンポーネントならお答えします。
もにゃ様へ
>とりあえず、
>使ってるコンポーネントを教えてもらえませんか?
(あるEditに)→標準LabeleEdit
とりあえずの返事です
これで宜しいでしょうか
会話のやり取りをみると、入門書を読むところから始めた方がいい気がします。self,Sender等は基本事項ですので入門書を読んで理解してください。
コンポーネントについても標準LabeleEditなんてものは存在しません。
技術系のBBSで会話をするなら正しい用語を使ってくださいね。
厳しいかもしれませんが、ここである程度以上の回答をしている人たちは、例外なく入門書かヘルプを読んでいると思います。
今回の例は上の人たちが言っていることの実現方法の一例です。
書き方しだいで応用範囲はいくらでも広くなります。
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, StdCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
PopupMenu1: TPopupMenu;
test1: TMenuItem; //PopupMenu1の子
procedure FormCreate(Sender: TObject);
private
{ Private 宣言 }
procedure LabelContextPopup(Sender: TObject; MousePos: TPoint;
var Handled: Boolean);
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var
i:Integer;
aLabel:TLabel;
begin
for i:=1 to 9 do
begin
//オブジェクトインスペクタで貼り付けたラベルを探す
aLabel:=TLabel(FindComponent('Label'+IntToStr(i)));
//各オブジェクトにパラメータを設定
aLabel.PopupMenu := PopupMenu1; //同じpopupを割り当てる(必ずしも同じ必要は無い)
aLabel.Caption:=FloatToStr(Random);
//各オブジェクトにイベントを設定
aLabel.OnContextPopup:= LabelContextPopup;
end;
end;
procedure TForm1.LabelContextPopup(Sender: TObject; MousePos: TPoint;
var Handled: Boolean);
begin
//送り主(TLabel)に登録されたPopupMenuの子のcaption =
//送り主(TLabel)のCaptionという意味
TLabel(Sender).PopupMenu.Items[0].Caption:=TLabel(Sender).Caption;
end;
end.
ツイート | ![]() |