ドゥアイネットのプログラマー、湯川が開発日記を綴ります。

CALENDAR
S M T W T F S
    123
45678910
11121314151617
18192021222324
252627282930 
<< November 2018 >>
ARCHIVES
CATEGORIES
FastArray
コンボボックスを作成する処理が
時間がかかっていたのでその改善をしました。

ちょっと前まではあまり時間がかかっていなかったのですが
改修したときから時間がかかるようになったようです。

調べて、原因となっているコードを修正しました。
それで元に戻ったのですが、
速度の改善なので、元より速くしないといけないと思い修正してみました。

コンボボックスにデータをセットする際にいろいろ判定があります。
判定するデータが1000件とかになると配列をまわすだけで
少しですが時間がかかってきます。

3つのコンボをセットするのに
0.015秒 50件くらいセットする
0.17秒 500件くらいセットする
0.365秒 2000件くらいセットする
----------------------------------------
0.55秒かかります。
この処理で使っていた配列を「FastArray」にしたら

0.019秒 50件くらいセットする
0.069秒 500件くらいセットする
0.141秒 2000件くらいセットする
----------------------------------------
0.229秒になりました。

「Fast」と名乗るだけに速いですね。
でもこの差(0.321秒)は使う人にはわからないかもしれないです。。
| マスターメンテナンス | 15:34 | comments(2) | - |
ダイアログ上でのドラッグ&ドロップ
curlでダイアログ上でのドラッグ&ドロップを作成していました。

ドラッグするイメージを指定してドラッグ&ドロップすると
以下のようになりました。

画像
なんかダイアログと同じくらいの大きさでドラッグされています。
そこで
{ImageDragee
  drag-graphic =
  {HBox
   background="white",
   valign="center",
   spacing=5pt,
   {image source = {manifest-url "image", v_path}},
  {MyNodeTextFlowBox (s asa MyNodeTextFlowBox).text}
 }
}
としていたのを
{ImageDragee
  drag-graphic =
  {HBox
   background=FillPattern.transparent,
   valign="center",
   spacing=5pt,
   {image source = {manifest-url "image", v_path}},
  {MyNodeTextFlowBox (s asa MyNodeTextFlowBox).text}
 }
}
とかえたらうまくいきました。
背景を透明にしてやればいいみたいです。
画像
| マスターメンテナンス | 09:06 | comments(0) | - |
配列の値
curlでこんな感じで配列の中身をいれかえると

let v_data-array:{MyArray-of String} = {new {MyArray-of String}}

{v_data-array.append "あああ"}
{v_data-array.append "いいい"}
{v_data-array.append "ううう"}

{for v_data:String in v_data-array do
 {if v_data == "いいい" then
   set v_data = "えええ"
   {break}
 }
}
{output v_data-array[1]}

としても結果は「いいい」です。

この場合、「いいい」を変えたかったら
{v_data-array.set 1 "えええ"}
とsetメソッドでセットするか

カウンタループにして、
{for x:int=0 to v_data-array.size - 1 do
 {if v_data-array[x] == "いいい" then
   set v_data-array[x] = "えええ"
   {break}
 }
}
としないといけません。

まあ、当たり前なんですけど、
今日ちょっとこれで、少し時間とられたので
忘れないように書いておきます。
| マスターメンテナンス | 19:08 | comments(0) | - |
ドラッグ&ドロップの操作
今回のメンテツールの追加機能画面操作は
選ぶのも削除するのもドラッグ&ドロップ操作です。

今回は入力するのはコードくらいで、
あとは一覧からドラッグ&ドロップで選ぶだけなので
この操作になりました。

画像

ドラッグ&ドロップは使う人によっては
操作になじみがないかもしれないですが、
開発するのはけっこうおもしろいです。
作ったものに動きがでるからかもしれません。

リッチクライアントでは当たり前なドラッグ&ドロップ、
これからもどんどん使っていこうと思います。
| マスターメンテナンス | 18:55 | comments(0) | - |
起動画面
メンテツールの起動画面は季節などで変わるようにしています。
改修が入るたびに少しずつ追加していました。

今回の改修でしばらく変更することがなさそうなので
まとめて起動画面を追加しました。
これで1月〜12月全てに起動画面が変わる日ができました。

