HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2023
1215
たるとExcelみたいに四角形の図形を作り、ドラッグ移動&サイズ変更できるようにしたい4解決


たると

リンク

2023/12/15(Fri) 17:34:51|NO.100847

はじめまして、よろしくお願いします。

Excelのオートシェイプみたいに
四角形の図形(太さ、色、サイズの変更可能)を動的に作りたいです。
その際、線の色と太さは変えますが、四角形を枠だけにもしたいです。

[HSP]ドラッグ移動のサンプル(1) というサイトを参考に作ろうと思いましたが
何処を改変したら良いかが良く分かりません。

#modfunc RectDraw
color m_r/1,m_g/1,m_b/1:circle m_x-m_n, m_y-m_n, m_x+m_n, m_y+m_n,1
color m_r/2,m_g/2,m_b/2:circle m_x-m_n,m_y-m_n,m_x+m_n,m_y+m_n,0
return

たぶんここだと思います。

・太さの変えられる直線を引きたい
・ドラッグで動かせるようにしたい

です。

以下、分かれば知りたいです。
・LINEだと太さが変えられない(boxfしかないか?)
・boxfにした場合、boxfが重なる場所の背景を透過できるか(外側内側で重ねるつもり)

回答よろしくお願いいたします。



この記事に返信する


buhio

リンク

2023/12/16(Sat) 10:03:26|NO.100853

こんにちわ

詳しくないけど、Artlet2Dってプラグインを使うのがいいんじゃないですか?
標準で同梱されてますし、高速に図形をかける機能があったと思う。

どこかで質問のようなサンプルコードを見たような気もするが、それは忘れた。

ちなみにHGIMG4と一緒に使うことはできなかった。



buhio

リンク

2023/12/16(Sat) 10:19:31|NO.100854

ドラッグで動かす

stickでマウスの左クリック(256)を取得(非トリガー)して、ONならmousexとmouseyの場所に図形を描画、って感じで実装するのかなぁ。
ゲームと同じ感じで作るのがいいと思うけど。


*main redraw 0 color 255,255,255 boxf stick keys,256 if keys&256{    x=mousex:y=mousey pos x,y ;図形の描画 color 255,0,0 boxf x-5,y-5,x+5,y+5 color 0,0,0 mes "ドラッグ" }else{ pos x,y color 255,0,0 boxf x-5,y-5,x+5,y+5 color 0,0,0 mes "離した" } redraw 1 await 1000/60 goto *main



buhio

リンク

2023/12/18(Mon) 18:26:08|NO.100877

なんか興味があったので、それっぽくしてみました。
冗長な部分は堪忍。
HGIMG4で使えたらいいのになぁ。。。


#include "a2d.hsp";Artlet2D ;===================================== ;図形管理モジュール mod_object #module mod_object m_left,m_top,m_width,m_height,m_penwidth #modinit ;モジュール変数初期化 m_left=100f m_top =100f m_width=100f m_height=100f m_penwidth=rnd(30);太さをランダムに return #modfunc local update ;描画処理 alPenWidth m_penwidth alColor 255, 0, 0 alDrawRect m_left,m_top,m_width,m_height return #modfunc local move double _mousex,double _mousey ;移動処理 m_left=_mousex m_top=_mousey return #modfunc local hitcheck double _mousex,double _mousey,array _hit ;ヒットチェック処理 ;どこをクリックしたかも記憶 _hit=0f,0f,0f if _mousex>=m_left{ if _mousey>=m_top{ if _mousex<=(m_left+m_width) { if _mousey<=(m_top+m_height){ _hit.0=1.0f _hit.1=_mousex-m_left _hit.2=_mousey-m_top } } } } return _hit #global ;========================================================== ;メインプログラム button gosub "new",*newobject ;ボタン作成 dimtype objects,vartype("struct"),0 ;モジュール型変数初期化(objects) newmod objects,mod_object ;1個新規作成 current_obj=-1 ;選択用の変数初期化(-1)未選択 hit=0f,0f,0f ;========================================================== *main redraw 0 ;描画停止 alCreateImage 0, 640, 480 ;Artlet2Dのクリア if stat = -1 : dialog "GDI+ を初期化できませんでした。" : end color 255,255,255 boxf ;メイン画面クリア stick keys,256 if (keys&256){ ;ドラッグ中 if current_obj=-1{ ;対象を未選択なら  //マウス位置でヒットチェック    foreach objects hitcheck@mod_object objects(cnt),mousex,mousey,hit if hit(0)=1f{//ヒットした current_obj=cnt ;選択対象を保存 break } loop } }else{ ;ドラッグしていないなら current_obj=-1 ;未選択にする } if current_obj>-1{ ;対象が選択されているなら図形移動 ;図形の移動 move@mod_object objects(current_obj),mousex-hit(1),mousey-hit(2) } //全オブジェクトの描画 foreach objects ;図形の描画 update@mod_object objects(cnt) loop alCopyImageToScreen 0, 0 ; 仮想イメージから HSP screen に画像転送 ;デバッグ確認用 pos 100,0 color 0,0,0 mes "current_obj:"+current_obj mes "hit(0):"+hit(0);ヒットフラグ mes "hit(1):"+hit(1);ヒットした相対x mes "hit(2):"+hit(2);ヒットした相対y redraw 1 await 1000/60 goto *main ;============================================================= ;ボタン押した処理(新規作成) *newobject newmod objects,mod_object return



たると

リンク

2023/12/19(Tue) 14:52:20|NO.100884

>buhio様
返答遅れて申し訳ありません。自分で調べてテストしてました。
欲しかったものそのままでビックリしました、ありがとうございます!!

私が考えたのは、仮想イメージを作ってSelect?を変えればいけるのかなと思ってました。

#include "a2d.hsp" picload "1.jpeg" ; 仮想イメージ 0 を作成 alCreateImage 0, 300, 300 if stat = -1 : dialog "GDI+ を初期化できませんでした。" : end alPenWidth 10 alDrawRect 50, 50, 240, 120 ; 仮想イメージ 1 を作成 alCreateImage 1, 0, 40 alPenWidth 8 alDrawRect 10, 10, 30, 30 ; 仮想イメージ 0 から HSP スクリーンにコピー alCopyImageToScreen 0, 0 alCopyImageToScreen 1, 0 redraw
重くなるだろうし良くないだろうとは思っていたのですが
こんなに良いものを教えて頂けるとは思いませんでした。ありがとうございます!
教えていただいたソースを解読しようと思います。

あとはリスト表示出来たら良いなと思っているのですが、
リストビュー(編集可能なグリッドビュー?)は設定が難しそうだったので
色々調べて分からなければもう一度相談させていだたこうと思います。

この度はありがとうございました!



記事削除

記事NO.パスワード
(質問が解決したスレッドは他の利用者に活用してもらうため、削除しないようお願いします)

NO.100847への返信

マスコット

好きなマスコットを選んでください。

名前

e-mail
HOME
  1. 初めて利用する方は、HSP3掲示板の使い方をお読みください。
  2. 不要部分の多い長いスクリプトの投稿は ご遠慮ください。
  3. 書き込みは自動改行されません。適度に改行を入れてください。
  4. スクリプトは小文字の<pre>〜</pre>で囲むと見やすく表示できます。

削除用パスワード

解決したら質問者本人がここをチェックしてください。

エラー発生時、再送信すると二重送信になることがあります。
回答が得られたら、お礼書き込み時に[解決]チェックしてください。
SPAM防止のためURLから始まる文章は投稿できません。
SPAM防止のため英文字のみの本文を投稿することはできません。

ONION software Copyright 1997-2023(c) All rights reserved.