[PR]生年月日で2010年占い鑑定:初回無料!貴女の運命運勢を占う

~katsuhiko メッセージボード

back 2751-2800

2801-2850

2851-2900


2850 Re: 改行時の処理 コメント数:  1件
  Km 2004/02/04 (水) 03:36
ZABさん、こんにちは。

> Editor1.SelText := ' ';
> として、文字列を追加した場合、キャレットの位置は移動しないと思いますが

移動すると思いますが、何か情報が不足してるようです。
procedure TForm1.Editor1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key = VK_RETURN then
Editor1.SelText := ' ';
end;

みたいに直接試せるような感じて記述してください。




2849 Re^3: 改行時の処理 コメント数:  2件
  ZAB 2004/02/04 (水) 00:56
Kmさん、こんばんは

Editor1.SelText := ' ';
として、文字列を追加した場合、キャレットの位置は移動しないと思いますが
' 'の後ろにキャレットを移動するにはどうすればよいのでしょうか?
お手数おかけします。



2848 Re^2: 改行時の処理 コメント数:  3件
  ZAB 2004/02/03 (火) 23:23
Kmさん、こんばんは

アドバイスありがとうございます。
最終的な動作としては問題なさそうですが、KeyUpだとEnter押した瞬間には
動作しないので、ちょっと感覚的に嫌です。
しかし、Editor1.SelTextの存在すら分かっていなかったので
すごく参考になりました。
自分でももう少し考えて見ます。

> ZABさん、こんにちは。
>
> procedure TForm1.Editor1KeyUp(Sender: TObject; var Key: Word;
> Shift: TShiftState);
> begin
> if Key = VK_RETURN then
> Editor1.SelText := '// comment ';
> end;
>
> こんな感じでどうでしょうか。



2847 TEditor Help ver 2.48 コメント数:  0件
  本田勝彦 2004/02/03 (火) 23:04
公開しました。



2846 TPerlFountain ver 1.03 コメント数:  6件
  本田勝彦 2004/02/03 (火) 22:18
公開しました。



2845 Re^4: PerlFountainのバグ追記 コメント数:  7件
  K 2004/02/03 (火) 10:35
> 問題が無ければ、バージョンアップしたいと思います。
お疲れさまです。
無事文字化けせずに表示できるようです。
ありがとうございました^^



2844 Re^3: PerlFountainのバグ追記 コメント数:  8件
  本田勝彦 2004/02/03 (火) 00:37
原因は、SymbolProc 内で " を探している状態の時全角文字に出会っても対応
していないことでした。SymbolProc の下の方に inherited SymbolProc;
が3つ並んでいますが、2つ目を