メンテツールはお気に入りのシステムなので
これからもより便利に更新していきたいと思います。
| マスターメンテナンス | 18:33 | comments(0) | - |
テキストの選択位置
テキストエリアの選択した部分を
置き換える処理を作成していました。
テキストエリアがフォーカスを失っても
選択したのがどこか保持しておかないといけません。

「FocusLost」で選択部分を取ろうとしても
すでに選択部分が失われて取れません。

「SelectionChanged」で選択部分を保持しようとしても
選択がなくなったときも「SelectionChanged」が起こるので
これも選択部分を保持できません。

よく考えるとテキストを選択するときは
必ずマウスボタンを離すか、キーボードのキーを押します。。
「PointerRelease」と「KeyPress」を使えばいいはずです。
が、テキストエリアの「PointerRelease」/「KeyPress」だとイベントが起こりません。

テキストエリアの「ui-object」の「PointerRelease」/「KeyPress」
イベントを使ったらうまくいきました。

いつもこの辺で少し時間をくっているような気がします。。
TextFieldなどでイベントがとれないときは「ui-object」を
すぐ使うようにしないといけないです。

忘れないようにここに書いておきます。
| マスターメンテナンス | 18:03 | comments(0) | - |
recordgridでクリックされた場所
curlのrecordgridでクリックされた場所のインデックスとデータを取りたいと思いちょっと調べました。

メンテツールを作り始めのころcurlユーザーズグループのBBS(昔のほう)でみたような気がしたので検索してみました。
記憶どおりありました。ダブルクリックされたセルのrowとcolのインデックスの取り方が投稿されていました。

あとはちょっと変えて、データを取れるようにするだけです。
こんな感じでできました。

{on e:PointerEnvelopeEvent at rg:RecordGrid do
 {type-switch e.contents
  case pp:PointerPress do
  ||クリックしたレコードグリッド情報を取得する
  let (cell:#RecordGridCell, row-index:int, col-index:int) ={rg.grid-objects-at e.x, e.y}
  {if pp.button == left-button then
   {if-non-null cell then
    {popup-message
    {{rg.records.select}[row-index].get
     col-indexに対応した列名
    }
    }
    {e.consume}
   }
  }
 }
}

「col-indexに対応した列名」にはrecordgrid内の列名が必要です。
内容全てを覚えておく必要はないですけど、
「あそこにあったな」ぐらいの記憶は必要だなと思いました。
| マスターメンテナンス | 15:01 | comments(0) | - |
SQL実行機能
メンテツールにSQL実行機能を追加しました。
メンテツールはSQLをあまり知らない人でも使えるものですが、
実際使っていると、SQLを直接実行したくもなります。

以下の感じになりました。
画像

SQLを入力して実行ボタンでSQLを実行します。
よくあるSQL実行ツールみたいな感じです。
一度に複数のSQLを実行したりもできます。

データベースを選択したらテーブル一覧を、
テーブルを選択したら、カラム一覧を表示しています。
これをコピーしてSQLを書けます。

けっこう便利な機能だなと思います。
| マスターメンテナンス | 16:56 | comments(0) | - |
TextAreaのスクロールバー
curlでTextAreaのスクロールバーを必要なときだけ表示するようにしました。
プロパティで設定できるのかと思っていたらできませんでした。

なのでTextAreaの「graphical-children」から「Scrollbar」を
とりだして、プロパティ「shrink-when-disabled?」をかえてやることにしました。

でも「graphical-children」に「Scrollbar」がありません。
そこで、TextAreaの「ui-object」の「graphical-children」を探してみました。
ありました「Scrollbar」。あとはこれのプロパティを変更しました。
ついでに、Scrollbarの太さ、色も変えておきました。

画像
| マスターメンテナンス | 18:17 | comments(0) | - |
起動画面を追加
メンテツールの起動画面を日付によって、変えるようにしています。
今日は6月ごろに表示される画面を追加しました。

6月でイメージしたのは「あじさい」「梅雨」「カエル」でした。
あじさいは自分で画像をつくれそうにないので、
雨とカエルを表示することにしました。

以下のカエルを起動画面の一部分に表示するようにしました。

画像

ちょっと気持ち悪いカエルになりましたけど。。。
実際はかなり縮小するので、そう気にならないかと思います。

起動画面の種類は修正が入るたびに、ちょっとずつ増やしていこうと思っています。
| マスターメンテナンス | 18:10 | comments(0) | - |
| 1/7PAGES | >>