10/04/29 21:57:57
>>605
updateでできました!
ありがとうございました_( . _ . )_
607:デフォルトの名無しさん
10/04/29 23:30:28
テクルトックで読み方あってる_
608:デフォルトの名無しさん
10/04/29 23:36:58
何度もすいません。
>>601の修正版で、
常に最新出力行が確認できるようににしたい
(現状、テキストボックスが画面出力に追従しない。。。)
のですが、何かうまい方法ってあるんでしょうか?
調べてみたんですけど、うまいこといかなくて。。。
-----
use Tk;
$window1 = MainWindow->new();
$frame1 = $window1->Frame()->pack();
$output = $frame1->Scrolled('Text', -scrollbars=>'se')->pack(-expand=>1, -fill=>'both');
for($cnt=0; $cnt<1000; $cnt++){
$output_tmp = "$cnt" . "\n";
$output->insert("end", $output_tmp);
$output_tmp = "";
$window1->update();
}
MainLoop();
-----
609:デフォルトの名無しさん
10/05/02 22:40:15
>608
君はイベント駆動モデルという物を全く理解していない。
>描画はevent loop(MainLoop)で実行されると思うので、MainLoopの前でsleepしたら
とも、
>ループを切り出して、適当なeventを契機に呼ばれるようにすれば良いと思う。
とも言われてるだろ?
画面描画とかは MainLoop() の中で発生してるんだってば。
その前のループの所の処理は既に終わっちゃってるの。
$window1 = MainWindow->new();
$frame1 = $window1->Frame()->pack();
$output = $frame1->Scrolled('Text', -scrollbars=>'se')->pack(-expand=>1, -fill=>'both');
$cnt = 0;
$output->repeat(1000, sub { # ここの処理が 1 秒単位で毎回呼び出される
$output->insert("end", "$cnt\n");
++$cnt;
});
MainLoop();
610:本田
10/05/02 23:45:07
>>608
Tk Documentation Table of Contents
URLリンク(www-users.cs.umn.edu)
fileevent Execute a callback when a file becomes readable or writable
URLリンク(www-users.cs.umn.edu)
after Execute a command after a time delay
URLリンク(www-users.cs.umn.edu)
tkwait Wait for variable to change or window to be destroyed
URLリンク(www-users.cs.umn.edu)
IO high level interface to Tk's 'fileevent' mechanism
URLリンク(www-users.cs.umn.edu)
TK/AFTER support class for Tk::Widget::after
URLリンク(www-users.cs.umn.edu)
611:デフォルトの名無しさん
10/05/05 01:36:11
>>608
package require Tk
pack [text .t] -side bottom -fill both -expand 1
pack [button .start -text Start] -side left
.start configure -command {RunCount 100}
proc RunCount {n} {
for {set i 1} {$i <= $n} {incr i} {
.t insert end $i\r\n
update
.t see end
after 200
}
tk_messageBox -message "End!!"
}
Tcl/Tkで書いたから適当にPerlに脳内変換して
612:592
10/05/21 21:14:28
ActiveTcl 8.5.8.2が出ていたので試してみましたが、8.5.8.1同様IMEが動くとwishが
落ちます。
一応、連絡しておきます。
613:デフォルトの名無しさん
10/06/02 19:48:15
Tcl/Tk超初心者なんですが教えて欲しいことがあります。
tcomを使ってInternetExploerでホームページを表示させて
そのホームページのソースを取得してソースを表示させたいのですが
ホームページの表示までは上手くいったんですがソースの取得ができません。
わかる方いらっしゃったらぜひ教えてください、お願いします。
途中までのソースなんですが
package require tcom
set ie [::tcom::ref createobject "InternetExplorer.Application"]
$ie Visible 1
$ie Navigate "URLリンク(www.yahoo.co.jp)"
ここまではできたんですがこのあとyahooのホームページのソースの取得方法
がわかりません、わかる方いらっしゃったらぜひお願いします。
614:デフォルトの名無しさん
10/06/02 22:19:30
ソースは普通にHTTPでとってくればいいんじゃないの?
615:デフォルトの名無しさん
10/06/03 09:36:16
>>614
返答ありがとうございます、初心者なのでHTTPでの取り方すらわからないのです。
もともとTcl/Tkでどうやってホームページの表示をさせるかがわからなくて
いろいろ調べた挙句tcomにいきついた次第です。できればtcomでできたらいいなー
というのが自分の希望なんですが、調べてみたんですがいまいちわからなくて
ここに行き着いたということです。
616:デフォルトの名無しさん
10/06/03 09:39:40
>>615
ほい。ぐぐれ。
URLリンク(tmml.sourceforge.net)
617:デフォルトの名無しさん
10/06/03 13:05:59
>>616
ありがとうございます、やってみます
618:本田
10/06/05 05:37:34
>>615
URI utilities
URLリンク(tcllib.sourceforge.net)
619:本田
10/06/05 06:11:07
>>618
package require uri
set u URLリンク(www.yahoo.co.jp)
set f index.html
set token [::uri::geturl $u]
if { [catch {::http::data $token} html] } {
puts stderr "Could not get $url\n$html"
exit 1
}
if { [catch {open $f w} fp ] } {
puts stderr "Could not open $f\n$fp"
exit 1
}
puts $fp $html
close $fp
620:本田
10/06/05 14:29:34
>>613
optcl
URLリンク(wiki.tcl.tk)
URLリンク(www.patthoyts.tk)
URLリンク(www.patthoyts.tk)
WippleWobble - A Mini Web Browser (for Windows)
URLリンク(wiki.tcl.tk)
621:デフォルトの名無しさん
10/06/30 07:31:52
初心者でpython2.6(tkinter)とtcl/tk 8.5を弄ってます。
widgetに入れず、Canvasのcreate_textに設定するwidthの様にheightを擬似的にでもどうにかして作りたいのですが何か良い方法は無いでしょうか。
ご教示お願い致します。
622:デフォルトの名無しさん
10/07/02 01:54:21
>>621
heightを作るっていう意味がわからない
623:デフォルトの名無しさん
10/07/02 08:08:21
pixel指定でその範囲に入らない状態の時は語尾に"..."を追加する物を作りたいです。
適当なtextの量自体を指定するしかないのでしょうか。
文字によってpixel幅が違うので結局label等(幅を取得したら捨てる。)
に入れ込むtextを一文字ずつlabelに入れて、そのlabel幅を取得し、
その幅から指定したpixel分のtextをcreate_textに入れ込めば出来そうですが・・
余りに遠回りで・・。
もう少し簡潔に文字数を制限したいのですが
tkがどう動作しているのか未だ良く分かっていません。
624:本田
10/07/02 22:52:59
>>623
プロポーショナルフォントを使わずに、
等幅のフォントを使えば、
計算が簡単になりそうです。
625:デフォルトの名無しさん
10/07/03 03:57:59
621,623です。
>>624
有り難うございます。
プロポーショナルフォントというんですね・・初めて知りました。
因みに自分足らない頭で623の内容をpythonのIDLEで書いてみたら
異様に重い上に、良く分からないエラーが出ました・・とほほ
後程、等幅フォントで再度書いてみます。
fontの高さには全角、半角も無いので
どこで改行されてるかさえ、得られれば
簡潔になるのでは、と
今の所textに直接pixel指定で改行を追加するモジュールを探しています。(どれもカラムっぽいですが・・)
font metricsも面白そうなのでついでに調べてます。
626:デフォルトの名無しさん
10/07/03 10:56:10
>>623
font measureで文字列のpixel幅を得られる
のは?
627:デフォルトの名無しさん
10/07/03 11:49:40
621,623,625です。
>>626
有り難うございます。
font measureで出来そうです。
628:本田
10/07/03 17:32:43
>>627
老婆心ながら、
一つのスクリーン上に一つのカンバスを使って複雑なウイジェットを作る以外に、
まず一つのスクリーンを複数のフレームに分割して、
一つ一つのフレーム上にメニュー、テキストやカンバスを配置する方法もあります。
629:デフォルトの名無しさん
10/07/03 20:28:35
621,623,625,627です。
>>628
有り難うございます。
カンバス自体は一応フレームに入っています。
・・がデザイン的にcanvasの内容をフレーム分けは難しいです。
まずgridで作成した所、重くて次にplace、そしてcanvas上にしています。
canvas上で作ると重いかと思っていたのですが、canvasで作ると割と軽快だったので
(textを入れる以前の話ですけれど)
canvasのままで来ているのと、canvasの自由度の高さが何より気に入っています。
canvasに変更する際からtextのこの問題がずっとネックだったので
解決出来そうで何よりです。
widgetに入れたくなかった理由としては、
折角canvasなので背景に画像を張り込める様にもしたかったからです。
マウスバインドもウイジェットに邪魔されず一つで掛けられますし。
キーバインドも勿論入れます。
どうしようも無くなった場合はplaceに戻ろうかと思っています。
630:デフォルトの名無しさん
10/07/19 14:33:01
xspin.tclというソフトを使用し始めたのですが、.pmlの拡張子をフリーのパッドソフトに関連付けたら、
xspin.tclを起動しようとしたら「このファイルの種類を開くプログラムを選択してください」とでるようになってしまいました。
どのプログラムを選択すればいいか分からないし、戻し方も分からないので助けてください。
631:630
10/07/19 14:48:22
自己解決しました
632:デフォルトの名無しさん
10/08/04 12:21:06
ActiveTcl8.5.7を使用しています。
最初に1を代入した変数を1ビットづつ左シフトしていくと80000000hの次は0hになってしまうのですが、
なにも指定しないと変数はUINT32で定義されているのでしょうか?
明示的にUINT64で定義する事は可能ですか?
set shift 1
for { set i 0 } { $i<64 } { incr i } {
set shift_h [format %016X $shift]
set shift [expr $shift << 1]
}
633:デフォルトの名無しさん
10/08/12 11:58:36
>>632
サーバ(Win/Linuxじゃないよ)用に自分でコンパイルした8.5.8でも同じ結果になった。
ソースを簡単に眺めたところ、内部32bit型→64bit型に拡張する処理は見つかったけど
なぜ情報落ちするのかは判らなかった。
バグ報告するのが良いと思う。
ひょっとして、64bit環境(OS)だと問題無いのかもしれない。(うちは全部32bit環境)
634:デフォルトの名無しさん
10/08/12 19:23:06
>>632
set shift 1
for { set i 0 } { $i < 64 } { incr i } {
puts [format %016lX $shift]
set shift [expr $shift << 1]
}
The fifth part of a conversion specifier is a size modifier, which must be ll, h, or l.
If it is ll it specifies that an integer value is taken without truncation for conversion
to a formatted substring. If it is h it specifies that an integer value is truncated to
a 16-bit range before converting. This option is rarely useful. If it is l it specifies
that the integer value is truncated to the same range as that produced by the wide()
function of the expr command (at least a 64-bit range). If neither h nor l are present,
the integer value is truncated to the same range as that produced by the int() function
of the expr command (at least a 32-bit range, but determined by the value of
tcl_platform(wordSize)).
URLリンク(www.tcl.tk)
マニュアル嫁。
635:633
10/08/14 00:43:23
>>634
う。そっちか。
まったく思いもしませんでした。笑ってやってください。
636:本田
10/10/02 02:16:11
[Activetcl] ActiveTcl 8.5.9.0 released
URLリンク(code.activestate.com)
637:デフォルトの名無しさん
10/10/11 19:15:11
IMEとの衝突は修正された?
638:592
10/10/12 07:22:49
>> 637
直ったようです。
text widgetで漢字を入力しても落ちなくなりました。
639:デフォルトの名無しさん
10/10/12 19:36:18
>>638
それは、ActiveTclのどのバージョンから?
640:592
10/10/14 00:15:17
直ったのは ActiveTcl 8.5.9.0
641:デフォルトの名無しさん
10/10/15 13:32:10
Tkのテキストボックスの文字列が変化したとき、それを知らせるコールバックはどれですか?
642:デフォルトの名無しさん
10/10/16 14:52:07
>>641
package require Tk
pack [text .text]
bind .text <Key> {puts "Pressed %K"}
URLリンク(www.tcl.tk)
マニュアル嫁
643:Perl忍者 ◆M5ZWRnXOj6
10/10/21 23:40:37
Perl/Tkやってるやつでてこいこら
644:Perl忍者 ◆M5ZWRnXOj6
10/10/21 23:50:25
おめえハッカーだろ 本田
645:Perl忍者 ◆M5ZWRnXOj6
10/10/30 18:13:15
Perl/TKでEntryフォームに文字を入力しようとすると
入力できません
なんか前にそれで設定をして うてるようにしたんですが
scimなんとか 入力はできるんですが 日本語入力ができません
どうすればいいですか教えてください
646:デフォルトの名無しさん
10/10/30 18:17:43
>scimなんとか 入力はできるんですが 日本語入力ができません
この文章どうやって打ってるんだよw
647:Perl忍者 ◆M5ZWRnXOj6
10/10/30 18:35:08
だからscimは、はいってんの
Perl/Tkでの入力のときできない
XMODIFIERS="@im=none"とやってもできない
なんで 教えて
648:Perl忍者 ◆M5ZWRnXOj6
10/10/30 18:36:20
XMODIFIERS="@im=none"
とやったら入力できるようになるけど
日本語入力ができない
重要:「日本語入力ができない」
教えて
649:デフォルトの名無しさん
10/10/30 18:55:11
ウヒョー
650:デフォルトの名無しさん
10/11/06 21:07:46
Perl/Tkなんてまだ使ってるやついんだな・・・。アホかと・・・
651:デフォルトの名無しさん
10/11/08 00:35:04
canvasにpolygonやlineで書いた絵を画像ファイルでセーブする方法はありますか?
652:デフォルトの名無しさん
10/11/08 00:45:32
標準Tkでも昔からPostscriptでセーブできる。拡張もいろいろ
653:デフォルトの名無しさん
10/11/08 10:11:47
Postscript以外は、できないでしょうか?
654:本田
10/11/08 21:51:18
>>653
> Postscript以外は、できないでしょうか?
GhostscriptでPostscriptをPDFやPNGに変換できるよ。
655:デフォルトの名無しさん
10/11/09 00:35:08
1 imgで画面上に表示してる部分はビットマップに変換できる。
2 tkpathっていうcanvasと互換性のある拡張がある。
656:Perl忍者 ◆V8M/4amdko
10/11/10 18:58:25
こたえられねえのかよつかええねえなかす
657:デフォルトの名無しさん
10/11/11 21:34:13
653の質問をしたものですが、例えばコマンドラインで
アクティブウインドウのスクリーンショットを取る外部アプリを起動すればできますか?
できればbmp,jpg,gif等に変換したいので。
658:デフォルトの名無しさん
10/11/12 09:48:34
Print Screen キーを押してからペイントで・・・ってのがお手軽かと。
*.psからフィルタで変換の方がスマートだけど。
659:デフォルトの名無しさん
10/11/12 13:28:10
実用的には、そうですがPostScriptは、使う人もPostScriptの環境が必要なので。
PSからの変換もいろんなソフトを使いましたが、思った様に上手くいきません。
逆に変換フィルタで良いのがあれば、教えてください。
660:デフォルトの名無しさん
10/11/12 13:34:56
>>659
canvasの内容をSVG化して書き出す方法が紹介されてる。
URLリンク(wiki.tcl.tk)
他にはImageMagickを操作して直接画像を作るかだなぁ。
661:デフォルトの名無しさん
10/11/12 21:31:10
>>660
これは、凄い。
itemgetで情報をもってきて、imageで再描画してるみたいだ。
でも、このやり方だとXBM情報とかは再生できませんね。
662:デフォルトの名無しさん
10/11/14 20:28:32
tkにはワークシートとかスプレッドシートのようなものはあるんですか?
663:デフォルトの名無しさん
10/11/14 20:53:56
あるよ。
664:本田
10/11/16 06:10:49
Spreadsheets in Tcl-Tk
URLリンク(wiki.tcl.tk)
665:本田
10/11/18 08:32:31
TCLによるXMLおよびWeb Servicesのプログラミング、第1回: 入門編
URLリンク(www.ibm.com)
666:本田
10/11/25 06:14:36
Instancier des objets COM avec Tcom
URLリンク(wfr.tcl.tk)
MS Office - Excel
package require tcom
set application [::tcom::ref createobject "Excel.Application"]
set workbooks [$application Workbooks]
set workbook [$workbooks Add]
set worksheets [$workbook Worksheets]
OpenOffice - Calc
package require tcom
set application [::tcom::ref createobject "com.sun.star.ServiceManager"]
set desktop [$application createInstance com.sun.star.frame.Desktop]
array set arguments {}
set worksheets [$desktop LoadComponentFromUrl private:factory/scalc _blank 0 [parray arguments]]
667:デフォルトの名無しさん
10/11/25 21:53:26
>>663
>>664
お答えくださいってどうもありがとうございました。
たいへん参考になりました。
668:デフォルトの名無しさん
10/11/26 21:06:15
コチョコチョ
669:本田
10/11/28 11:24:10
[Tcl-announce] ActiveTcl 8.6.0.0 Beta 4 released
URLリンク(code.activestate.com)
670:本田
10/11/28 15:00:49
John Ousterhout
Professor (Research)
Department of Computer Science
URLリンク(www.stanford.edu)
671:一応ティクラー
10/12/03 17:00:29
651>>
canvasにpolygonやlineで書いた絵を画像ファイルでセーブする方法はありますか?
回答:
image create photo image123 -format window -data .any.win
image123 write C:/windows/work/your.jpg
モニタはみ出してるやつには別の対処方法ある。
Windows7 だと「遅い」ときがある。
672:デフォルトの名無しさん
10/12/05 01:02:12
>>671
モニタはみ出たらどうやんの?
このやりかただと他のウィンドウが重なっててもうまくいかないんだよな。
673:本田
10/12/06 23:51:47
PLplot
URLリンク(plplot.sourceforge.net)
PLplot is a cross-platform software package for creating scientific plots.
To help accomplish that task it is organized as a core C library,
language bindings for that library,
and device drivers which control how the plots are presented in non-interactive and interactive plotting contexts.
Plplotter widget
URLリンク(tuvalu.santafe.edu)
PLplot is relatively small, portable, freely distributable, and is rich enough to satisfy most users.
It has a wide range of plot types including line (linear, log), contour, 3D, fill, and almost 1000 characters
(including Greek and mathematical) in its extended font set.
The package is designed to make it easy to quickly get graphical output;
only a handful of function calls is typically required.
For more advanced use, virtually all aspects of plotting are configurable.
674:本田
10/12/06 23:53:03
Cpptcl
URLリンク(tuvalu.santafe.edu)
Cpptcl is a tool to allow simple integration of C++ objects with Tcl (and hence Tk).
It includes automatic support for Tcl argument parsing,
command completion, container classes, run-time type information,
archival of object creations, ...
Cpptcl is a pair of loadable Tcl extensions which work fine under Unix and MacOS
(and presumably other platforms too).
675:デフォルトの名無しさん
10/12/07 21:17:06
>>671
ありがとうございます。
676:デフォルトの名無しさん
10/12/07 21:18:20
ところで、Tcl8.5.9でファイルのバイナリセーブの際に
fconfigureで -translation binaryとしてもファイルの最後に0x0aが出るんだけど。
これは、バグ?それとも回避方法がありますか?
677:デフォルトの名無しさん
10/12/12 17:07:13
>>676
それ以外のバージョンでは出ないってこと?
678:本田
10/12/12 23:29:57
[TCLCORE] ActiveTcl 8.5.9.1 released
URLリンク(code.activestate.com)
679:デフォルトの名無しさん
10/12/15 21:18:44
英語もロクに読めないへたれなのですが、
Tkの日本語リファレンスってどこかにないでしょうか?
8.3対応っぽいのはぐぐったら見つかりましたが、
今使っている8.4とは微妙に違っている気がします。
680:デフォルトの名無しさん
10/12/16 11:49:49
>>676
puts -nonewline
681:デフォルトの名無しさん
10/12/16 22:11:23
>679
URLリンク(www.ne.jp)
682:デフォルトの名無しさん
10/12/18 19:28:30
>>680
ありがとうございます。
683:デフォルトの名無しさん
10/12/18 23:59:05
Iwidgetsが使いたいのですが、使えないとです…
環境は ActivePerl 5.12.2 build 1203 + Tkx 1.09 です
スクリプト中に Tkx::package_require("Iwidgets"); と書けば使えるようになるらしいですが
can't find package Iwidgets とエラーが出てしまいます
(ActivePerl 5.10.x の頃は使えてた記憶があるのだけど…
だから Iwidgets を使ってるスクリプトが手元にあるわけだし…)
たぶん Perlインストールフォルダ\lib\auto\Tcl\tkkit.dll の中に
Iwidgets が含まれてないんだと思いますが…
ActiveTcl 8.5.9.1 もインストールしてみましたが、
こちらは teacup install Iwidgets をしたら、Tcl/Tkのスクリプト上で Iwidgets が使えました
(もしかしたら標準で入ってたかも…>Iwidgets)
ActivePerl + Tkx で Iwidgets を使えるようにできないものでしょうか?
何か手はないですかね…?
684:683
10/12/19 04:13:51
5.10.1を入れてみたけどダメだった。昔使えてたと思ったのは勘違いだったみたい
もしくは極めて特定のバージョンだけがIwidgetsを含んでいたか
Strawberry Perl を入れてみたけど cpan Tcl でエラーが出て Tkx まで入らない
なんかダメっぽい…
まあ元々、Tcl/Tkの成果物を横から掠め取ろうとしてるようなものですし
基本的なところが動くだけでも凄いのかもしれないですね…>hoge/Tk
Tkの真の力を発揮したかったらTcl/Tk使え、ということか…
685:683
10/12/19 09:08:50
連続カキコして申し訳ない
解決しましたので一応報告を
環境変数 PERL_TCL_DL_PATH で tcl85.dll を指定すれば行けるみたいです。スレ汚しスマソ
686:デフォルトの名無しさん
10/12/20 05:26:01
Tcl/Tkのスクリプトをexe化したいのですが
sdx.batってどこにあるんでしょう? というかどれが最新版なんでしょう?
URLリンク(code.google.com)
tclkitsh , tclkit , sdx.kit はこれが最新版かと思うんですが
sdx.bat は見つからず…
どこから入手すればいいんだろう?
687:デフォルトの名無しさん
10/12/20 10:07:44
URLリンク(www.equi4.com)
@tclkitsh sdx.kit %1 %2 %3 %4 %5 %6 %7 %8 %9
内容はこんだけ。更新されてないけど今でも使えるよ。
688:デフォルトの名無しさん
10/12/20 10:52:19
>>687
ありがとうございます。助かります
中身見てズッコケました
これならバージョンどうこうなんて関係ないですな…㌧でした
689:デフォルトの名無しさん
10/12/21 20:44:41
これは、凄い。使わせてもらいます。
690:デフォルトの名無しさん
10/12/21 23:01:00
>>681
ありがとうございました。助かります。
EUCだったんですね。
691:本田
10/12/23 10:59:09
TcomExcel - Excel utility package
URLリンク(www.posoft.de)
TcomExcel is a utility package based on Tcom to script Excel functionality with Tcl.
Notes:
* No manual or online help is available.
* TcomExcel has been tested with Excel 97, 2000, 2003 and 2007.
692:本田
11/01/09 21:31:18
Sockspy
URLリンク(sockspy.sourceforge.net)
ockspy lets you watch the conversation of a Tcp client and server.
Sockspy acts much like a gateway: it waits for a Tcp connection, then connects to the real server.
Data from the client is passed onto the server, and data from the server is passed onto the client.
693:本田
11/01/10 20:15:30
Odbcisql is a windowing SQL processor for databases with ODBC interfaces.
URLリンク(wiki.tcl.tk)
fURLリンク(ftp.tcl.tk)
fURLリンク(ftp.tcl.tk)
TclODBCでnvarcharを使えるようにする
URLリンク(reddog.s35.xrea.com)
URLリンク(reddog.s35.xrea.com)
URLリンク(sourceforge.net)
URLリンク(msdn.microsoft.com)(VS.85).aspx
694:お父さん
11/01/11 21:16:24
>651 canvasにpolygonやlineで書いた絵を画像ファイルでセーブする方法はありますか?
→確かめた訳ではないけどこんなものがあるらしい
pdf4tcl dumping canvas to pdf
使えるフォントが英文用の3種のみなので日本語はだめだが、純tclでpdfするのはすごい。
695:デフォルトの名無しさん
11/01/11 21:18:45
そんなもん入れんでも標準でepsにできるじゃまいか・・・
vista+ActiveTclではフォントをArialとかにしないとeps化できないけどな~(MS UI Gothicが悪い?)
696:本田
11/01/12 07:01:49
>>693
Microsoft ODBC Desktop Database Drivers
URLリンク(msdn.microsoft.com)
Text File Driver Programming Considerations
URLリンク(msdn.microsoft.com)
Text File Data Types
URLリンク(msdn.microsoft.com)
SQLGetInfo Returned Values for Text Files
URLリンク(msdn.microsoft.com)
Other Text File Driver Programming Details
URLリンク(msdn.microsoft.com)
Defining Text Format (Text File Driver)
URLリンク(msdn.microsoft.com)
Schema.ini File (Text File Driver)
URLリンク(msdn.microsoft.com)
697:本田
11/01/12 23:18:16
mysqltcl - Tcl Mysql Interface (Version 3.05
URLリンク(www.xdobry.de)
MySQL 5.1 リファレンスマニュアル
13.11. CSV ストレージエンジン
URLリンク(dev.mysql.com)
CSV ストレージエンジンはコンマ区切りの値を使ったフォーマットでデータをテキストファイルに保存します。
24.1. MySQL Connector/ODBC
URLリンク(dev.mysql.com)
698:本田
11/01/15 08:37:16
>>696
Much ADO About Text Files
Greg Stemp
Microsoft Corporation
March 5, 2004
Summary: Demonstrates how script writers can use Microsoft ActiveX Database Objects (ADO) techniques to retrieve data from logs and other text files.
URLリンク(msdn.microsoft.com)
ADO (Visual Fox Pro oledb) - read .dbf with tcom
URLリンク(wiki.tcl.tk)
699:本田
11/01/15 15:15:07
SourceForge.JP、個人向けGitリポジトリ/ストレージサービス「PersonalForge」をリリース
URLリンク(sourceforge.jp)
OSDNは1月13日、同社の運営するオープンソースソフトウェア開発サイト「SourceForge.JP」において、
個人向け開発支援ツール「PersonalForge」をリリースした。
個人用Gitリポジトリおよびファイル頒布用のストレージサービス(ファイルマネージャ)が提供される。
Git ユーザマニュアル (バージョン 1.5.3 以降用)
URLリンク(www8.atwiki.jp)
Git
URLリンク(wiki.tcl.tk)
gitk
URLリンク(wiki.tcl.tk)
Historically, gitk was the first repository browser.
It's written in Tcl/Tk and almost the whole development history is present in the repository as referenced to on top of this page.
Regularly merges are performed in the main git repository.
700:本田
11/01/16 12:13:38
>>699
Sun Yiyi氏のGit Source Control Provider for Visual Studio 2008/2010の紹介
URLリンク(www.infoq.com)
Git Source Control Provider
URLリンク(visualstudiogallery.msdn.microsoft.com)
>>698
Microsoft Jet SQL リファレンス
URLリンク(office.microsoft.com)
Microsoft Jet 4.0 データベース エンジン ドライバを初期化する
URLリンク(office.microsoft.com)
外部データのWindows レジストリ設定
URLリンク(office.microsoft.com)
ODBC アクセスのために Microsoft Jet データベース エンジンを設定する
URLリンク(office.microsoft.com)
Microsoft OLE DB Provider for Jet で接続プロパティを使用する
URLリンク(office.microsoft.com)
テキスト データ ソース ドライバを初期化する
URLリンク(office.microsoft.com)
701:本田
11/01/16 21:53:27
>>693
Database Fishing Tool (DaFT) is a front-end to any database that can be connected to with an ODBC driver.
URLリンク(daft.sourceforge.net)
New Version: 1.4.8.1
Released: 08 OCT 2010
This is a minor release, with some major bugfixes.
* Fixed an issue with column information with non-English ODBC driver
* Fixed the problem with data sheet column headings for new query results
702:本田
11/01/21 22:18:38
Miscellaneous Tcl packages
URLリンク(vectorstream.com)
Packages using the Tcl >= 8.5 module system
703:本田
11/01/24 06:41:26
Soar (認知アーキテクチャ)
URLリンク(ja.wikipedia.org)
Soar(SOAR)とは、カーネギーメロン大学の John Laird、アレン・ニューウェル、Paul Rosenbloom が作成した認知アーキテクチャの一種。
認識とは何かという観点と、それに基づいた人工知能用のプログラムアーキテクチャの観点から構成される。
1983年に最初に作成され、1987年に論文として発表されて以来、多くの人工知能研究者が人間の行動の様々な観点の認知モデルを作成するのに Soar を用いている。
Welcome to the Soar Home Page
URLリンク(sitemaker.umich.edu)
URLリンク(ai.eecs.umich.edu)
Soar is a general cognitive architecture for developing systems that exhibit intelligent behavior.
Researchers all over the world, both from the fields of artificial intelligence and cognitive science,
are using Soar for a variety of tasks.
URLリンク(sourceforge.net)
704:本田
11/01/30 12:22:00
Tcl 8.5 Network Programming
URLリンク(www.packtpub.com)
[PDF]
Sample chapter - Tcl 8.5 Network Programming
URLリンク(www.packtpub.com)
Tcl 8.5 Network Programming [ペーパーバック]
URLリンク(www.amazon.co.jp)
705:デフォルトの名無しさん
11/02/04 21:47:25
wish8.4を使っています。
set pipe [open "|hoge"]とパイプを開いて、
場合によりhogeを途中で終了させたいのですが、
close $pipeやexec kill [pid $pipe]とやると、
どうしてもApplication Errorのダイアログが勝手に出てしまいます。
もう少し穏便に終了させたいのですが、この手のエラーを抑制するにはどうすればよいでしょう?
706:デフォルトの名無しさん
11/02/04 22:11:44
catch
707:デフォルトの名無しさん
11/02/05 11:36:25
過疎スレ(過疎言語?)かと思ったら質問に20分でレスが付くとは。
GJすぐるw。本人じゃないけど礼を言いたいよ。
708:デフォルトの名無しさん
11/02/05 14:37:39
>>706
ありがとうございます、例外の捕捉ができるのですね。
709:デフォルトの名無しさん
11/02/05 23:58:42
このスレじゃないけど質問から1分で的確な回答が付いてたのを見たことがある
710:デフォルトの名無しさん
11/02/06 00:03:35
そういうのは自演だから
711:本田
11/02/06 17:02:07
Great Unified Tcl/Tk Extension Repository
URLリンク(www.flightlab.com)
712:デフォルトの名無しさん
11/02/13 08:27:10
>>707
たまに本田氏が本気を出す時がある。
いりこ出汁的な意味で。
713:デフォルトの名無しさん
11/02/14 22:33:41
話題は無いけど監視はしてる
714:本田
11/02/16 06:58:49
My Home Page: Jean-Luc Fontaine
URLリンク(jfontain.free.fr)
Software (source, documentation, miscellaneous):
For Tcl versions 8.3.x and 8.4.x:
tclperl
a Perl package for Tcl
URLリンク(jfontain.free.fr)
TclPerl/TclPython
URLリンク(www.ellogon.org)
tclpython
a Python package for Tcl
URLリンク(jfontain.free.fr)
TclPerl/TclPython
URLリンク(www.ellogon.org)
715:本田
11/02/19 23:56:32.45
Tcl/Tk Stuff
URLリンク(www.cs.nott.ac.uk)
Tcl interface to the NJS JavaScript interpreter library (see njs-javascript.org). Note: LGPL licensed.
URLリンク(www.cs.nott.ac.uk)
716:本田
11/02/20 23:10:04.75
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
717:本田
11/02/22 21:20:38.31
>>715
Embed javascript in Tcl
URLリンク(code.google.com)
This project creates a Tcl extension to embed a javascript interpreter (Spidermonkey) in a Tcl/Tk application.
718:本田
11/03/26 00:26:40.20
Ayam
URLリンク(ayam.sourceforge.net)
The current stable version is 1.19, released 16. Mar 2011.
719:デフォルトの名無しさん
11/04/03 15:32:59.92
% puts $tcl_version
8.4
% puts $tcl_patchLevel
8.4.19
% ls -tr
a.txt b.txt c.txt
% ls -tr *.txt
/bin/ls: *.tclにアクセスできません: そのようなファイルやディレクトリはありません
child process exited abnormally
% exec ls -tr *.txt
ls: *.tclにアクセスできません: そのようなファイルやディレクトリはありません
なんでダメなの?
720:719
11/04/03 15:37:22.20
/bin/ls: *.txtにアクセスできません
の間違いです。すんません。
721:本田
11/04/03 21:24:48.73
tkcon.tcl使ってみたら?
722:デフォルトの名無しさん
11/04/04 23:37:12.86
globとか。
723:デフォルトの名無しさん
11/04/05 22:34:50.19
>>719
OSは?
724:デフォルトの名無しさん
11/04/06 10:52:07.57
>>719
eval exec ls [glob *.txt]
725:デフォルトの名無しさん
11/04/17 23:05:54.75
Tcl、GoogleのNative Clientに対応した「NaTcl」を発表
URLリンク(slashdot.jp)
> スクリプト言語TclをGoogleのNative Client環境で実行可能な「NaTcl」が発表された。
> NaTclを使用することでTclをWebブラウザ上で実行可能となり、Tclプログラムで
> Google ChromeのDOM(Document Object Model)に直接アクセスできる。これにより、
> JavaScriptの代わりにTclでWebアプリケーションを作成することが可能となる。
> また、Natice Client向けのTk、「NaTk」もまもなくリリースされるとのこと。
これでTcl/Tkの新しい本が出るようになるかな?
726:デフォルトの名無しさん
11/04/17 23:17:37.46
昔Tcletってあったよね。
727:デフォルトの名無しさん
11/04/18 09:11:17.63
>>726
今でもある
728:デフォルトの名無しさん
11/04/19 00:21:24.65
すらどで話題になりなおかつそこそこコメントが付いてることにワシは感動しておるw
まだ見放されてなかったw
729:デフォルトの名無しさん
11/04/20 15:53:49.10
ペイントソフトをつくろうと思っています
TkCanvasではTkcLine等を用いたベクタ形式の画像処理しかできないようですが
BMPファイル画像等の任意のピクセルの値の読み書きといった
いわゆるペイント系の処理はどのWidgetを使えば実装できるのでしょうか
ご教示お願いします
730:デフォルトの名無しさん
11/04/27 20:32:05.36
できますよ
731:デフォルトの名無しさん
11/05/03 23:02:06.65
>>729
難しいことなんて何もないよ。
package require Img
image create photo image1 -file sample.bmp
canvas .c
.c configure -width [image width image1] -height [image height image1]
.c create image 0 0 -image image1 -anchor nw
pack .c
set rgb [image1 get 10 10]
tk_messageBox -type ok -message "X=10,Y=10のRGB値:$rgb"
for {set i 1} {$i < 100} {incr i} {
image1 put #ff0033 -to $i $i
}
732:デフォルトの名無しさん
11/05/07 22:56:08.08
バイナリファイルを読み込んで、編集して、別名で書き込むにはどうしたら良いでしょうか。
open、binary format、binary scan、puts、getsあたりを使えばできるだろうと思い、試行錯誤したのですが
どうしてもうまくいきません。
Tclは書籍(特に和書)が少ないのでwebの情報が頼りですが、
思ったような情報が見つからず困っています。
733:デフォルトの名無しさん
11/05/08 00:39:37.94
そのコマンド列にfconfigureコマンドが無いのが気になった。
734:デフォルトの名無しさん
11/05/08 00:55:01.94
>>733
確かにfconfigureも必要かもしれませんね。
できれば一部のデータを置換して別名で保存するようなサンプルが見てみたいです。
735:デフォルトの名無しさん
11/05/08 01:34:03.82
まず、試行錯誤してみたコードを貼り付けてみたらどうですか
適当な1バイトを読んでその値を2倍して別ファイルに書き込むのは13行くらいでできた。
736:デフォルトの名無しさん
11/05/08 01:49:08.08
ただファイルを読んでそのまま書き込むだけでも失敗してます。
set fileID [open IM000001]
set fileID2 [open IM000002 w]
fconfigure $fileID -translation binary
set strvar [read $fileID]
binary scan $strvar H* value
set len [string length $value]
puts $fileID2 [binary format H$len $value]
close $fileID
737:736
11/05/08 01:53:11.25
ちなみにPythonでは簡単に成功しました。
import re
infile = open("IM000000", 'r')
outfile = open("COPYDCM", 'w')
data = infile.read()
data = re.sub("20110214911005", "99887766554433", data)
outfile.write(data)
infile.close()
outfile.close()
738:736
11/05/08 01:56:24.08
737のスクリプトはIM000000というファイルの20110214911005を99887766554433に置換して
COPYDCMという名前で保存するだけです。
Tclではその程度ですら自分にはできません。
739:デフォルトの名無しさん
11/05/08 02:01:45.23
少なくとも
fileID2 にも -translation binary が必要で、puts に -nonewline オプションが必要だともう。
740:736
11/05/08 02:06:42.32
>>739
ご指摘の通りにしたら正常に動作しました。
これがわかれば置換等の編集をして保存することも難しくないかもしれません。
頑張ってみます。
ありがとうございました。
741:733 735 739
11/05/08 02:15:08.51
どういたしまして。
Pythonが使えるのになぜTclなんだという疑問がありますが、Tcl使いが増えるとちょっとうれしい。
742:デフォルトの名無しさん
11/05/10 20:13:53.27
あるディレクトリ内にあるファイルのパス名のリストを得るにはどうしたら良いでしょうか?
同じ階層だけであればglobで簡単にできますが、
下層にあるディレクトリ内のファイルも全て対象にしたいのです。
743:デフォルトの名無しさん
11/05/10 21:29:56.14
globを再帰でつくる
とか、
Tcllibパッケージのfileutilを使う
package require fileutil
::fileutil::findByPattern . -glob *
744:デフォルトの名無しさん
11/05/12 00:00:56.94
Tcl/Tkによるバイナリエディタ
URLリンク(reddog.s35.xrea.com)
745:デフォルトの名無しさん
11/05/19 00:16:38.55
>>741
自分はこれからTcl/Tkを覚えようかとしてるんですが、この言語けっこう恵まれてません?
まぁ、自分のニーズもあるんですが、
・スクリプトで、GUIを手軽に書ける
・グラフの描画ライブラリがある(クリック可能)
・他言語との連携ができる
・単独で動作するバイナリができる
・言語仕様が簡単
・クロスプラットフォーム
・オープンソース
・枯れてる
この条件だとPythonでもよかったんですが、Pmw.Bltはちと不安で…。
自分でメンテ+拡張しようにも、結局内部でTkコマンド呼んでるだけだったんで、なら、ということで。
746:デフォルトの名無しさん
11/05/22 00:30:34.87
なぜかユーザーは少ない。最近はちょっと増えてきた気もするが
8.3~8.4のころは本当に見向きもされてなかった
747:デフォルトの名無しさん
11/05/22 23:15:17.27
PythonでTkinterを介してTkを利用するのって難しすぎじゃね?
Tcl/Tkに慣れすぎると、Tkinterが煩わしくて仕方ない。
どうしてもPythonを使わざるをえない場合は仕方ないけど
できるだけTcl/Tkでやりたくなる。
748:デフォルトの名無しさん
11/05/23 23:08:54.27
まあPython使うときはTk以外の選択肢いっぱいあるのでTk使わなくてもいいんでは
749:デフォルトの名無しさん
11/06/08 22:15:40.29
Tclってfork()できないのがつらい。
TclXはちょっと...
750:デフォルトの名無しさん
11/06/09 20:54:44.14
誰かWin/Linuxでドラッグ&ドロップができるようになる拡張、
8.5以降に対応しているので知らんかね…
とりあえずTkDND 2.2を試して見てるんだけど、8.5には対応
してないらしく、何ヶ所かバグを潰してXConvertSelectionまで
辿り着いたとこで、手詰まった。
※XConvertSelectionをLD_PRELOADでフックして、ちゃんと
Timeを与えるようにしたのにtimeoutになる、なぜだ…
751:デフォルトの名無しさん
11/06/11 15:06:12.77
TkDNDのfixかなり粘ったけど、これは無理。
Tk本体のselection getもtext/uri-listに対応してなかったり、かなり根が深そう。
これ修正するくらいだったら、一から実装したほうが多分早い。くそぅ。
752:デフォルトの名無しさん
11/06/12 13:33:18.93
誰か詳しい方、Tcl_CreateThreadについて教えてください…
拡張の処理に時間のかかる部分をThread化して、終了をvwait bgstatとかで
待とうとしてるんですけど、URLリンク(www.tcl.tk)のマニュアルには
「スレッドは親のinterpに触ってはいけない」とか書いてあるんで、スレッドから
set bgstatすることはできないようなのです。
このあたり、普通はどういう処理をするんでしょうか?
サンプルコードの場所なり、このソース読めば判るんじゃね、でも構わないんで、
なにかヒントをお願いします。
(vwaitのEXAMPLEにあるsocketコマンドは勘弁してください、挫折しました)
753:デフォルトの名無しさん
11/06/12 17:44:41.87
>>752
Tcl_CreateThread()ということは、Cで拡張を書いている?
だったら、Tcl_AsyncMark()が使えると思う。
Tclのthreadコマンドだったら、thread(n)に書いてあるように、thread::sendを
使えば、threadの結果をvwait出来ると思う。
754:デフォルトの名無しさん
11/06/12 18:28:11.50
>>753
Thanks!
CなのでTcl_AsyncMarkですが、マニュアルを読む限りそれっぽい!
とりあえず、何かサンプル書いて確かめてみます。
755:デフォルトの名無しさん
11/06/12 19:33:11.70
…あれ?
自分の理解では、これで合ってるはずなんですが…
スレ汚し失礼。
----------
#include <stdio.h>
#include <unistd.h>
#include <tcl.h>
static Tcl_AsyncHandler async_handle;
static int proc_finished(ClientData clientData, Tcl_Interp *interp, int code)
{
Tcl_SetVar2Ex(interp, "bg_stat", NULL, Tcl_NewIntObj(1), TCL_LEAVE_ERR_MSG);
printf("bg_stat has been set to 1.\n.");
return code;
}
Tcl_ThreadCreateType threaded_proc(ClientData clientData)
{
sleep(5);
Tcl_AsyncMark(async_handle);
}
static int asynctestHandleProc(ClientData data, Tcl_Interp* interp, int objc, Tcl_Obj* CONST objv[])
{
Tcl_ThreadId idPtr;
Tcl_CreateThread(&idPtr, threaded_proc, NULL, TCL_THREAD_STACK_DEFAULT, TCL_THREAD_JOINABLE);
return TCL_OK;
}
756:デフォルトの名無しさん
11/06/12 19:34:05.54
DLLEXPORT int Asynctest_Init(Tcl_Interp* interp)
{
async_handle = Tcl_AsyncCreate(proc_finished, NULL);
Tcl_CreateObjCommand(interp, "asynctest", asynctestHandleProc, NULL, NULL);
return Tcl_PkgProvide(interp, "asynctest", "0.0.1");
}
----------
#!/usr/bin/env tclsh
load [file join . libasynctest[info sharedlibextension]] asynctest
set bg_stat 0
set wait_stat 0
asynctest
puts "bg_stat is $bg_stat."
after 6000 {set wait_stat 1}
vwait wait_stat
puts "bg_stat is $bg_stat."
----------
$ ./asynctest.tcl
bg_stat is 1.
セグメンテーション違反です
757:デフォルトの名無しさん
11/06/12 20:18:25.01
Tcl_SetVar2Ex呼ぶとこでinterpがNULLになってる…
なんか勘違いしてるっぽいですね。
758:753
11/06/12 21:15:52.82
>>755
Tcl_AsyncMark(3)の
It is also possible for proc to be invoked when no interpreter is active.
そのものでは?
interp作る場合も注意が必要かな。tcllibとかにも注意。
親Threadにthread::sendでincr varとかを投げるほうが良いような気がしてきたけど。
759:デフォルトの名無しさん
11/06/12 21:53:20.76
>>758
ありがとうございます、仰る通りな気がします。
Tclのソースでも、
generic/tclAsync.c: Tcl_AsyncInvoke()
If invoked from Tcl_Eval just after completing a command, points to interpreter. Otherwise it is NULL.
generic/tclTest.c: AsyncHandlerProc()
this (interp==NULL) should not happen, but by definition of how async handlers are invoked, it's possible.
とか書いてありました。
ほぼUndocumentedで、これはない…
Tcl覚え始めてから、使う拡張ことごとく酷い目に合わされてるんで、
正直、使う拡張は最低限にしたく。
で、結局Tcl_AsyncCreateの第二引数にinterp渡して、無理矢理
proc_finishedで使えば、とりあえずは動くようです(Evilですが…)。
仕組み上ではこれで悪くないはず?なので、これで行こうと思います。
ほんとにありがとうございます。
760:758
11/06/13 00:33:27.18
>>759
どこで見たか思い出ないけど、Tcl_AsyncCreate()した時(=拡張のロード時)に
interpを保存しておいて、AsyncHandler()の引数がNULLの場合は保存したinterpを
使っていた。同じことをして動いた記憶はある。
引数がNULLということはコマンドを実行していないので、保存していたinterpを
使っても問題にはならないらしい。
逆に、複数のinterpが存在するとAsyncHandler()が呼ばれた時に渡されるinterpが
通知先である保証が無いのかな?
NULLでないのは何らかのコマンドが終了した瞬間だから、保存していたinterpを
使っても安全な気もするから、実行するコマンドが絶対に成功するようにすれば
それでいいんでは?
761:デフォルトの名無しさん
11/06/13 23:10:25.66
>>760
おぉ、詳細なご説明ありがとうございます。
ぼんやりとしていた理解が、明確になった気がします。
やっぱり同じ事を考えた方はいらっしゃるんですね。
というか、スレッドの終了をvwaitで待ちたいとか割とありえる状況な気がしますが、
ぐぐってもKodersでもまともにヒットしないってどういうこと…
この辺がニッチな言語の、もの悲しいとこですね。
762:デフォルトの名無しさん
11/06/16 00:12:12.28
ActiveTcl の8.4 から8.5に移行しようとしてるんだけど、8.5でなんかエクステンションが
すごく減ってない? 例えば8.4であったTclXMLが8.5には見当たらない。 インストールしたのは
ActiveTcl8.5.9.2.294317-linux-ix86-threaded.tar.gz. ドキュメントにはあるんだけど...
URLリンク(docs.activestate.com)
だいたい、8.4のtar玉は28Mあったのに8.5は20Mしかない
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
763:762
11/06/16 02:37:19.87
>>116-119
に解答がありました。 失礼しました。
764:天使 ◆uL5esZLBSE
11/07/05 02:14:58.01
↓↓
「「「「「「「「「 に解答がありました。 失礼しました。 」」」」」」」」」(爆ッゴミッッ!
765:デフォルトの名無しさん
11/07/06 17:28:55.22
↓
<<<<<<<<<<<<< 「「「「「「「「「 に解答がありました。 失礼しました。 」」」」」」」」」(爆ッゴミッッ! >>>>>>>>>>>>>(キリッ!!!きリッ!!!!
↑↑(きリキリッッ!キリ
土方が何をほざいて(笑)
天使#test_s
「天使の煽り」の提供でお送りしました
766:デフォルトの名無しさん
11/07/07 21:59:23.84
>>763
それは2007年当時の話。今のActiveTclでは
teacupで必要な拡張をダウソするのがナウ。
767:本田
11/07/11 23:50:09.19
[Tcl-announce] ActiveTcl 8.5.10.0 released
URLリンク(code.activestate.com)
768:本田
11/07/12 00:00:32.94
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
769:本田
11/07/12 21:01:46.78
Teacup
URLリンク(wiki.tcl.tk)
Teacup provides access to the Tcl Extension Archive.
It is the client to the TEApot server.
It is distributed with ActiveTcl by ActiveState.
770:デフォルトの名無しさん
11/07/26 13:53:55.22
canvasで書いた円と線の交差判定をしたいです。
計算しなくてもできるって聞いたんですがどうすればいいですか?
771:本田
11/07/30 06:39:19.48
円じゃなくて長方形領域ようだけど。
URLリンク(homepage3.nifty.com)
pathName addtag tag overlapping x1 y1 x2 y2
x1 y1 x2 y2 を座標とする長方形領域に少しでも重なるアイテムに対して tag で示されるタグを付けます。 x1 は x2 以下、y1 は y2 以下の数値でなければなりません。
772:本田
11/07/30 06:43:22.91
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
773:本田
11/07/30 06:52:55.54
×URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
774:デフォルトの名無しさん
11/08/03 22:02:33.46
Tclって複数行にわたるコメントってできるの?Cの/* ...
... */みたいな。
エディタに頼って全行頭をイゲタるしかないのか。
if 0 {
} ってのもなんだかなぁ...
775:デフォルトの名無しさん
11/08/03 22:39:32.06
どこのJava
776:デフォルトの名無しさん
11/08/05 22:47:02.97
>>774
できない。諦めろ。
777:デフォルトの名無しさん
11/08/05 22:48:49.89
proc rem comment {}
rem {
こめんととめんと
こめんとこめんとおおおお!!!
}
778:デフォルトの名無しさん
11/08/06 00:08:22.24
コメント途中に閉じ中カッコであぼーん
779:デフォルトの名無しさん
11/08/06 17:21:09.88
# コメント1\
コメント2\
コメント3#
でいけそうだけどどうかな?
# もコマンドみたいなものだから \ で続けて書けそうな気がする
最後の # は無くてもいいけど終端という意味で
780:デフォルトの名無しさん
11/08/06 21:28:04.24
それは毎行つけるので行頭#とあんまり大差ないな
781:デフォルトの名無しさん
11/08/07 08:03:02.17
Emacsで範囲指定して
M-x comment-region
782:デフォルトの名無しさん
11/08/09 19:15:00.11
C風。
proc /* {script} {}
proc */ {} {}
/* {
puts hello
puts hello
puts hello
}; */
HTML風。
proc <!-- {script} {}
proc --> {} {}
<!-- {
puts hello
puts hello
puts hello
}; -->
783:デフォルトの名無しさん
11/08/09 21:18:47.70
set comment {
コメント
}
>>782 と >>777 と同じく、中括弧がバランスしないと破綻する。
中括弧だけなら、
set comment "
コメント
"
という手もあるけど、" と カギ括弧[] を意識しないといけない
784:デフォルトの名無しさん
11/08/09 21:26:01.94
#コマンドの振る舞いって謎だな
{}は改行も含めて一つの要素にするはずだから、
# {あほ
ばか
}
で#コマンドは{あほ改行ばか改行}を一つの引数とするはずなのに、{あほ まででコメントが終了しちゃうよね。
set a {あほ
ばか
}
だとちゃんとaに{あほ改行ばか改行}が入るのに
785:デフォルトの名無しさん
11/08/09 22:50:35.79
#はTclにおいてもコマンドではない。が正解。
786:デフォルトの名無しさん
11/08/10 22:11:16.68
なるほど
#はコマンドの置ける位置に置かねばならないがコマンドではなく行末までのコメントとして処理されるということか
行末の\継続は生きてる状態で。
787:デフォルトの名無しさん
11/08/27 23:51:43.68
toplevel .w1
bind .w1 <Destroy> "puts destroyed"
button .w1.b1
button .w1.b2
pack .w1.b1 .w1.b2
ってやって、.w1を閉じると"destroyed"が3回出てくる。
子持ちウィジェットを閉じると、子供の分まで<Destroy>イベントが発生するらしい。
これって仕様なのかな。
788:デフォルトの名無しさん
11/08/28 21:06:23.24
>>787
仕様。
但し正確には、子供のぶんまでイベントが発生するのではなくて、子供が処理するイベントに
toplevelのぶんが含まれている。
"puts destroyed %W" とかするとわかると思う。
あとはbindtagsのman-page参照。
789:デフォルトの名無しさん
11/08/29 23:40:56.18
>> 787
やりたいこととあってるか分からないけど、toplevel限定なら
toplevel .w1
proc CLOSE_TOPLEVEL {w} {
puts $w
}
wm protocol .w1 WM_DELETE_WINDOW [list CLOSE_TOPLEVEL .w1]
とかはできる。
790:デフォルトの名無しさん
11/08/29 23:52:37.47
AssocQueryStringWというWindows APIが使いたかったので、
URLリンク(msdn.microsoft.com)(v=vs.85).aspx
package require Ffidl
ffidl::callout AssocQueryString {int int pointer-utf8 pointer-utf8 pointer-utf8 int} int [ffidl::symbol shlwapi.dll AssocQueryStringW]
としてみたんですが、
set ASSOCF_NOTRUNCATE 32
set ASSOCSTR_EXECUTABLE 2
set pszFile [string repeat \0 255]
set dwOut 0
AssocQueryString $ASSOCF_NOTRUNCATE $ASSOCSTR_EXECUTABLE {c:\sample.txt} "open" $pszFile $dwOut
=> -2147024809
というのが返ってきます。
たぶん、ERROR_INVALID_PARAMETER(0x80070057) のことだと思うんですが、どの辺が間違ってるんでしょうか?
791:デフォルトの名無しさん
11/08/31 00:16:00.83
>>788 >>789
ありが㌧
とりあえず
bind .w1 <Destroy> ...
のかわりに
bind .w1.b1 <Destroy> ...
にしたら(子供がいないので)一回だけ処理されるので
目的は達成できてますが、動作が疑問だったんで。
792:デフォルトの名無しさん
11/09/01 20:45:44.79
>>790
1 W系は文字列がUnicode(UTF-16)
2 dwOutが0だと書き込むメモリ領域も0扱い
package require Ffidl
ffidl::callout AssocQueryString \
{int int pointer-utf16 pointer-utf16 pointer-var int} int \
[ffidl::symbol shlwapi.dll AssocQueryStringW]
set ASSOCF_NOTRUNCATE 32
set ASSOCSTR_EXECUTABLE 2
set dwOut 1000
set pszFile [binary format x$dwOut]
set result [AssocQueryString \
$ASSOCF_NOTRUNCATE \
$ASSOCSTR_EXECUTABLE \
"c:\\sample.txt" \
"open" \
pszFile \
$dwOut]
puts result=$result
puts pszFile=[string trim [encoding convertfrom unicode $pszFile] \x00]
XPだと動くけど、64bit版Vistaだとクラッシュするのお・・・。
793:デフォルトの名無しさん
11/09/09 01:55:06.30
>>792
どうもありがとう。
32bit版Win7ではクラッシュ。型が違うのかなあ。。。
794:デフォルトの名無しさん
11/09/09 23:18:14.02
>>793
イベントログにはなんて出てる?ワシのは
エラー 2011/09/09 22:49:03 Application Error 1000 (100)
障害が発生しているアプリケーション tclsh85.exe、バージョン 8.5.2.2、タイム スタンプ 0x47f30c38、
障害が発生しているモジュール SHELL32.dll、バージョン 6.0.6002.18393、タイム スタンプ 0x4d39b5c7、
例外コード 0xc0000005、障害オフセット 0x00008f1a、 プロセス ID 0x17ec、
アプリケーションの開始時刻 0x01cc6ef73c41e270。
て。ひょっとしてshlwapiが壊れてる?
795:デフォルトの名無しさん
11/09/10 01:09:56.11
脳が障害を起こしました
796:デフォルトの名無しさん
11/09/12 00:35:13.36
>>794
なんかJITデバッガのせいでイベントログには残らないみたいですが、
デバッガには以下が表示されてました。
wish84.exe の 0x76d93d52 (shell32.dll) でハンドルされていない例外が発生しました:
0xC0000005: 場所 0x000003e8 を読み込み中にアクセス違反が発生しました。
CAssocArray::GetStringという関数でエラーになってるらしいですが、何に使われてるのかは不明。
797:デフォルトの名無しさん
11/10/22 17:14:45.57
Tcl/tkって、伺かみたいなGUIは実現できるのでしょうか?
798:デフォルトの名無しさん
11/10/25 23:08:12.87
> 797
この辺があればできるのではないかと。
二次元キャラ -> Tk canvas + Imgでpngファイルが使える + TkTrans.dllで背景透過
サウンド -> snack
Windows API, COMの利用 -> TWAPIとFfidl, tcom
設定画面とかは普通にTkで。垢抜けた見た目を求めるならtile拡張
知識の泉
* ActiveTclに添付のヘルプ
* URLリンク(wiki.tcl.tk)
* URLリンク(www.tkdocs.com)
ActiveTclに標準添付じゃない拡張たち
TkTrans.dll
URLリンク(goo.gl)
TWAPI
URLリンク(twapi.magicsplat.com)
Ffidl
URLリンク(elf.org)
799:デフォルトの名無しさん
11/10/30 13:19:20.79
canvasで、ある位置の色を取得したいのですが可能でしょうか?
どうすれば取得できるでしょうか?
800:デフォルトの名無しさん
11/10/31 19:58:14.80
> 799
できたよ。
URLリンク(wp.me)
801:デフォルトの名無しさん
11/10/31 21:12:04.23
>>800
GDIですか、windows用ですね
参考にさせてもらいます
ありがとうございます!
802:デフォルトの名無しさん
11/11/11 22:55:33.88
ActiveTcl 8.5.10->8.5.11 ファイル容量少し小さくなった
803:デフォルトの名無しさん
11/11/18 23:57:56.40
envってグローバルだったんだね。
proc内でglobalつけないで使ってたら
ぜんぜん環境変数にアクセスできなくて、
半日はまった。orz
804:デフォルトの名無しさん
11/11/19 01:12:58.43
>>803
env使うってCGIでも作ってるの?
組み込み変数は全部グローバルだから、
一度info globalsのリストに目を通しておくとそういうときにピンとくると思う。
805:デフォルトの名無しさん
11/11/19 07:50:33.66
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
806:デフォルトの名無しさん
11/11/19 12:32:51.20
誰もが一度ははまるstr
807:デフォルトの名無しさん
11/11/27 12:50:30.83
ゲームでキャラを移動させるような場合、bindを用いてカーソルキーで操作すると
キーボードのオートリピート機能のせいで、動き始めた直後に一瞬動きが止まります。
スムーズに動くようにするにはどうしたら良いのでしょうか?
808:デフォルトの名無しさん
11/11/28 00:52:09.92
inp(0), inp(1)
809:デフォルトの名無しさん
11/11/29 00:48:45.31
>>807
簡単なテストコード見せて
810:デフォルトの名無しさん
11/11/29 18:09:48.11
>>809
wm geometry . 500x500
canvas .c -bg white
pack .c -expand 1 -fill both
.c create oval 230 230 270 270 -fill red
bind . <KeyPress-Up> {.c move 1 0 -3}
bind . <KeyPress-Down> {.c move 1 0 3}
bind . <KeyPress-Right> {.c move 1 3 0}
bind . <KeyPress-Left> {.c move 1 -3 0}
キー入力の判定だけC言語で書いて、
例えばWindowsならWindows APIを利用するようにすれば解決すると思います
でも、Tclだけで解決する方法はないのでしょうか?
811:デフォルトの名無しさん
11/11/29 22:33:47.99
ググってみたけどこんな方法しかないような
wm geometry . 500x500
canvas .c -bg white
pack .c -expand 1 -fill both
.c create oval 230 230 270 270 -fill red
set moveto ""
bind . <KeyPress-Up> {set moveto "up"}
bind . <KeyPress-Down> {set moveto "down"}
bind . <KeyPress-Right> {set moveto "right"}
bind . <KeyPress-Left> {set moveto "left"}
bind . <KeyRelease> {set moveto ""}
proc move {} {
global moveto
switch $moveto {
up { .c move 1 0 -3 }
down { .c move 1 0 3 }
right { .c move 1 3 0 }
left { .c move 1 -3 0 }
}
after 10 move
}
after 10 move
方向を一つの変数でまとめてるけど方向別にすれば斜め移動も出来る
812:デフォルトの名無しさん
11/11/30 00:27:19.26
>>810
どういうゲームかわからないけど、イベントループを自分で管理するべき。
そして、そのイベントループの中で、KeyPressで動かしはじめて、
KeyReleaseが来るまで動かし続ける。簡単には>>811みたいな。
ちゃんとしたゲームしたいならasteroids.tclが参考になると思う。→URLリンク(wiki.tcl.tk)
813:デフォルトの名無しさん
11/11/30 12:06:12.14
カーソルキーを押しっぱなしにすると
ずっとKeyPressのままってわけじゃない。
KeyPressとKeyReleaseが交互に発生する。
だからそれは全然アドバイスになってない。
814:デフォルトの名無しさん
11/12/01 10:45:21.56
wm geometry . 500x500
canvas .c -bg white
pack .c -expand 1 -fill both
.c create oval 230 230 270 270 -fill red
array set direction {
n 0
s 0
e 0
w 0
}
set delta 3
bind . <KeyPress-Up> {set direction(n) 1}
bind . <KeyPress-Down> {set direction(s) 1}
bind . <KeyPress-Right> {set direction(e) 1}
bind . <KeyPress-Left> {set direction(w) 1}
bind . <KeyRelease-Up> {set direction(n) 0}
bind . <KeyRelease-Down> {set direction(s) 0}
bind . <KeyRelease-Right> {set direction(e) 0}
bind . <KeyRelease-Left> {set direction(w) 0}
proc move {} {
global direction delta
if {$direction(n)} {.c move 1 0 -$delta}
if {$direction(s)} {.c move 1 0 +$delta}
if {$direction(e)} {.c move 1 +$delta 0}
if {$direction(w)} {.c move 1 -$delta 0}
after 10 move
}
move
815:デフォルトの名無しさん
11/12/01 13:31:06.09
>>813
普通はそうならない。
コントロールパッド本体に連射機能がついてるとかならあり得るかもしれないけど。
816:デフォルトの名無しさん
11/12/01 21:21:12.29
>>815
いや、Tkのキーバインドだとキーボードのキーリピートが働いてしまう。
メモ帳とかに文字を入力する時、たとえば"a"を押しっぱなしにすると、
"a"が一つ表示された後、少し間を置いてaが連続して入力されるだろ。
あれと同じことが起こる。
下のサンプルを動かしてごらん
set x ""
pack [label .t -textvariable x]
bind . <KeyPress-a> {append x 1; update}
bind . <KeyRelease-a> {append x 0; update}
817:816
11/12/01 21:35:31.25
このサンプルを動かして、aを押しっぱなしにしたら
1と0が交互に表示されるはず。
そうならなかったらよっぽど特殊なキーボードを使ってるんだろう。
818:デフォルトの名無しさん
11/12/02 11:26:05.96
連射機能付きJOYstickだろ
819:デフォルトの名無しさん
11/12/02 15:07:54.99
>>816,817
そのコード片を試したわけでないので何だが、
通常、キーを押しっぱなしにすると
KeyPress/KeyDownは複数飛んでくるが
KeyReleaseは離したときに1回飛んでくるだけじゃないのかね。
820:デフォルトの名無しさん
11/12/02 19:29:43.54
試さないで何言ってる
821:デフォルトの名無しさん
11/12/02 21:14:48.05
>>819
なぜテストしなかったの?
コードを走らせてみれば一目瞭然なのに。
少なくとも俺の環境では>>816-817の言う通りになったけど。
で、>>811や>>814のようにループで処理するとなめらかに動くのは
なぜか適度にKeyReleaseが無視されているからだとわかった。
それを確認するには下の2つのコードを動かしてみればいい。
ループがあるとほとんどグリーンの円のみが現れるが、
ループが無いとグリーンとレッドの円が交互に現れる。
# ループを通した例
wm geometry . 500x500
canvas .c -bg white
pack .c -expand 1 -fill both
bind . <KeyPress-a> {.c create oval 0 245 10 255 -fill green -tags en}
bind . <KeyRelease-a> {.c create oval 0 245 10 255 -fill red -tags en}
proc main {} {
.c move en 3 0
update
after 10 main
}
main
#ループ無し
wm geometry . 500x500
canvas .c -bg white
pack .c -expand 1 -fill both
bind . <KeyPress-a> {.c create oval 0 245 10 255 -fill green -tags en; .c move en 3 0; puts 0}
bind . <KeyRelease-a> {.c create oval 0 245 10 255 -fill red -tags en;.c move en 3 0; puts 1}
822:デフォルトの名無しさん
11/12/02 23:24:20.45
>>821
ループ無し
URLリンク(i.imgur.com)
823:デフォルトの名無しさん
11/12/02 23:50:43.04
ループ無し
URLリンク(ozcircle.net)
俺の環境ではこの通り
824:デフォルトの名無しさん
11/12/03 10:24:08.91
だから~環境依存の問題の臭いがしてるのに、
バージョンもOSも書かずに「俺の環境」じゃ
誰もこれ以上何もできんだろ
825:デフォルトの名無しさん
11/12/03 11:50:49.20
>>824
Windows7とWindowsXPとLinux Mint 11で確認済
というか、そうならない環境が例外だと思われる
826:825
11/12/03 11:54:22.55
Tclのバージョンは8.4と8.5で試したが、結果は同じ
827:本田
11/12/04 21:44:12.75
>>825
もし同じPCでテストしてるなら。
BIOSが同じだから結果が同じ可能性がある。
828:デフォルトの名無しさん
11/12/04 21:57:17.27
>>827
俺も試してみたけど>>823みたいになった。
3台のPCでテストしたんだけど変わらない。
ってことは環境依存だとしても、そういうのって結構多いんじゃない?
829:本田
11/12/04 23:25:19.71
キーのリピート速度と遅延時間を設定するには
URLリンク(www.atmarkit.co.jp)
同じキーを押し続けると、そのキーが連続で入力できる。
連続で入力される速度を「リピート速度」、キーを押してからリピートを開始するまでの時間を「遅延時間」と呼ぶ。
キーのリピート速度と遅延時間は、kbdrateコマンドで変更できる。
オプションを何も指定しないでkbdrateコマンドを実行すると、リピート速度が10.9cps(1秒当たり10.9文字)に、遅延時間が250ミリ秒(ms)に設定される。
これが、Linuxのデフォルトの数値だ。
使用可能なオプションは、-s、-r、-dだ。
830:本田
11/12/04 23:52:04.88
キー・リピート (key repeat)
URLリンク(www.atmarkit.co.jp)
キーを押したままにしたときに、連続的にそのキーが繰り返し入力されたように扱うしくみ。
一般的には、キーが押し下げられてから、キー・リピート処理が開始されるまでの間隔と、
リピート間隔(連続的にキー入力を発生させる際の時間間隔)を設定できる。
831:デフォルトの名無しさん
11/12/05 23:44:17.05
>>814>>815のものですが、>>810を見て、てっきりWindowsの話と思ってました。
これが答えになるんじゃないでしょうか。
X Window SystemではオートリピートでPress/Releaseが交互に発生するらしいです。
URLリンク(goo.gl)
Windowsでなるという人いないはずだよね?
832:デフォルトの名無しさん
11/12/05 23:57:02.19
あと、確認の仕方は以下で十分です。
bind . <KeyPress> {puts KeyPress}
bind . <KeyRelease> {puts KeyRelease}
console show
833:デフォルトの名無しさん
11/12/06 10:23:09.00
WindowsのオートリピートってX Windowと挙動が違うの?
オートリピートなんてみんな同じだと思ってた
834:デフォルトの名無しさん
11/12/06 21:17:09.62
X Windowって言うな
835:デフォルトの名無しさん
11/12/06 21:57:13.95
>>834
いみふ
836:デフォルトの名無しさん
11/12/06 22:04:04.24
X Windowsというと嫌がる人ってのは見たことあるけどな
X Windowだったら単純にSystemを省略しただけだから何が悪いのかわけわからん
837:デフォルトの名無しさん
11/12/07 00:27:18.67
>>835, >>836
同感。
838:デフォルトの名無しさん
11/12/07 07:30:17.47
ま、開発元は嫌がってるけどね。
839:デフォルトの名無しさん
11/12/07 15:53:36.77
略すなら X のみだろ常考
840:デフォルトの名無しさん
11/12/07 17:55:46.65
X Windowsでいいよ
呼び方なんぞどうでもいい
841:デフォルトの名無しさん
11/12/07 19:52:34.30
tclvfsってどんなもので、どう使えばいいんでしょうか?
意外と情報が少ないし、たまたま見つけたサンプルコードのほとんどがまともに動かないんですけど。
842:デフォルトの名無しさん
11/12/07 20:00:14.15
SX-Windowでいい。
国産だし。
843:デフォルトの名無しさん
11/12/07 20:06:01.06
zipとかjarみたいなもんだと勝手に想像 freewrapみたいなものを自前で実装とか
844:デフォルトの名無しさん
11/12/08 11:07:43.09
>>841
Starkit/Starpack, TclApp, freewrapはtclvfsを使って単一ファイル内にディレクトリ階層を持った複数のファイルを格納してる。
例えばTkSQLiteというフリーソフトがあるけど、あのEXE配布バージョンはStarpackで作られてるので(たぶん)、
package require vfs::mk4
vfs::mk4::Mount tksqlite.exe t
glob -directory t *
vfs::unmount t
とかやると中身が見れる。
ここでtは仮想的なディレクトリの名前になってるので、
set ch [open t/tksqlite.tcl]
puts [read $ch]
close $ch
とかやればファイルが読めるし、
file copy hoge.tcl t/hoge.tcl
とかやればファイルを追加できる。
自分でVFSを作ることもできる。
vfs::mk4::Mount new.vfs t
file mkdir t/subdir
set ch [open t/subdir/hoge.txt w]
close $ch
vfs::unmount t
他にもftpディレクトリをローカルファイルシステムのように扱うvfs::ftpとかいろいろあるみたいだけど使ったことはない。
845:本田
11/12/08 23:16:45.72
>>841
Practical Programming in Tcl and Tk, 4th ed
URLリンク(beedub.com)
URLリンク(beedub.com)
URLリンク(beedub.com)
846:デフォルトの名無しさん
11/12/10 07:15:51.33
tclで'A'という文字からアスキーコード65を得るには、どうやればいいでしょうか?
847:デフォルトの名無しさん
11/12/10 12:04:09.29
>>846
binary scan "A" c val
puts $val
848:デフォルトの名無しさん
11/12/10 13:17:19.43
>>847
ありがとうございます
849:本田
11/12/17 12:06:21.27
Graphics with TCL/TK
URLリンク(www.youtube.com)
850:デフォルトの名無しさん
11/12/24 12:21:45.17
toplevelで作ったウィンドウを手で動かしてから、
wm withdrawで非表示にし、wm deiconifyで再表示させると、
最初に作られた位置に出現します。
(厳密に言うとそれよりちょっと右下)
Tkの仕様なのかウィンドウマネージャの仕様なのか、
消えた時の位置に再表示されるのが自然だと思うんですが。
それともやり方が間違ってるんだろうか?
環境:
Tk 8.4
Soralis 10
CDE 1.6.3
851:デフォルトの名無しさん
12/01/03 19:11:53.53
>>5
さすがだねw
852:デフォルトの名無しさん
12/01/22 19:54:12.53
書けない?
853:デフォルトの名無しさん
12/01/22 19:54:41.21
あれ、書けた。あけおめ。
854:デフォルトの名無しさん
12/02/01 22:24:24.34 BE:30017423-2BP(1250)
ネタがなにも無くて暇だ
855:デフォルトの名無しさん
12/02/01 23:51:44.54
850には答えてやんないの?
856:デフォルトの名無しさん
12/02/02 00:46:23.97
>>855
だってTk8.4もう使ってないし、CDEも使ったこと無いし、
Sorarisの環境も無いし、ウィンドウマネージャーのせいな気がするから、
環境が無いと確認のしようがないし、
857:デフォルトの名無しさん
12/02/04 13:14:29.62
850です。
ですよねぇ~。
仕事のマシンで環境いじれないし、
Tcl/Tkなんて(自分以外)ほとんど使ってないからなぁー。
858:デフォルトの名無しさん
12/02/13 21:11:55.61
Tclは実行前にバイトコードにコンパイルされ、高速化が図られていると、説明されています。
することにもよると思いますが、bash,perl,ruby,pythonと比べると速さはどうなんでしょう?
プログラムミング未経験者の、素朴な疑問です。
859:デフォルトの名無しさん
12/02/22 11:52:16.55
>850
Windowsでは消えた場所に戻るからウィンドウマネージャの仕様だと思う。
無理やり戻すしかない。
namespace eval GeometryMemory {
variable geometry
array set geometry {}
}
proc GeometryMemory::install {t} {
bind $t <Unmap> {GeometryMemory::save %W}
bind $t <Map> {GeometryMemory::recover %W}
}
proc GeometryMemory::save {t} {
variable geometry
set geometry($t) [wm geometry $t]
}
proc GeometryMemory::recover {t} {
variable geometry
if {[info exists geometry($t)]} {
wm geometry $t $geometry($t)
array unset geometry $t
}
}
860:デフォルトの名無しさん
12/02/22 11:53:14.60
テストスクリプト
proc GeometryMemory::test {t} {
toplevel $t
GeometryMemory::install $t
update
puts "0: [wm geometry $t]"
wm withdraw $t
update
puts "1: [wm geometry $t]"
wm geometry $t +0+0
update
puts "2: [wm geometry $t]"
wm deiconify $t
update
puts "3: [wm geometry $t]"
}
GeometryMemory::test .t
console show
861:デフォルトの名無しさん
12/02/22 15:59:53.47
>>858
Tclは最近のベンチマークサイトからは仲間外れにされてることが多いのでなかなか比較が見つからないけど、
比較的新しいサイトを見つけました。
URLリンク(goo.gl)
ちょっと信じがたい感じもしますが、ここによると
Perl5 >> PHP > Ruby = Python2 >> Python3 >> Tcl
みたいな感じですね。Tcl 8.4.19ですけど、8.5では劇的な速度向上はなかったと思うので、
大して変わらんのに対し、Rubyは1.9でかなり速くなったらしいので、
最新版で比べるとさらに分が悪い感じがします。
bashは、、、汎用言語といえるのかなあ。
862:デフォルトの名無しさん
12/02/22 21:44:55.73
>>861
レスもらえてうれしいです。そのうえ的確なサイト紹介です。
速さとか実行速度で検索していたのですが、ベンチマークという言葉が思い当たらず、適当なサイトが見つかりませんでした。
このサイトを見て驚いたのは、Perlの速さとJava・Luaの遅さですね。また、C++は最速と思っていました。
やはり、プログラムの内容でしょうか?
>Test code grows text string by adding another string in cycle until it grows up to 4 mb.
恥ずかしながら英語も全然ですのでよく分かりませんが、このベンチマークは文字列操作に該当するのでしょうか?
LL言語は文字列操作が得意と説明されていますよね。
bashも入れたのは、私が試したいのが次のような内容で、キーボードでの打鍵数を調べたいのです。
1 英文字で100万字の普通の文書を、#,=等の記号も含めてアルファベット順に何文字あるのかカウントする。
2 少し複雑で、日本語で100万文字をローマ字入力したと解釈させカウントする。
2のケースは条件があります。
a 小さな'つ'の扱いです。リナックスはrinukkusuとkが2つ、アップルはappuruとpが2つとします。
b んの扱い。例えば安心は、ansinnと'ん'のあとがナ行以外なら1文字ですみますが、それ以外の'ん'は2文字必要です。
c 最後にちゃ、ちゅ、ちょはcha,chu,choと、しゃ、しゅ、しょはsha,shu,shoとすることです。
863:862
12/02/22 21:45:49.12
カウントする方法がプログラムと言えるのか、shellとかawkでも可能かどうかさえ分かりません。
このスレに書き込んだのは、今からtcl/tkの勉強を始めようと思い、実際のところを知りたかったからです。
tclshがあってインタラクティブに使え、tkでGUIも簡単に扱える、そのうえクロスプラットフォームという魅力から、
tclが多言語に比べて遅くてもよかったのです。BSDで作ったフレームがWindowsで開くまではしました。
eltclshというものを見つけました。簡単なパスとコマンドの補完ができます。
tclshではプロンプトにpwdをだせますが(改行して2行表示はできない)、eltclshではプロンプトの修正が今の私にはできません。
eltclshを改良して意地でもログインシェルにしたいと思っています。
なぜ、tclshはログインシェルになりえなかったのでしょう。
長文ついでに>>861さんにもう一度感謝をのべよう。
tclの復権を願って、これで書き逃げさせていただきます。
864:デフォルトの名無しさん
12/02/24 00:13:15.78
>>859
さんくすです。
おっしゃるとおり結局は,消す前に位置を保存して,
再表示した後で位置をもどすということで解決はしましたが,
なんかすっきりしなかったんですよね。
865:デフォルトの名無しさん
12/02/24 19:38:26.78
>>862
ベンチマークの内容は"abcd____________"という文字列がひたすらつながった4MB+alphaの文字列が1つの変数に格納されるというものです。
なんかベンチマーク用にあえて死ぬほど非効率な方法で実装されていますが、同じ結果を得たいだけなら100ms以下でできる方法があるので
もうちょっと妥当なスクリプトだったらと思います。まあ、それでも負けてるのでしょうが。。。
862さんが作ろうとしているものはKAKASIという漢字->ローマ字変換プログラムを使って、いったんすべてASCIIにしてから処理するのがいいと思います。
URLリンク(goo.gl)
その上で、bashよりもTclを使うメリットは、連想配列があることです。
ただ、連想配列を持つ言語はほかにいくらでもあるので、PerlでもRubyでも好きな言語を使えばいいと思います。
またbashではできないということでもないです。
bashやzshが気に入られてるのは補完機能などが充実してるからではないですかね。
866:デフォルトの名無しさん
12/02/24 20:51:13.77
スクローラブルなウィンドウ(キャンバスウィンドウとか)内のアイテムを<B1-Motion>でドラッグ
するときに、ウィンドウの端あたりまでドラッグしていくとその先の方向へスクロールしてくれる
ようなのを実装したいんですが、参考になるコードスニペットないでしょうか?
867:デフォルトの名無しさん
12/02/25 00:04:22.73
>>865さん
全米が泣いた。
リナックスの世界へ案内しよう
kakasi -Ha -Ja -Ka < test.txt
rinakkusunosekaiheannaishiyou
いろいろ試したのですが、案内のnが一つ少ないほかは完璧でした。
デフォルトがヘボン式なので、意図どおりです。感謝申し上げます。
打鍵数調べに速さは関係ありませんが、tclは8.4から最新バージョンだと、
20%くらい速くなっていそうですね。
URLリンク(news.mynavi.jp)
868:デフォルトの名無しさん
12/02/28 15:49:05.74
>>867
パフォーマンスに関しては、一概には言えないんですよね。
URLリンク(wiki.tcl.tk)
URLリンク(wiki.tcl.tk)
総合成績では8.4が一番優秀だったりします。
私も速度は必要なくて、乗り換えの動機はライブラリが
8.4をサポートしなくなり始めてるということぐらいなんですが。
869:デフォルトの名無しさん
12/02/28 21:11:00.69
lassign命だから8.4は愛せない
870:デフォルトの名無しさん
12/02/28 22:45:08.87
8.5最強伝説
- dictで連想配列の値渡最強
- dictはarrayより最速
- 無間桁計算で国家予算もらくらく計算
- clock addで日付計算最強
- clock formatで和暦がでるんだぜ!
- in 演算子がめちゃ楽最高
- switch正規表現比較が無敵
- lindex $list end-1とか書けちゃう柔軟さ
- {*}って知ってる?eval(失笑)ww
8.6最凶伝説(審議中)
- バイトコードエンジン再実装!速いのか!?
- try {} catch {} finally {} やっと使える!やっとか!
- coroutine って何に使うんですかあ?
- ooって結局どうなの。incr tcl ngの方がいいんじゃ・・・
-
871:デフォルトの名無しさん
12/02/29 16:09:13.53
>>861
試験したTCLのソースをみると単純な文字列置換に"regsub"函数を使っている
、ここを定石とおりに"string match"函数に置き換えると何百倍も速くなった。
(我輩の旧式機械で源リストを実行するとトンでもないことになるが、置き換えるとまともになる。)
tclは8版から劇的に速くなったが、正規表現まわりは遅いまま。
その事情を知って意図的に弱点を突いてきたようだ。
872:861
12/02/29 17:54:06.76
>>871
テストの趣旨を無視したバージョン
time {
set str "abcdefghefghefgh"
regsub -all {efgh} $str ____ str
set imax [expr {1024/[string length $str]*1024*4}]
set gstr [string repeat $str [expr {$imax+1000}]]
}
#=>4334 microseconds per iteration
少しは尊重する姿勢を見せてるバージョン
time {
set str "abcdefghefghefgh"
set imax [expr {1024/[string length $str]*1024*4}]
set gstr [string repeat $str [expr {$imax+1000}]]
regsub -all {efgh} $gstr ____ gstr
}
#=>114467 microseconds per iteration
5ms以下で終わる内容をあえてCore i5で10分以上かける方法でやるなんて
ばかばかしいよね。
873:871
12/02/29 23:28:59.71
tcl関係者はtcl 7.4->tcl8.1 で「劇速した」と云ったが
ユーザーは「yes except正規表現」と云っていた。
マニュアルも気合が入っていない項目と馬鹿丁寧な項目が入り混じっているし。
良くも悪くも、ちぐはぐが多いみたいだ。好き嫌いは激しかろう。
874:本田
12/03/04 23:41:21.56
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
875:本田
12/03/04 23:44:36.35
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
876:本田
12/03/04 23:47:21.25
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
877:デフォルトの名無しさん
12/03/07 20:28:21.05
TclでCのstatic宣言みたいなのができるとありがたいです。
いい方法はないでしょうか?
たとえば,プロシージャの中で,呼ばれた回数に依存した処理をするような場合,
下のように,global変数をインクリメントしたりしてますが,
他のglobal変数とぶつかったりしないか心配で,夜も眠れません。
namespaceだと大げさになりそうで。
proc foo {} {
global bar
if [info exists bar] {
incr bar
} else {
set bar 1
}
# 呼ばれた回数に依存する処理
}