• 締切済み

delphiで検索機能を作成したいのですが・・・

Edit1に数字を打ち込むとMemo1に表示されている同じ数字にカーソルが向かうようにしたいのですが procedure TForm1.Button1Click(Sender: TObject); begin FindAndSel(Edit1.Text,Memo1); end; としてしまうと、同じ数字があった場合でも下の行に移らずに同じ行を参照し続けてしまいます。 検索で表示されたそこから先を更に検索するにはどのようにすれば良いのでしょうか? また、001と打ってしまうと001 0012の両方が検索に引っ掛かってしまいますが完全に一致した場合のみ表示されるようにするにはどうすれば宜しいのでしょうか? ご存じの方がいらっしゃればご教授お願いします。また、このHPが分かりやすいなどありましたらお教えください。

みんなの回答

  • nag0720
  • ベストアンサー率58% (1093/1860)
回答No.1

「FindAndSel」って共通ライブラリにはないと思いますが・・・ あなたが作ったprocedureではないですか?それともどこかからコピーしてきたのでしょうか? FindAndSelを作った人に聞くしかないでしょう。 >また、001と打ってしまうと001 0012の両方が検索に引っ掛かってしまいますが完全に一致した場合のみ表示されるようにするにはどうすれば宜しいのでしょうか? 英文ならWord単位で完全一致かどうか判断することができますが、日本語の文章はWordという概念がありませんから完全一致検索は難しいでしょうね。やるとしたら、Wordの定義をきちんと決める必要があります。 (Memo1にどういうものが登録されているか分かりませんでしたので、見当はずれの回答でしたら無視してください)

shin1006
質問者

お礼

申し訳ありませんFindAndSelは自分で設定したものでした。 おっしゃる通り、完全一致での検索は出来なかったので部分一致で結果が表示されるようにしました。自己解決で申し訳ありません。 考えていましたプログラムは顧客名簿を作り、それぞれにIDを付与して検索できるようにするというものです。 要領の掴めない質問をしてしまい、申し訳ありませんでした。 回答頂きありがとうございました。

