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

CALENDAR
S M T W T F S
    123
45678910
11121314151617
18192021222324
252627282930 
<< November 2018 >>
ARCHIVES
CATEGORIES
curlのテキストエリア(TextArea)の行間
 curlのテキストエリア(TextArea)の行間

TextFlowBoxには、「public paragraph-line-spacing」があって、
行間を調整できるのですが、TextAreaには行間を調整するプロパティがありません。

入力していくと、こんな感じになってしまい読みづらくなってしまいます。
画像

フォントの指定をつかえば、この状態を回避できます。

{TextArea
    height = 2cm,
    font-family ="メイリオ"||行間が広い「メイリオ」を指定
}

行間が広いフォントを指定することで、TextAreaの行間も広くなります。
画像

ただ、システムを使用するパソコンに指定したフォントが入ってないと行間は変わりません。
フォントが入っていなくてもエラーにはならないので、けっこう使えると思います。
| Curl | 16:33 | comments(0) | - |
Curlでオフラインアプリ

Curlのオフラインアプリについて調べてみました。随時接続コンピューティング (OCC)という機能で実現できるみたいです。

start.curlのappletにcurl-root = "."を設定して、{occ-install-or-update}を実行します。

start.curlの抜粋
      〜省略〜
{applet
    manifest = "manifest.mcurl",
    curl-root = "."
}
{do
  {occ-install-or-update
      install-filename = "OCCテストアプリ",
      install-name = "OCCテストアプリ",
      install-version = "1.0",
      occ-root-installer
  }
}
      〜省略〜

▲謄好肇廛蹈哀薀爐鬟妊廛蹈い靴泙后IDEからデプロイできるみたいですが、プログラムからもデプロイできたのでcompile.curlを作成しました。

compile.curlの抜粋
      〜省略〜
{create-curl-archive-file
  {url "./"}
}
{create-curl-timestamp-file
  {url "./"}
}
      〜省略〜

以上で準備完了です。

デプロイすると、curl-archive.car、curl-timestamp.txtが作成されます。
curl-archive.carは、イメージファイルやpcurlなどが圧縮されたファイルみたいです。なお、start.curlとmanifest.mcurlは圧縮されません。
curl-timestamp.txtは、更新時間が記入されるみたいです。このファイルを使ってプログラムの更新を制御するみたいです。


デプロイされたファイルをサーバーにUPします。

http://・・・/start.curlを起動すると初回のみインストール画面が表示されます。プログラムの更新は起動時に自動的に行ってくれました。


デスクトップにショートカットを作成してくれて便利ですね。次回からここからプログラムを起動できます。


ゥ蹇璽ルに、curl-archive.carが展開された状態で保存されていました。ここにあるプログラムを実行していました。
  保存場所:C:¥Documents and Settings¥ユーザー名¥Local Settings¥Application Data¥Curl Corporation¥Surge¥local-root-for

Ε機璽弌PHPへの問い合わせなど、通常のCurlプログラムと同様なことが出来るみたいです。

| Curl | 17:19 | comments(0) | - |
Clipboard
 curlではクリップボードを使用することができます。

以下の例では、ダブルクリックされたTextFlowBoxのテキストを
クリップボードにセットしています。

画像

let v_text: MyTextFlowBox=
 {MyTextFlowBox
  opaque-to-events? = true,
  "ken_cd"
  tooltip={Tooltip "ダブルクリックで文字をコピーできます",style = TooltipStyle.immediate},
  {on e:PointerPress at s:#EventTarget do
    {self.on-copy-text e,s}
  }
}

