Tmemoを使ってソートを行いたいと思っています。
33333
22222
11111
とデータが入力されていれば
11111
22222
33333
と並び替えたいと思っています。
まだまだ初心者の為、Tmemoが並び替えを行える
ものであるか?という事すら分かりません。
どの様な並び替えの方法があるか、教えて下さい。
よろしくお願いします。
Halbow です。
TMemo.Lines は TStrings 型ですのでソートメソッドがありません。
TStringList のインスタンスに写し取って、ソートしてから戻します。
Form1 に Memo1 と Button1 を置いて以下のようにします。
procedure TForm1.FormCreate(Sender: TObject);
begin
Memo1.Clear;
Memo1.Lines.Add('33333');
Memo1.Lines.Add('22222');
Memo1.Lines.Add('11111');
end;
procedure TForm1.Button1Click(Sender: TObject);
var
SL:TStringList;
begin
SL := TStringList.Create;
try
SL.Assign(Memo1.Lines);
SL.Sort;
Memo1.Lines.Assign(SL);
finally
SL.Free;
end;
end;
わたしが先日作ったものに、"TStringsをソートする"クラスがあります。
ソート用メソッドは自分で書かなければいけませんけど、それなら問題なく、ソートができます。
が、作ったばっかり(一応ちゃんと動くことは確認しました)なので、まだアップロードしてません。
とりあえずどこでもいいからアップロードするとして、アップロードまでにもあと半日くらいかかると思いますけど、それでもよければ…。
Halbowさんたかみちえさん、素早いお返事ありがとうございます。
Halbowさんに教えて頂いたソースを実行した所ソートは出来ました。
今、実際にやりたい事は、スケジュールをTmemoの中に登録して
登録される毎に並べ替えを実行したいと思っております。
TmemoのOnChangeイベント内で行えるかなと思っていたのですが
上手く行きません。
よろしければ、もう少し教えていただけないでしょうか。
よろしくお願いします。
Halbow です。
>TmemoのOnChangeイベント内で行えるかなと思っていたのですが
ソートは、コストがかかる演算です。TMemo.OnChange イベントは
一文字でも変更があるとおきます。このタイミングでソートするのは
大変です。数行ならすぐにできますが、行が多くなると時間がかかります。
>登録される毎に並べ替えを実行したいと思っております。
「登録された」瞬間をプログラムでとらえることができればいいのですね?
しかし、これはどの瞬間なのか作っている本人しか分からないのでは。
改行が入力されたときとか?
個人的には、ソートするためのボタンかメニュー項目があって、自動
ソートではなく、ユーザがソートしたいときにソートするとよいと
思います。
新たにFormを作成しMemoを貼り付けて登録ボタンを
クリックしたら時にソートするようにしたら、無事に
ソートを行う事が出来ました。
Delphiは全くの初心者のため、現在はTMemoを42個使って
カレンダーを作っている状態です・・・。
これでは、後々の処理等も複雑になってくると思います。
単純にスケジュール管理ソフトを作るとすれば、
どのようなものを、使えば楽(やり易い)に作れますか?
TStringGridなどを使いたいとは思っているのですが
使い方が分からず苦戦しております。
よろしければ、再度ご教授お願いいたします。
ツイート | ![]() |