関連するQ&A

  • Delphiプログラミングについて

    この内容ではいけないのでしょか? また、代わりの方法なども教えていただけると嬉しいです ボタン ラベル がフォーム1の上に1つずつあるだけです お願いいたします unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Label1: TLabel; Button1: TButton; procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure Button1Click(Sender: TObject); private { Private 宣言 } public { Public 宣言 } end; var Form1: TForm1; i:integer; implementation {$R *.dfm} procedure hyouji; begin repeat form1.label1.caption:= 'strike'; until i = 10; end; procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (KEY = VK_RIGHT) then i:=i+1; end; procedure TForm1.Button1Click(Sender: TObject); begin hyouji end; end.

  • delphi paintbox.invalidate

    ターボdeliphiのPaintBoxです procedure TForm1.Button1Click(Sender: TObject); begin PaintBox1.Invalidate; PaintBox1.Canvas.MoveTo(0,0); PaintBox1.Canvas.lineTo(100,100); end; procedure TForm1.Button2Click(Sender: TObject); begin PaintBox1.Canvas.MoveTo(0,0); PaintBox1.Canvas.lineTo(100,100); end; procedure TForm1.PaintBox1Paint(~~~~~ ボタン1でlineTo(100,100)は描画されず、ボタン2では描画されます。 つまりPaintBox1.Invalidateで再描画させている微妙なタイミングのせいでしょうか? 再描画が終了してからlineTo(100,100)を描画したいのですが、それを知るコマンド?関数?はありますか?

  • delphi try文の使い方

    下記コードのようにエラーを回避したいのですが、try文が機能せずエラーになります。 procedure TForm1.Button1Click(Sender: TObject); var p:integer; begin edit1.text:='abc'; try p:=strtoint(edit1.Text); except p:=-1; end; label1.Caption:=inttostr(p); end; try文の使い方がわかりません。

  • Delphi for文

    これって、Delphiのバグですか?特性ですか? procedure TForm1.Button1Click(Sender: TObject); begin test(); end; //-------------------------- procedure TForm1.test(); var k,x:integer; begin paintbox1.Canvas.pen.Color:=clBlack ; x:=0; for k:=1 to 3 do begin paintbox1.Canvas.moveto(x,0); paintbox1.Canvas.lineto(x,paintbox1.Height); x:=x+2; end; end; forループ内にブレークポイントを付けて「k」の値の変化を見ると、3,2,1と逆順になります。 「x:=x+2」を「x:=x+k」に変更すると、1,2,3と普通の順になります。 なぜ、こうなるのか? 対処法はありますか? Delphi Ver6・ターボDelphi どちらも同じ状況です。

  • Delphi のフォーム操作について

    Delphi のフォーム操作について 初めて質問させてもらいます。 Delphiで、ファイルをコピーしレジストリに登録したりするソフトウェアのインストーラーのようなもの、たとえばInstallShieldのようなものを作りたいと思ったのですが、 ”次へ”ボタンを押したときにウィンドウは消えず位置も変えないで 線の上側のインストール先を選択させる画面から”現在コピーしています...”のような画面に移り変わるようにするにはどうすればいいのでしょうか。 Button1を ”次へ”ボタン としたとき procedure TForm1.Button1Click(Sender: TObject); begin form1.Destroy; begin Form2.Show; end; end; という書き方をすれば似たようなことができますが、いわゆるInstallShieldのようにはなりません。 どのように表示させればこの場合はベストなのでしょうか。 2ヶ月ほど前から少しVB.NETをいじり、最近Delphiをはじめ、 いろいろ検索してみて http://www2.big.or.jp/~osamu/Delphi/Tips/key.cgi?key=14#0295.txt こちらの記事を見つけ、参考にしましたが使いこなせませんでした。 VB.NETでも同じようなことを試みましたが、参考記事が見つからず 上で書いたような表示方法をしない形で書きました。 環境は Turbo Delphiを使用しています。 どうかご教示ください。

  • 開いているアプリをactivateするFindWindowの戻り値について

    FindWindow のreturnValue が、開いているNotePad の場合はちゃんと、0以外の値が戻ってきますが、他のアプリで試しても0しか戻ってきません。はて、どうしてなのでしょうか?MsPaint,WordPad、あるいは自作のアプリ.exe どれもだめです。御教示をお願いいたします。Delphi 6, Windows98 procedure TForm1.Button1Click(Sender: TObject); var hMemo:HWND; begin hMemo := FindWindow('Notepad',nil); if hMemo <> 0 then SetForegroundWindow(hMemo) else ShowMessage('メモ帳が見つかりません'); end;

  • Delphiのフォーカスのデータの取得。

     嬉しくって、質問を締めちゃいました。 ごめんなさい、書き込んでくれる予定だった、ご主人様ぁ~♪。 数字のフォーマットは、 procedure TForm1.TextFormat(Sender: TObject); var i : Integer; begin  i := StrToInt( TEdit(Sender).text );  TEdit(Sender).Text := Format('%.2d',[i]); end; こんな感じにできました。 数行でこんなすごい事ができるなんて、信じられません! まだまだ、例外処理がありますが、がんばります!! ここまでは私の成長の報告で、次が本題です。^w^えへへぇ。 細かい用法や単語の説明ではなく、全体的なソフトの作り方を説明しているHPや、ソースが見られる簡単なソフトはないでしょうか? Delphiのソース付きのソフトもいくつか見ましたが、やはり初心者には敷居が高くって、もっとシンプルなものでいいのですが。 これからもがんばれるために、ご主人様よろしくおねがいますぅ。

  • AVIファイルを読み込む方法

    C++でプログラミング中の者です。 使っているコンポーネントはanimate、MediaPlayer、Edit、Botton、OpenDialogです。 OpenDialogで選択したファイル名をEditに表示させ、Mediaplayerを使ってAnimateに表示させるプログラミングをしたいと思っています。 なかなかうまくいかないので、アドバイスお願いいたします。 次のは現在のプログラムです。 #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { //OpenDialog1->DefaultExt = "AVI"; //OpenDialog1->FileName = "*.avi"; if(OpenDialog1->Execute()==true){ // ファイル名が選択されたときに実行する処理  Edit1->Text=OpenDialog1->FileName; //Edit1に選択したファイル名を表示 //Animate1->Active=LoadFromFile(OpenDialog1->FileName); } } //--------------------------------------------------------------------------- void __fastcall TForm1::Edit1Change(TObject *Sender) { MediaPlayer1->Open(); MediaPlayer1->Play(); } //---------------------------------- よろしくお願いします。

  • Delphi XEの警告文を消したい

    [DCC 警告] Unit5.pas(216): W1050 set 式で WideChar がバイト char に縮小されました。'SysUtils' ユニットの 'CharInSet' 関数で使用することを検討してください。 との警告文が出ます。 ソースは procedure TForm5.Edit2KeyPress(Sender: TObject; var Key: Char); begin if not(key in['0'..'9','.',Char(VK_RETURN),Char(VK_BACK)]) then Key:=Char(0); end; です。何処をどうしたら良いのかさっぱりわかりません。 分かる人具体的に解決方法を教えてください、お願いいたします。

  • DLLサンプルプログラムが動きません

    Delphi XE5 starter で、 http://www39.atwiki.jp/kgh07155/pages/28.html を参考にして以下のようなプログラムを作りました。 コンパイルはできたのですが、Button1をクリックすると「TDllFormリソースが見つかりません」というエラーメッセージが出ます。 どういう風に修正すればいいのでしょうか? //***************************** //SamoleUnit2.pasの内容 unit Unit_Sample2; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private 宣言 } public { Public 宣言 } end; var Form1: TForm1; implementation {$R *.dfm} function ShowDLLForm(hOwner: HWND): TModalResult; stdcall; external 'DLLSample.dll'; procedure ShowDLLForm2; external 'DLLSample.dll'; // ここまで、DLLを呼び出すための記述。 procedure TForm1.Button1Click(Sender: TObject); begin ShowDLLForm(Application.Handle); // DLL側でフォームを作成した後、 // 通常のフォームのShowModalメソッドと同じ動作をして // 作成したフォームを破棄。 end; procedure TForm1.Button2Click(Sender: TObject); begin ShowDLLForm2; // DLL側でフォームを作成した後、 // 作成したフォームを表示。 end; end. //******************************** //DllSample.dprの内容 library DLLSample; uses System.SysUtils, System.Classes, Windows, Forms, Controls, Unit_DLLForm in 'Unit_DLLForm.pas' {Form1}, Unit_Sample2 in 'Unit_Sample2.pas' {Form2}; type TDllForm = class(TForm) end; {$R *.res} function ShowDLLForm(hOwner: HWND): TModalResult; stdcall; var DllForm:TDllForm; begin Application.Handle := hOwner; // 呼び出し元の情報をDLL側が受け取る。 DllForm := TDllForm.Create(Application); // DLL側でフォームを作成する。 // フォームに配置された各オブジェクトも、自動で作成される。 Result := DllForm.ShowModal; // 返し値を設定。 DllForm.Free; // DLL側で作成したフォームを破棄。 Application.Handle := 0; // 呼び出し元の情報を破棄。 end; procedure ShowDLLForm2; var DllForm:TDllForm; begin DllForm := TDllForm.Create(Application); // DLL側でフォームを作成する。 DllForm.Show; // 作成したフォームを表示。 end; exports ShowDLLForm, ShowDLLForm2; begin end. //******************************** //unit_DLLForm.pasの内容 unit Unit_DLLForm; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; type TForm1 = class(TForm) Button1: TButton; private { Private 宣言 } public { Public 宣言 } end; var Form1: TForm1; implementation {$R *.dfm} end.

専門家に質問してみよう