apollo基本形 |
|
フォームがすべて 閉じられたとき終了。 赤の行があれば、 青い接頭辞Phi::は 省略できる。 |
一覧リンク |
|
1=AL_TOP 2=AL_BOTTOM 3=AL_LEFT 4=AL_RIGHT 5=AL_CLIENTanchorsパラメータ ---- サイズ変化時の親との相対位置(配列指定)----
0=AK_LEFT コントロールの位置は親の左端に固定される 1=AK_TOP コントロールの位置は親の上端に固定される 2=AK_RIGHT コントロールの位置は親の右端に固定される 3=AK_BOTTOM コントロールの位置は親の下端に固定される (例:edit.anchors=[AK_TOP,AK_LEFT](または、[1,0])とすれば、拡大しても左上に固定 edit.anchors=[AK_TOP,AK_BOTTOM]とすれば、上下拡大につれてedit拡大)イベントハンドラ(大体のオブジェクトで使える共通のもの)
object.on_click object.on_dbl_click object.on_key_down #使用注意(キーリピート等無効) object.on_key_up sender[1]:キーコード, sender[2] : ShiftState配列 []:なし、[0]Shift押下, [1]Alt押下, [2]Ctrl押下 object.on_key_press Shiftstateなし object.on_mouse_down object.on_mouse_up sender[1](0:左、1:右)、sender[2]配列(0:shift、3:左、4:右)sender[3]:x座標、sender[4]:y座標 object.on_mouse_move sender[1]配列(3:左、4:右)、sender[2]:x座標、sender[3]:y座標 object.on_enter #focusがあたったとき。ENTER入力時ではない。 object.on_exitコンテナ等基礎部品 ------------
f=Form.new f.caption="タイトル" #フォームf のキャプション f.top=100 #縦位置 f.left=100 #横位置 f.height =300 #縦幅 f.width = 300 #横幅 f.show #フォームf を見えるようにする f.show_modal #モード付きダイアログとして表示。modal_result が0以外になれば閉じ、設定された値を返す。 f.modal_result #デフォルト値は MR_NONE=0 である。 f.close #Formを閉じる(終了命令もかねる。ただ閉じたいだけなら f.hide) f.on_close_query #Formを閉じるかどうか確認する手段 #戻り値がfalseだとクローズ処理はそこで終わって戻る。 #戻り値がtrueだとon_close が呼ばれ、閉じる処理に入る。 f.on_close #閉じたときのイベント。上記に依存。 f.on_show #開いたときのイベント f.set_focus #他のところがactiveなとき、activeにする f.cursor=k #kの値はマイナスの右の値で右の形状 >>>>>>Panel グルーピング用に!「作業台上のプレート」f.border_style = BS_DIALOG #枠スタイル指定。3と同じ。 #他に、0=BS_NONE, 1=BS_SINGLE, 2=BS_SIZEABLE(デフォルト),4=BS_TOOL_WINDOW、5=BS_SIZE_TOOL_WIN
panel=Panel.new form panel.align=AL_BOTTOMToolBar いろいろボタン等並べるフォーム上のバー (デフォルトalign=AL_TOP)
tbar=ToolBar.new form sb=StatusBar.new form sb.simple_panel=true; sb.simple_text="caption"ダイアログコンポーネント ----- dialogsライブラリを使う:require 'dialogs'
if dlg.execute ・・・ endで、入力後の処理をする。以下、各ダイアログの入力値プロパティを示す。
OpenDialog SaveDialog .file_name .default_ext='txt' #拡張子無指定時の拡張子 .initial_dir #デフォルトファイル検索フォルダ .filter = 'すべて|*|テキスト|*.txt' ColorDialog .color FontDialog .font .font.name .font.size #heightから変換 .font.color .font.style =["FS_BOLD","FS_ITALIC","FS_UNDERLINE"] #この配列の要素があれば実効 .font.charset .font.pitch=FP_DEFAULTメッセージボックス ------ 特殊ダイアログ。簡単な確認・指定用
r = Phi::message_dlg 'OKですか?', 3, [2,3] if r==1 #OK 2=CANCEL (OKの時の処理) end のように使う。 第3引数 ボタン 配列内 戻り値(右の定数名はPhiのプロパティ) はい 0 6 MB_YES いいえ 1 7 MB_NO OK 2 1 MB_OK キャンセル 3 2 MB_CANCEL 中止 4 3 MB_ABORT 再試行 5 4 MB_RETRY 無視 6 5 MB_IGNORE すべて 7 8 MB_ALL すべていいえ 8 9 MB_ALL_NO すべてはい 9 10 MB_YES_TO_ALL ヘルプ 10 2(モードつき。 第4引数 help_ctx : Fixnum :help_file_name で示されるヘルプファイルのコンテキスト識別子 ) 第2引数 0=MT_WARNING △内! 題名「警告」 1=MT_ERROR 赤× 題名「エラー」 2=MT_CONFIRMATION 噴出し内青! 題名「情報」 3=MT_CONFIRMATION 噴出し内青? 題名「確認」 4=MT_CUSTOM 絵なし 題名「ruby」(APPLICATION.title の値) 第5変数以下: x=-1, y=-1, help_fname=''書き込み、文字表示のコンポーネント --------------
e =Edit.new form #formは、(form, :ename,'初期文字列')でも可 e.width e.align e.text #表示文字列 e.sel_length e.sel_start e.sel_text e.password_char=0 #そのまま。それ以外は指定文字コードで表示:*なら42 e.read_only = false e.can_undo =FALSE e.char_case=EC_NORMAL #EC_LOWER_CASE, EC_UPPER_CASE e.border_style=BS_SINGLE e.auto_select=FALSE e.auto_size=TRUE e.hide_selection=FALSE e.max_length=20 e.modified=TRUEMemo メモコンポーネント
m=Memo.new(form, :memoname,'初期文字列') m.caption='キャプション' m.align m.scroll_bars = 3 #この場合横縦両方表示 0なし、1下、2右 m.color=0xffffb0 #BGR各1バイトで背景色。色パラメータも使える↓ m.font m.font.size=12 m.font.color #文字色。色パラメータは、CL_RED のように指定可 m.lines #各行が配列に(改行コードなし) #(本当はDelphiの文字列リストだが、上記の解釈で仕様可) m.lines.text #全ての行を文字列に(改行コード含む) m.lines.add #行追加 m.lines.clear #全行クリア m.lines.load #ファイル名の引数でテキストファイルをロード m.lines.save #ファイル名の引数でテキストファイルとしてセーブ m.sel_start #上記で、カーソルが何文字目か(改行コード含む) m.sel_length #選択文字列長 m.sel_text #選択文字列 m.caret_pos #カーソル座標(point型) m.caret_pos.x #上記横数値 m.caret_pos.y #上記縦数値 m.word_wrap = true #画面端で折り返す。 m.read_only = true m.set_focus #他のところがactiveなとき、activeにする m.focused? #このメモmに、カーソルがあるかどうか?RichEdit (文字単位)書式付メモ
re =RichEdit.new form #formは、(form, 'キャプション', :labelname)でも可 使い方は、Memo とほとんど同じなので、変更点のみ。(ただし、ap-636_bde60以降をインストール済みのこと)CLIPBOARD クリップボード定数追加されたmethod・property
re.sel_attributes #memo.font と類似。文字単位(選択範囲)で指定できる。 re.sel_attributes.color re.sel_attributes.size re.sel_attributes.style #配列型だが直接配列操作できない。[FS_BOLD,FS_ITALIC]=[0,1]要素があれば働く re.sel_attributes.name re.sel_attributes.charset re.print #書式付プリント re.lines.load re.lines.save #リッチテキスト形式のロード・セーブ re.on_change #文書変更に対応 re.caret_pos re.on_selection_change #状態変化時のイベントハンドラ(選択に反応)削除or未完成のmethod・property
re.popup_menu #マウス右クリックの自動指定(Cut-Copy-Paste等)なし。 re.modified
CLIPBOARD.text #クリップボード内文字列Label
l=Label.new form #formは、(form, :labelname, 'キャプション')でも可 l.align l.caption l.layout=TL_CENTER #または1、TL_TOP または0、TL_BOTTOM または2StringGrid 表計算タイプのSpreadSheet
sg=StringGrid.new f #フォームf上に表sgを作る sg.col_count= #列数 sg.row_count= #行数 sg.align = AL_CLIENT #表全体をフォーム上に拡げる sg.options += #表設定 [GO_EDITING,GO_ALWAYS_SHOW_EDITOR,GO_TABS] #(編集可能・常に編集モード・タブで移動可能) sg.cells[列座標,行座標]="12" #セル値代入 sg.on_key_down = proc{} #keyを押せば{}内を実行 sg.col_widths[k]= #k列の幅 sg.row_heights[k]= #k行の高さリスト表示コンポーネント --------------
c=ComboBox.new form c.align=AL_RIGHT c.items #Strings型(Memoのlinesと同じ) c.items.add('項目文字列') c.width = 50 c.text #選択された中身(最初の窓) c.hideListBox 一覧表(通常一列)
lb = ListBox.new form lb.items #Strings型(Memoのlinesと同じ) lb.items.add('a') n=lb.item_index #現在選択されているindexの値 lb.items[n] #その中身 lb.selected[k] #k個目が選択されているか(Boolean) lb.multi_select=true #複数選択可 lb.on_click = proc {} lb.selected.nil?TreeView ツリー型リスト表示
tv = TreeView.new form tv.align tv.items #tree node型配列 tv.items[0].text #0番目の中身 tv.items[0].index #0番目のindex(0であたりまえだが、tree node 型はこうなっている) n=tv.items.add(nil, 'root') #最初(ルート)はnil。 tv.items.add_child(n, 'root-1')#どこの下位(この場合n)にあるかのnode名 tv.selected.text #選択された中身 tv.selected.index #選択されたindex tv.on_click = proc {} tv.selected.nil?ボタンコンポーネント -------------------
b= Button.new form (省略形 b = Button.new((コンテナ名), :(名前),'キャプション')) b.align=AL_RIGHT #右寄せ b.cancel=TRUE #[Esc] が押されたときに on_click を実行するかどうか b.default=TRUE #[Enter] が押されたときに on_click を実行するかどうか b.modal_result=0 #ボタンが ( mode 付 ) 親 form を閉じるかどうか。簡易イベントBitBtn 絵入りボタン。動作やmodal_resultが決まっていて、使いやすい
b= BitBtn.new form #kind=6以外はダイアログが閉じるらしいが・・・? b.kind =0 (->指定) (指定:glyph) 1 (->1 ) OK #(-> は、modal_result) 2 (->2 ) キャンセル 3 (->0 ) ヘルプ #b.help_context=ヘルプファイル で指定されたものが開く 4 (->6 ) はい 5 (->7 ) いいえ 6 (->×) 閉じる #フォームが閉じる 7 (->3 ) 中止 8 (->4 ) 再試行 9 (->5 ) 無視 10(->8 ) すべてRadioButton Panelでグループ化して使う(排他的選択)
b1 = RadioButton.new panel #パネルやフォーム上で、排他的選択 b2 = RadioButton.new panel b1.caption="横に出る文字" #デフォルトでは右に左詰表示 b1.alignment=0 #0で、左表示だが左詰なので、下のwidthを要調整。1で右表示 b1.width = 70 b2.left=100 b1.checked = true #チェックされているかの判断(代入も可)。これで判断して使用。UpDownボタン Editなどにくっつけて使う。制御はこちら。
ud= UpDown.new tb ud.associate=edit #エディットコンポーネントにくっつけて制御を奪う(上下矢印右側) ud.position=13 #くっつけられた窓の初期値ToolButton Toolbar上で制御を受ける
(tb=ToolBar.new form とするとき、 ボタン上に文字を表示するならtb.show_captions=true と設定し、 画像を表示するなら、tb.images= イメージリストを設定しておくこと。 使用例は bmp = Bitmap.new #ビットマップの場合 bmp.load('c:\pri.bmp') ico = Icon.new #アイコンの場合 ico.load('c:\ppm.ico') il = ImageList.new il.masked=false #マスクの使用法が不明ですので、使わない^^; il.add(bmp,0) #第2引数はマスクですが・・・ il.add_icon(ico) #マスクは無い tb.images=il #0番目pri.bmp、1番目ppm.icoが入った。 btn.image_index = 0 #こればpri.bmp、ppm.icoなら、1 ) tbn=ToolButton.new tbar tbn.caption='キャプション' tbn.style=1 #凹凸のトグル。 2:drop_down_menu のメニューが出る。 3:セパレータ。 4:縦線CheckBox いろいろ並べてオプション指定に使う
cb= CheckBox.new form cb.checked = true #または、false #チェックされているかの判断(代入も可)。これで使う。メニューコンポーネント ---ボタンの代わりに以下のように指定
new_menu(f,:menu1,[menu_file = new_item('ファイル','',:menu_file1)]) menu_file.add(new_item('メニューファイル0(&F)','Ctrl+S',:menu_0)) #Ctrl+Sはショートカットキー menu_file.add(new_item('メニューファイル1(&E)','Ctrl+Z',:menu_1)) #&Eはメニュー表示時のショートカット menu_file[0].on_click = proc{ } ポップアップメニュを作りたいとき、ポップアップオブジェクトを作ればよい: pp = PopupMenu.new(f,:pop,'') pp.items.add(new_item("メニュー1", '', :menu1)) pp.items[0].add(new_item("メニュー2", '', :menu2)) pp.items.insert(0, new_item("メニュー3", '', :menu3)) pp.items.menu1.on_click = proc{ } f.popup_menu = pp #f上のポップアップメニューを指定バーコンポーネント ---スライドするボタンとして
scb=ScrollBar.new f scb.kind=1 #縦型(横型は0) scb.align=AL_RIGHT scb.on_change=proc{p scb.position}TrackBar スライド入力
trb=TrackBar.new f trb.align=AL_BOTTOM trb.max=100 #目盛り最大値 trb.position=50 #目盛り初期値 trb.frequency=5 #目盛り間隔 trb.tick_marks=0 #目盛り位置下右(上左1、両側2) trb.on_change=proc{p trb.position.to_i*10}コントロールコンポーネント ---------------
pc = PageControl.new form pc.align = AL_CLIENT pc.active_page #現在アクティブなページ番号TabSheet 同一Form上で複数文書を処理。 この上にMemoやStringGridをおく
tb1 = TabSheet.new pc #PageControl の上におくこと印刷コンポーネント ------- strprn をrequireして使う。
プリンタオブジェクトsprn = StringsPrinter.new を宣言して、 FormStringsPrint.execute(sprn, lines)と書けば、設定画面で設定後、文字列配列linesを印刷。 設定は、sprn.write_ini('print1.ini', 'SPrinter1', 'Property')で (パスが指定なければ、Windowsフォルダの)iniファイル print1.ini の 項目[SPrinter1]に、Propertyとして保存できる。 もちろん、sprn.write_iniを、sprn.read_ini とすれば、設定読み込みができる。