{method private {on-copy-text e:PointerPress,s:#EventTarget}: void
 
  ||ダブルクリックの場合のみ
  {if e.click-count != 2 then
    {return}
  }
 
  ||Clipboardクラスの「set-string」を使って文字列をセット
  let v_clip:Clipboard = {Clipboard.get-system-clipboard}

  {v_clip.set-string
    (s asa MyTextFlowBox).text
  }
}


「Clipboard」クラスを使わないでもクリップボードにセットすることができます。

以下の例では、テーブルで選択されている部分を
クリップボードにセットしています。

画像

||クリップボードにセットする
{v_table.selection-context.do-command
  "copy",
  throw-exception-on-failure? = false
}

selection-contextプロパティで選択されているデータがとれます。
SelectionContextの「do-command」メソッドで引数に「copy」を渡してやります。

コピーしたあとにエディタに貼り付けると

画像

うまく使えば操作性をあげることができると思います。
| Curl | 17:13 | comments(0) | - |
spaced-hboxとspaced-vbox
他の人が作成したcurlのプログラム改修を行っていたら、
「spaced-vbox」といったものがありました。
作成した人がVBoxをもとに作成したクラスかと思い、
プロジェクトをgrepで検索したのですが定義がみつかりませんでした。

そこでcurlのヘルプを検索してみるとすぐに見つかりました。

「spacing を 3.5pt に設定して
 VBox を作成するショートカットプロシージャ」だそうです。

普通に書くと以下になるのですが、書くのが面倒だから用意されているようです。
{VBox spacing=3.5pt}

左は普通のVBoxで丸と四角をならべた場合で、
右が「spaced-vbox」を使って並べた場合です。
画像
3.5pt空いてますね。

spacing が 3.5pt 固定では、使いどころが難しいような気もしますが、
こういった細かいプロシージャがあるのはcurlの良いところだと思います。
| Curl | 09:27 | comments(0) | - |
curlのif文
 他の人が開発したcurlプログラムを改修しているときに
以下のようなコードがありました。

{HBox
    "テストです",
    width =
        {if v_flg then
            200pt
         else
            100pt
        },
    height=90pt
}

HBoxの幅(width)を指定しているのですが、
ここに「if文」があります。

「if文」の結果がwidthにセットされます。
v_flgがtrueのときにwidthは「200pt」になって、
falseのときにwidthは「100pt」になります。

これを使わないとちょっとコードが長くなります。

let v_box:HBox =
  {HBox
      "テストです",
      height=90pt
  }

{if v_flg then
  set v_box.width = 200pt
else
  set v_box.width = 100pt
}

コードは短くなりますが、ちょっとわかりづらくなるので
場合によって使い分けが必要です。

| Curl | 18:41 | comments(0) | - |
curlのDateTime
curlのDateTime型は、zoneにDateTimeZone.utcを指定しないと

1970/01/01 から 2038/01/19 03:14:07までしかあつかえません。

以下を実行すると
{DateTime.default
 year = 2038,
 month=12,
 day=31
}

エラーになります。
'2038-12-31 00:00:00.000000' を DateTimeData に変換することができません:mktime failed


引数でzone = DateTimeZone.utcを指定してやるとこの日時もあつかうことができます。
{DateTime.default
 zone = DateTimeZone.utc,
 year = 2038,
 month=12,
 day=31
}

ちなみにDateTimeZone.utcを指定しないであつかえる最後の年2037年は
和暦でいうと平成49年で、なんとなく境界線になっているような年です。
ただの偶然ですけど。
| Curl | 18:43 | comments(0) | - |
curlで日付計算
curlで日付の差を求めるには以下のようにします。

||2009/07/30の日付を作成
let v_start:DateTime =
   {DateTime
    year=2009,
    month=7,
    day=30
   }

||2009/08/03の日付を作成
let v_end:DateTime =
   {DateTime
    year=2009,
    month=8,
    day=3
   }

let v_ret:int = {truncate (v_end - v_start) / 86400s} asa int

v_retには「4」が返ります。

DateTimeを引き算すると秒で差がとれるので、
それを一日の秒で割ることで日の差をもとめられます。
| Curl | 17:46 | comments(0) | - |
ガベージコレクション
プログラムが動的に確保したメモリ領域のうち、不要になった領域を自動的に解放する機能です。
日本語にすると「ゴミ収集」だそうです。

Flexなどでは、コードで明示的に行うことはできませんが、
Curlではコードで実行することができます。

「CURL.RUNTIME.MEMORY-MANAGER」をインポートして。
{garbage-collect}と記述するだけで、
ガベージコレクションが実行されます。

システムをある程度動かしてから、
{garbage-collect}実行前と、実行後のメモリ消費量を比較したところ
確かに実行後は減っていました。

{garbage-collect}を実行しなくても
いつかは、自動で行われるのですが自分で呼び出せるのは良いと思います。

机の中の資料も自動でガベージコレクションされてくれたらいいなと思います。
| Curl | 18:42 | comments(0) | - |
RecordGridの列固定
curlのバージョン5.0から、RecordGridの列固定ができます。
RecordGridの列数が多くて画面におさまらないときに
スクロールバーが表示されますが、スクロールしない列を指定できる機能です。

※Excelでいうところの「ウィンドウ枠の固定」です。

RecordGridの「frozen-column-count」をセットするだけで
列を固定できます。

set rec.frozen-column-count = 2

画像
※前の二つの列を固定してスクロールしています。

表をスクロールありで表示する場合は、便利な機能です。
| Curl | 18:33 | comments(0) | - |
リフレクション
自分が作成していないシステムを改修しているときに、
使用されているクラスの定義を見たいときがあります。

クラスが定義されている部分が「pcurl」にされていたりして
ファイルがない場合、見ることができません。

そんなときに「リフレクション」を使うと便利です。

こうすると
{import * from CURL.LANGUAGE.REFLECTION}

{value
  let t:ClassType = Table
  let members:Table =
    {Table
      {row-prototype
        {cell-prototype "name"},
        {cell-prototype "type"}
      }
    }
  {for m in {t.get-members
         search-superclasses? = false,
         filter = ClassMember.option-filter
       }
   do
    {members.add
      {row-prototype
        {cell-prototype m.name},
        {cell-prototype m.type}
      }
    }
  }
  members
}

こんな感じで出力されます。
name:type
halign:any
valign:any
hstretch?:bool
vstretch?:bool
horizontal-line-width:any
vertical-line-width:any
internal-borders:TableInternalBorders
display-context:#DisplayContext
horizontal-line-color:FillPattern
vertical-line-color:FillPattern
border-color:FillPattern
cell-border-spec:#BorderSpec
cell-border-width:any
cell-margin:any
cell-border-color:FillPattern
cell-border-style:BorderStyle
data-binding-context:#DataBindingContext

ClassTypeの「get-members」メソッドを使うことで、
上記の例では「Table」クラスのメンバを取得しています。
「Table」のところを任意のクラスに書き換えることで、
そのクラスのメンバを取得することができます。

今日の仕事で使う機会があったのでメモしておきます。
| Curl | 18:32 | comments(0) | - |
| 1/1PAGES |