掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
リストボックス間のアイテムを線でつなぐには? (ID:41812)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
(2)のオブジェクトのポインタとういうのは語弊があったかも知れません。 単純に、何らかの値を保存することもできるということが言いたかったのです。 自分もスキルは足りてないですが、試しに書いてみました。 リストボックスを2つ配置しただけの簡単なものなので、どこまで要求に 答えられているかわかりませんが... // メインフォームのOnCreateイベント procedure TForm1.FormCreate(Sender: TObject); var i: Integer; begin ListBox1.Items.Clear; ListBox2.Items.Clear; for i := 0 to 9 do begin ListBox1.Items.AddObject('Item1-'+IntToStr(i), TObject(9-i)); ListBox2.Items.Add('Item1-'+IntToStr(i)); end; ListBox1.Height := (ListBox1.ItemHeight)*5+4; ListBox2.Height := (ListBox2.ItemHeight)*5+4; ListBox1.ItemIndex := 0; ListBox2.ItemIndex := 0; end; // メインフォームのOnPaintイベント procedure TForm1.FormPaint(Sender: TObject); var rc: TRect; pt0, pt1, pt: TPoint; begin rc := ListBox1.ItemRect(ListBox1.ItemIndex); pt := ListBox1.ClientToScreen(rc.TopLeft); pt := ScreenToClient(pt); pt0.X := ListBox1.Left+ListBox1.Width; pt0.Y := pt.Y+rc.Height div 2; ListBox2.ItemIndex := Integer(ListBox1.Items.Objects[ListBox1.ItemIndex]); rc := ListBox2.ItemRect(Integer(ListBox1.Items.Objects[ListBox1.ItemIndex])); pt := ListBox1.ClientToScreen(rc.TopLeft); pt := ScreenToClient(pt); pt1.X := ListBox2.Left; pt1.Y := pt.Y+rc.Height div 2; // Canvas.Lock; <= OnPaintでも必要なのか、教えてほしい... Canvas.Pen.Color := clBlack; Canvas.PenPos := pt0; Canvas.LineTo(pt1.X, pt1.Y); // Canvas.Unlock; end; // リストボックス1のOnClickイベント procedure TForm1.ListBox1Click(Sender: TObject); begin Form1.Refresh; end; // リストボックス2のOnClickイベント procedure TForm1.ListBox2Click(Sender: TObject); begin Form1.Refresh; end;
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.