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


HSPTV!掲示板


未解決 解決 停止 削除要請

2016
0728
Cheesehamburg7273OSもどきでアイコン機能の実装について5解決


Cheesehamburg7273

リンク

2016/7/28(Thu) 13:13:45|NO.76403

OSもどきで利用するアイコン機能を制作しております
移動とダブルクリックは実装できたのですが
削除機能がうまくいきません
一番最初にアイコンを削除すると一番下のアイコンも同時に削除されてしまいます
ソースコードを修正していただけないでしょうか

#include"user32.as" iconmax=5 iconx=5,5,5,5,5 icony=5,40,75,110,145 ShortcutMenu="新規作成" ShortcutMenuHot="開く","新規作成","削除","情報表示" screen 0,ginfo(20),ginfo(21),0,0,0 GetWindowLong hwnd, -16 SetWindowLong hwnd, -16, stat | $10000 | $40000 width dispx,dispy sendmsg hwnd, $112, $F030 gosub*desktop_draw onclick gosub*desktop_move stop *desktop_draw redraw 0 color 0,0,200:boxf repeat iconmax if iconx(cnt)!-1&icony(cnt)!-1 :color cnt*50,0,0:boxf iconx(cnt),icony(cnt),iconx(cnt)+32,icony(cnt)+32 loop redraw 1 return *desktop_move if wparam==1 { clrobj:gosub*desktop_draw if doubleclick>0 { if defx==mousex&defy==mousey&doubleclick==2:doubleclick=0 { repeat iconmax if mousex>iconx(cnt)&mousex<iconx(cnt)+32&mousey>icony(cnt)&mousey<icony(cnt)+32 :iconno=cnt loop gosub*iconrun } doubleclick+1 return } repeat iconmax if mousex>iconx(cnt)&mousex<iconx(cnt)+32&mousey>icony(cnt)&mousey<icony(cnt)+32 { iconID=cnt:doubleclick+1 repeat defx=mousex:defy=mousey iconx(iconID)=mousex-16:icony(iconID)=mousey-16 gosub*desktop_draw await 1 getkey click,1 if click==0 :break loop } loop } if wparam==2 { clrobj:gosub*desktop_draw repeat iconmax if mousex>iconx(cnt)&mousex<iconx(cnt)+32&mousey>icony(cnt)&mousey<icony(cnt)+32 :MouseIconHot=1:iconno=cnt loop if MouseIconHot==0 { gradf mousex,mousey,100,length(ShortcutMenu)*30,1,$FFFFFF,$000000 objsize 100,30:pos mousex,mousey foreach ShortcutMenu button gosub""+ShortcutMenu(cnt),*ShortcutRun loop } if MouseIconHot==1 { gradf mousex,mousey,100,length(ShortcutMenu)*30,1,$FFFFFF,$000000 objsize 100,30:pos mousex,mousey foreach ShortcutMenuHot button gosub""+ShortcutMenuHot(cnt),*ShortcutRunHot loop } } return *ShortcutRun return *ShortcutRunHot if stat==0 :gosub*IconRun if stat==2 :gosub*IconDelete return *IconRun dialog"君が押したのはIcon "+iconno+" だね?",0,"神" clrobj:gosub*desktop_draw return *IconDelete iconx(iconno)=-1:icony(iconno)=-1:iconmax-1 clrobj:gosub*desktop_draw return



この記事に返信する


Cheesehamburg7273

リンク

2016/7/28(Thu) 13:22:31|NO.76404

あとから気づいたのですが、
ダブルクリックをすると他のアイコンが動かなくなるバグも発見しました
修正お願いします



bellyoshi

リンク

2016/7/28(Thu) 13:41:46|NO.76405

*IconDelete
のルーチンで
iconmax-1
しているからじゃないですか?
icony(iconno)=-1
で消しているわけでさらにmax-1すれば、最後が消えるのは当たり前だと思います。



Cheesehamburg7273

リンク

2016/7/28(Thu) 14:02:50|NO.76406

ありがとうございました
解決しました



bellyoshi

リンク

2016/7/28(Thu) 14:38:31|NO.76408

doubleclickの変数がおかしいようですね。
一部ですが、こんな感じに直してみてはどうでしょう

if wparam==1 {;左ボタン clrobj:gosub*desktop_draw if (defx=mousex and defy=mousey) { doubleclick = 1 } if doubleclick { doubleclick = 0 repeat iconmax if mousex>iconx(cnt)&mousex<iconx(cnt)+32&mousey>icony(cnt)&mousey<icony(cnt)+32 { iconno=cnt } loop gosub*iconrun return } repeat iconmax if mousex>iconx(cnt)&mousex<iconx(cnt)+32&mousey>icony(cnt)&mousey<icony(cnt)+32 { iconID=cnt repeat defx=mousex:defy=mousey iconx(iconID)=mousex-16:icony(iconID)=mousey-16 gosub*desktop_draw await 1 getkey click,1 if click==0 { break } loop } loop }



Cheesehamburg7273

リンク

2016/7/28(Thu) 14:53:18|NO.76410

bellyoshiさん ありがとうございました!



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