begin
// inherited SymbolProc;
FToken := toSymbol;
if FP^ in LeadBytes then
Inc(FP);
if not (FP^ in [#0, #10, #13]) then
Inc(FP);
end;

としてください。

問題が無ければ、バージョンアップしたいと思います。



2843 Re^2: PerlFountainのバグ追記 コメント数:  9件
  K 2004/02/02 (月) 11:57
> 確認出来ました。原因はまだわかりません。少し時間を下さい。
わかりました。よろしくお願い致します。



2842 Re: 改行時の処理 コメント数:  4件
  Km 2004/02/02 (月) 05:52
ZABさん、こんにちは。

procedure TForm1.Editor1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key = VK_RETURN then
Editor1.SelText := '// comment ';
end;

こんな感じでどうでしょうか。



2841 改行時の処理 コメント数:  5件
  ZAB 2004/02/02 (月) 02:07
改行時、次行に所定の文字列を自動で挿入するにはどのようなコードを
書くのが望ましいのでしょうか?アドバイスよろしくお願いします。
例えばスペース列であったり、コメントを表す文字列だったりを
挿入したいのですが...
OnKeyDownで、Enterキーか判断して、行頭に文字を追加するように
すればよいと思うのですが、どう追加すればよいのかが分かりません。
よろしくお願いします。



2840 Re: PerlFountainのバグ追記 コメント数:  10件
  本田勝彦 2004/02/02 (月) 01:24
確認出来ました。原因はまだわかりません。少し時間を下さい。
ご指摘に感謝します。



2839 PerlFountainのバグ追記 コメント数:  11件
  K 2004/02/01 (日) 16:09
> LastTokenBracketを変更し、文字列を複数行対応にして、
と思ったのですが、何もいじらないダウンロードしたそのままの状態でやっても
WordWrap=True にして日本語を折り返すと折り返しの次のバイトが文字化けを起こすようです。

$a = "ああああああああああああああああああ(折り返し)
・・あああああああああああああああああああ(折り返し)
・・ああああああああああああああああ";

↑「あ」しか入力していますが「・・」のように化けます。
なぜか選択状態にすると「・・」が「あ」に表示されます。

よろしくお願いします。



2838 PerlFountainのバグ コメント数:  12件
  K 2004/02/01 (日) 15:28
PerlFountainのバグを発見しました。

LastTokenBracketを変更し、文字列を複数行対応にして、
WordWrapをTrueにしてからWrapOption.WrapByteを30ぐらいに
して折り返すようにします。

$a = "あいうえおおおおおお
おおおおおごおおおおおおああああ
あああああああああああいいいいお
おおおおおお";

のように入力します。すると、
文字列2行目の先頭あたりが文字化けを起こします。

これはどう対処すればよいのでしょうか?



2837 Re^2: ヒアドキュメント コメント数:  0件
  K 2004/02/01 (日) 15:19
わかりました。ありがとうございます。



2836 Re: キャレット位置のファイル先頭からのインデックス コメント数:  0件
  Km 2004/02/01 (日) 10:53
いくぼさん、こんにちは。

> ColToListChar は、私の手元ではコードエディタの
> コード補完で候補に出てこないのですが、
> 何か use しなくてはならないのでしょうか。

そういえばprotectedでした。

> 余談。

こちらはTEditor2.23で作られたようですよ。




2835 Re^2: キャレット位置のファイル先頭からのインデックス コメント数:  1件
  いくぼ 2004/01/31 (土) 19:41
Km さん、こんにちは。
TEditorEx、使わせていただいております。

ColToListChar は、私の手元ではコードエディタの
コード補完で候補に出てこないのですが、
何か use しなくてはならないのでしょうか。

余談。
RowToLines の反対の LinesToRow が、
TEditorEx を使うようになってから、特に宣言無し
で使えるようになった気がするのですが、
もしかして……?



2834 Re^5: TEditorでFont.styleプロパティが反映されない コメント数:  0件
  cpsh   | cpsh@saku2.com 2004/01/31 (土) 18:32
ありがとうございました。
一発でStyleを設定できるようになりました。



2833 Re: キャレット位置のファイル先頭からのインデックス コメント数:  2件
  Km 2004/01/31 (土) 10:42
いくぼさん、本田さん、こんにちは。

> 拙作の経験では、キャレットを実際には動かさずに
> 前後の文字コードを調べるため、
> GetCaretPos ? で現在の Index を取得できて、
> GetCharCode(Index±n) で文字コードを知ることが出来ると
> 便利かな、と感じました。

ListStringでRow行を取得して、Col桁目を求めるとよいかと。
性能的にテキストの先頭からの文字インデックスを取得するより
1行取得してそこで何桁目として文字コードを調べた方が良いと
思います。また、タブ文字が入ることを考えると表示上の桁数と
実際のテキストの文字インデックスが違うと面倒と思う場合は、
Col桁目を文字インデックスに変換するメソッドを作ると良いと
思います。ちなみに、TEditorExではColをRow行上の文字
インデックスに変換するため、ColToCharのロジックから
raWrappedの処理を抜いたものとしてColToListCharなるメソッド
を作ってます。




2832 Re^7: キャレット位置のファイル先頭からのインデックス コメント数:  3件
  いくぼ 2004/01/31 (土) 02:22
よろしくご検討くださいませ。

拙作の経験では、キャレットを実際には動かさずに
前後の文字コードを調べるため、
GetCaretPos ? で現在の Index を取得できて、
GetCharCode(Index±n) で文字コードを知ることが出来ると
便利かな、と感じました。



2831 Re^4: TEditorでFont.styleプロパティが反映されない コメント数:  1件
  本田勝彦 2004/01/30 (金) 23:00
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, HEditor, TypInfo;

type
TForm1 = class(TForm)
Editor1: TEditor;
procedure FormCreate(Sender: TObject);
private
procedure SetEditorFont(Instance: TObject; pInfo: PPropInfo; tInfo: PTypeInfo);
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

uses
HPropUtils, heFountain;

procedure TForm1.SetEditorFont(Instance: TObject; pInfo: PPropInfo;
tInfo: PTypeInfo);
var
Info: PPropInfo;
PropInstance: TObject;
Style: TFontStyles;
begin
if tInfo.Kind = tkClass then
begin
PropInstance := TObject(GetOrdProp(Instance, pInfo));
if PropInstance is TFountainColor then
begin
Style := [fsItalic];
Info := GetPropInfo(PropInstance.ClassInfo, 'Style');
SetOrdProp(PropInstance, Info, Byte(Style));
end;
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
EnumProperties(Editor1.ActiveFountain, [tkClass], SetEditorFont);
end;

end.



2830 Re^3: TEditorでFont.styleプロパティが反映されない コメント数:  2件
  本田勝彦 2004/01/30 (金) 22:59
> でも、元々のEditor1.Font.Styleプロパティって何のために
> あるのでしょうか?

TFont に付き物なので・・・で、全部一発で変える例を次に示します。



2829 Re: ヒアドキュメント コメント数:  1件
  本田勝彦 2004/01/30 (金) 22:56
残念ながらデフォルトの TPerlFountain では出来ません。
派生させて頑張ると可能かもしれません。判別がかなり煩雑になると
思います。



2828 Re^6: キャレット位置のファイル先頭からのインデックス コメント数:  4件
  本田勝彦 2004/01/30 (金) 22:54
> が一発でわかるメソッドがあるとよいなぁ。(すりすり)

何か考えて見ます。少し時間を下さい。



2827 Re^2: TEditorでFont.styleプロパティが反映されない コメント数:  3件
  cpsh   | cpsh@saku2.com 2004/01/30 (金) 05:26
ありがとうございました。できました! けど、半角文字だけ。。。
で、
Editor1.View.EditorFountain.Colors.DBCS.Style := [fsItalic];
も追加しました。

でも、元々のEditor1.Font.Styleプロパティって何のために
あるのでしょうか?

> Fauntainを指定していないのであれば、
> Editor1.View.EditorFountain.Colors.Ank.Style := [fsItalic];
> これでどうでしょうか。



2826 Re: TEditorでFont.styleプロパティが反映されない コメント数:  4件
  にしの 2004/01/29 (木) 22:38
> TEditor(Ver2.46)でFont.styleプロパティを設定しても
> 反映されないのですが、使い方がまずいのでしょうか?

Fauntainを指定していないのであれば、
Editor1.View.EditorFountain.Colors.Ank.Style := [fsItalic];
これでどうでしょうか。



2825 ヒアドキュメント コメント数:  2件
  K 2004/01/29 (木) 15:04
>NotePad のように画面右端で折り返すことはデフォルトの
>機能としてはありません。
そうですか。残念です。
返答ありがとうございます。

現在、PerlFountain見させていただいています。
私のような若輩者が見ると本田様のスキルの高さに驚かされます。
やりたいことがあるのですが1つよいでしょうか。

PerlFountainにHereのカラーをセットして、エディタに以下のようなヒアドキュメントがあった際、

echo <<EOM;
こんにちは
ヒアドキュメントです
EOM

と書くと、

<<EOM;

EOM

の色も変わってしまいますが、これを回避する方法はあるでしょうか?
「こんにちは、ヒアドキュメントです」のみの色を変えたいのですが。



2824 TEditorでFont.styleプロパティが反映されない コメント数:  5件
  cpsh   | cpsh@saku2.com 2004/01/29 (木) 07:04
TEditor(Ver2.46)でFont.styleプロパティを設定しても
反映されないのですが、使い方がまずいのでしょうか?

よろしくお願いします。

procedure TForm1.FormCreate(Sender: TObject);
begin
Editor1.Font.Style :=[fsItalic] ;
end;



2823 Re^5: キャレット位置のファイル先頭からのインデックス コメント数:  5件
  いくぼ 2004/01/29 (木) 01:03
> あ、だめか。語句の途中にキャレットがある場合はだめですね。

そ、そうなんです。
SelectTokenFromCaret でキャレットが語尾に移動するので、
元の位置と引き算して、取得した語のなかでキャレット位置に
該当する文字を……とやるのもまた同じ煩雑さが伴います。

結局、選択状態にかかわらず信用できるのは ColToChar でしょうか。
もちろん RowToLines の援軍をたのまなくてはなりませんけど。

・ キャレット位置のファイル先頭からのインデックス
・ キャレット位置の文字コード

が一発でわかるメソッドがあるとよいなぁ。(すりすり)



2822 Re^4: キャレット位置のファイル先頭からのインデックス コメント数:  6件
  本田 2004/01/28 (水) 14:35
あ、だめか。語句の途中にキャレットがある場合はだめですね。



2821 Re: 右端で折り返し コメント数:  0件
  本田勝彦 2004/01/28 (水) 08:47
> TEditorで右端で折り返しのプロパティーはありますでしょうか?

WordWrap プロパティは WrapOption.WrapByte に指定された文字数で
折り返しますので、NotePad のように画面右端で折り返すことはデフォルトの
機能としてはありません。

実装すれば可能ですが、リサイズされると Undo, Redo のデータがクリアされます。
悩ましいことで結構有名な仕様です。



2820 Re^3: キャレット位置のファイル先頭からのインデックス コメント数:  7件
  本田勝彦 2004/01/28 (水) 08:43
キャレット位置の1語を求めるための WordFromCaret というメソッドが
あります。OnCaretMoved イベントでフォームの Caption をこのメソッド
で更新して見て下さい。



2819 右端で折り返し コメント数:  1件
  K 2004/01/28 (水) 08:28
TEditorで右端で折り返しのプロパティーはありますでしょうか?



2818 Re^2: キャレット位置のファイル先頭からのインデックス コメント数:  8件
  いくぼ 2004/01/28 (水) 02:07
本田さん、コメントありがとうございます。

たとえばキャレット位置の文字コードを求めるのに、
ファイルの最後に向かって範囲指定しているときは、
SelStart はブロックの先頭側のインデックスをあらわすので、
SelLength を足してやらないと、ちがう文字コードを表示して
しまいます。

逆にファイルの先頭に向かって範囲指定しているときは、
キャレット位置=SelStart になるので SelLength を足すとまずい。
……というのが私の実験結果なのですが、うぅ、勘違いしている
でしょうか。

私的な token(学術記号とか罫線素片とか)を認識してカーソル
位置を制御するために、キャレット位置の取得→文字コードの取
得はとっても使用頻度が高いのです。



2817 Re: キャレット位置のファイル先頭からのインデックス コメント数:  9件
  本田勝彦 2004/01/27 (火) 22:23
> if Selected then
> I := SelStart + SelLength
> else
> I := SelStart;

これで良いように思いますが。SelStart を求める時に利用する FSelStr データは
選択の方向にかかわらず、上の行から取得されています。

どんな処理に利用されるのでしょうか?



2816 Re^4: TPerlFountainについて コメント数:  0件
  本田勝彦 2004/01/27 (火) 22:14
> TPerlFountainParser.ElementTokens
> の Result に toSingleQuotation も入れて DoubleQuotationProc と同様の処理(FElementIndexにOrd(#39)値を入れる)にすればいけると思います。

おみごと!問題は SingleQuotationProc ですよね。こんな感じです。

procedure TPerlFountainParser.SingleQuotationProc;
// '
var
C: Char;
begin
if FElementIndex = NormalElementIndex then
begin
Inc(FP);
FToken := toSingleQuotation;
FElementIndex := Ord('''');
FRemain := 1;
end
else
if InTag then
begin
FToken := toSingleQuotation;
if not FIsStartToken then
Inc(FP);
C := '''';
while not (FP^ in [#0, #10, #13]) do
begin
if FP^ = C then
begin
Inc(FP);
Break;
end;
if FP^ in LeadBytes then
Inc(FP);
Inc(FP);
end;
end
else
SymbolProc;
end;



2815 キャレット位置のファイル先頭からのインデックス コメント数:  10件
  いくぼ 2004/01/25 (日) 03:54
キャレット位置のファイル先頭からのインデックスを
求める簡単な方法はあるのでしょうか。

with ActiveEditor do
begin
//現在行のインデックス+行頭からキャレット位置までのインデックス
I := Perform(EM_LINEINDEX, GetLinesToRow(RowToLines(Row)), 0)
+ ColToChar(Row, Col);
end;

と書いてみたのですが、すご〜くまわりくどい気がします。
(※GetLinesToRowは Line 先頭のインデックスを求める関数)

最初、

if Selected then
I := SelStart + SelLength
else
I := SelStart;

と書いてみたのですが、先頭に向かって範囲指定した場合には
くいちがってしまうので。



2814 Re^3: TPerlFountainについて コメント数:  1件
  マイケル 2004/01/21 (水) 20:50
> お忙しいところすみません^^;
> よろしくお願いします
TPerlFountainParser.ElementTokens
の Result に toSingleQuotation も入れて DoubleQuotationProc と同様の処理(FElementIndexにOrd(#39)値を入れる)にすればいけると思います。



2813 Re^2: TPerlFountainについて コメント数:  2件
  Domo 2004/01/20 (火) 03:27
> ちょっと、調べてみます。かなり忘却モード・・・
お忙しいところすみません^^;
よろしくお願いします



2812 Re: TEditorのOnDrawLineイベントのサンプルについて コメント数:  0件
  本田勝彦 2004/01/20 (火) 00:19
あら、わざわざスミマセン。
近日中にヘルプファイルを見直しますね。



2811 Re: TPerlFountainについて コメント数:  3件
  本田勝彦 2004/01/20 (火) 00:18
ちょっと、調べてみます。かなり忘却モード・・・



2810 TEditorのOnDrawLineイベントのサンプルについて コメント数:  1件
  てっぺい 2004/01/19 (月) 23:11
原因:TEditor ヘルプファイル ver 2.47 の記述ミス
先ほど作者様とのメールで行った会話をまとめて掲載させていただきます。
TEditorのOnDrawLineイベントのサンプルはそのままコピー&ペーストしても動作しません。
修正箇所
1.usesにheFountainを追加
2.case TEditorSelectionState(Byte(Selected)) ofの各文末に「;」
3.while Parser.Token <> toEof do となっているところを
while Parser.NextToken <> toEof do に修正すれば動作します。



2809 Re^4: 検索、置換について コメント数:  0件
  Km 2004/01/19 (月) 18:46
> メモ帳の検索ダイアログの「次を検索」のような機能を
> 実装したかったのですが、Delphiでは無理なんですか?

あっ、ダイアログを出してやりたいのですね。見まちがいました。
Delphiでも簡単にできます。SetFocusすればよかったかな。

> 検索文字列についてはTEditorExで試していますが、
> 検索文字列を予約語に登録する方法がわかりません。

これはちょっと勘違いということで。

> あと、もう1つ質問なんですが、
> メールアドレスやURL上をクリックする前にリンクを取得することは
> 可能でしょうか?

ヘルプの「語句の選択サンプルコード」がきっと参考になりますよ。



2808 Re^3: 検索、置換について コメント数:  1件
  もも 2004/01/19 (月) 18:00
本田さん、Kmさんこんにちは。
お返事ありがとうございます。

> 単に、検索、次を検索(して選択)、前を検索(して選択)、
> をダイアログを出さずにやりたいだけと私は読み取ったのですが、
> 違うのかな?

メモ帳の検索ダイアログの「次を検索」のような機能を
実装したかったのですが、Delphiでは無理なんですか?

検索文字列についてはTEditorExで試していますが、
検索文字列を予約語に登録する方法がわかりません。
置換えの文字列も同じように選択させることはできますか?

あと、もう1つ質問なんですが、
メールアドレスやURL上をクリックする前にリンクを取得することは
可能でしょうか?
サンプルではヒントウィンドウを表示されていますが、
ヒントをメールアドレスやURLにするようなことが
できたらいいなと思っています。
どうぞよろしくお願いします。



2807 TPerlFountainについて コメント数:  4件
  Domo 2004/01/19 (月) 13:06
こんにちは。
TPerlFountainを使っていて思ったのですが、
Perl では
print "aaa(改行)
aaaaaaa";
print 'aaa(改行)
aaaaaaa';
が許されます。

ダブルクオーテーションについてはPerlFountain.pas 内 LastTokenBracket内の
「複数行に渡って " による引用が許されるのであれば不必要な処理。」
のところをコメントアウトしてできましたが、シングルクオーテーションについてはどうやったらできるようになるのでしょうか?

みなさん、お忙しいと思いますがご教授いただける方よろしくお願いします。



2806 Re^3: 検索、置換について コメント数:  0件
  本田勝彦 2004/01/17 (土) 16:15
> 複数選択はできません。

あ、なるほど。選択領域の飛び地は出来ませんね。



2805 Re^2: 検索、置換について コメント数:  3件
  Km 2004/01/17 (土) 13:10
> > 検索、置換の処理でダイアログを閉じないで
> > 次の検索文字列に移動することは可能ですか?
> > あと、キャレット位置の検索文字列以外も選択するようにするには
> > どうしたらいいですか?
>
> 残念ながらこちらは出来ません。が、Km さんの TEditorEx を使って
> 検索文字列を予約語に登録する方法で実装可能だったように思います。
> 違ってましたっけ?

単に、検索、次を検索(して選択)、前を検索(して選択)、
をダイアログを出さずにやりたいだけと私は読み取ったのですが、
違うのかな?
TEditorExでは、検索文字列全部を強調表示できますが、同時に
複数選択はできません。



2804 Re: 検索、置換について コメント数:  4件
  本田勝彦 2004/01/17 (土) 12:37
> 検索、置換の処理でダイアログを閉じないで
> 次の検索文字列に移動することは可能ですか?

これは Delphi でのプログラミング手法の問題だと思いますが、Delphi
に付属のサンプルにそういう実装があったと思います。SearchDialog コンポ
のサンプルだと思いました。

> あと、キャレット位置の検索文字列以外も選択するようにするには
> どうしたらいいですか?

残念ながらこちらは出来ません。が、Km さんの TEditorEx を使って
検索文字列を予約語に登録する方法で実装可能だったように思います。
違ってましたっけ?




2803 検索、置換について コメント数:  5件
  もも 2004/01/16 (金) 18:53
こんにちは。
TEditor使わせていただこうと思っています。
早速ですが、いくつか質問があるので教えてください。
検索、置換の処理でダイアログを閉じないで
次の検索文字列に移動することは可能ですか?
あと、キャレット位置の検索文字列以外も選択するようにするには
どうしたらいいですか?
どうぞよろしくお願いします。



2802 Re^3: EditorUndoObj コメント数:  0件
  十五夜るな  | jugoya@jcom.home.ne.jp 2004/01/16 (金) 14:49
 http://members.jcom.home.ne.jp/milkymoon/
私は同様の動作を実現するために,
TEditorScreenStringオブジェクトを切り替えるという方法をとってますが,
選択範囲などの状態設定を別に管理しなければならず結構めんどうです.
最近は,あまり意味は無いのかなと感じてたりします=^-^;=

> 複数の TEditor を生成して、1個だけ見せておく。切替には BrigToFront で
> 該当 TEditor を前へ持って来る。
>
> というのが、一番簡単ですね。

が良いのかもしれません...



2801 Re^2: EditorUndoObj コメント数:  1件
  KJ 2004/01/15 (木) 20:11
> 複数の TEditor を生成して、1個だけ見せておく。切替には BrigToFront で
> 該当 TEditor を前へ持って来る。
>
> というのが、一番簡単ですね。
わかりました。
まだまだDelphiはじめてちょっとなので難しいですががんばってみます。
本田様、アドバイスありがとうございます。




[PR]よく当たる個別鑑定占い:今なら無料お試し鑑定中!