نمایش نتایج 1 تا 8 از 8

نام تاپیک: notpad

  1. #1

    Question notpad

    سلام بچه ها
    من برای find برنامه notpadبا استفاده ازشی memoاز کد زیر استفاده کردم ولی دوتا مشکل دارد:

    1-در موقع اجرا وقتیfinddialog را باز می کنم تا کاراکتری را پیدا کند خط اول را اصلا نظر نمی گیرد(یعنی اگر کاراکتر مورد نظر در خط اول باشد اصلا پیدایش نمی کند ولی از خط دوم به بعد را پیدا میکند).


    2-در موقع اجرا وقتfinddialog را باز میکنم و کارکتر را می دهم تا پیدا کند تا دکمه find را می زنم تا وقتی پنجره باز است آن را به حالت انتخاب در نمی آورد و باید پنجره را به صورت دستی ببندم تا ببینم چی انتخاب شده البته من یک گزینه جدا برای find nextگذاشتم
    البته این مشکل من با بستن خود به خود finddialogبعد از پیدا کردن اولین کاراکتر حل می شود ولی نمی دانم ان را در کجای برنامه بنویسم.
    خواهش میکنم راهنماییم کنید.
    البته اگر کد دیگری برای find , replace بهم بدهید ممنون میشوم.

    procedure TForm1.FindDialog1Find(Sender: TObject);
    var
    I, J, PosReturn, SkipChars: Integer;
    CursorPos : TPoint;
    begin
    CursorPos := Memo1.CaretPos;
    if frDown in FindDialog1.Options then
    begin
    for I := CursorPos.Y + 1 to Memo1.Lines.Count do
    begin
    PosReturn := Pos(FindDialog1.FindText,Memo1.Lines[i]);
    if (PosReturn <> 0) then
    begin
    SkipChars := 0;
    for J := 0 to I - 1 do
    SkipChars := SkipChars + Length(Memo1.Lines[J]);
    SkipChars := SkipChars + (I*2);
    SkipChars := SkipChars + PosReturn - 1;

    Memo1.SelStart := SkipChars;
    Memo1.SelLength := Length(FindDialog1.FindText);
    Break;
    end;
    end;
    end
    else
    begin
    for I := CursorPos.Y - 1 downto 0 do
    begin
    PosReturn := Pos(FindDialog1.FindText,Memo1.Lines[i]);
    if PosReturn <> 0 then
    begin
    SkipChars := 0;
    for J := 0 to I - 1 do
    SkipChars := SkipChars + Length(Memo1.Lines[J]);
    SkipChars := SkipChars + (I*2);
    SkipChars := SkipChars + PosReturn - 1;

    Memo1.SelStart := SkipChars;
    Memo1.SelLength := Length(FindDialog1.FindText);
    Break;
    end;
    end;
    end;
    end;

    procedure TForm1.FindClick(Sender: TObject);
    begin
    FindDialog1.Execute;
    end;

    procedure TForm1.FindNextClick(Sender: TObject);
    begin
    FindDialog1Find(nil);
    end;

    procedure TForm1.ReplaceClick(Sender: TObject);
    begin
    ReplaceDialog1.Execute;
    end;

    procedure TForm1.ReplaceDialog1Replace(Sender: TObject);
    var
    CursorPos : TPoint;
    I, J, SkipChars, PosReturn : integer;
    begin
    if frReplace in ReplaceDialog1.Options then
    Memo1.SelText := ReplaceDialog1.ReplaceText
    else if frReplaceAll in ReplaceDialog1.Options then
    begin
    CursorPos := Memo1.CaretPos;
    for I := CursorPos.Y + 1 to Memo1.Lines.Count do
    begin
    PosReturn := Pos(ReplaceDialog1.FindText,Memo1.Lines[i]);
    if PosReturn <> 0 then
    begin
    SkipChars := 0;
    for J := 0 to I - 1 do
    SkipChars := SkipChars + Length(Memo1.Lines[J]);
    SkipChars := SkipChars + (I*2);
    SkipChars := SkipChars + PosReturn - 1;

    Memo1.SelStart := SkipChars;
    Memo1.SelLength := Length(ReplaceDialog1.FindText);
    Memo1.SelText := ReplaceDialog1.ReplaceText;
    end;
    end;
    end;
    end;

    procedure TForm1.ReplaceDialog1Find(Sender: TObject);
    var
    I, J, PosReturn, SkipChars: Integer;
    CursorPos : TPoint;
    begin
    CursorPos := Memo1.CaretPos;
    for I := CursorPos.Y + 1 to Memo1.Lines.Count do
    begin
    PosReturn := Pos(ReplaceDialog1.FindText,Memo1.Lines[i]);
    if PosReturn <> 0 then
    begin
    SkipChars := 0;
    for J := 0 to I - 1 do
    SkipChars := SkipChars + Length(Memo1.Lines[J]);
    SkipChars := SkipChars + (I*2);
    SkipChars := SkipChars + PosReturn - 1;

    Memo1.SelStart := SkipChars;
    Memo1.SelLength := Length(ReplaceDialog1.FindText);
    Break;
    end;
    end;
    end;

  2. #2

    نقل قول: notpad

    دوباره سلام
    با دقت که برنامه ام را اجرا کردم دیدم یه مشکل دیگه هم داره:
    به عنوان مثال وقتی میخواهم کاراکتر h برام پیدا کنه در هر خطی اگه بیشتر از یکی بود فقط اولیش را پیدا میکنه.

  3. #3

    نقل قول: notpad

    برای انجام کارهای ویرایش متن ساده متوانید از Action ها کمک بگیرید. در واقع یک اکشن استاندارد برای Find و یا Replace.
    قبلا در مورد کار با Actions بحث شده. جستجو کنید.

    موفق باشید...

  4. #4

    نقل قول: notpad

    اگر نیازتان فوری است بدلیل مشکلی که در قسمت جسجوی سایت پیدا شده بفرمایید تا راهنماییتان کنم.

    موفق باشید...

  5. #5

    Red face نقل قول: notpad

    این یک پروژه دانشجویی و نمی توانم غیر از چیزهایی که استاد گفته چیز دیگری استفاده کنم در این برنامه فقط می توانم ازdialog,memoاستفاده کنم.
    و مشکلم هم فوریه
    من نمیدانم چرا خط اول را درfind نظر نمی گیره و................

  6. #6

    نقل قول: notpad

    سلام
    یعنی انقدر اشکال یابی برنامه ای به ای سادگی(البته برای حرفه ای ها ) سخت باشه که هیچ کس جوابم را نمی ده وقت ندارم خواهش میکنم زود جوابم را بدهید

  7. #7

    نقل قول: notpad

    اینجا همیشه به این صورت که کاربر های جدید که هنوز ابتدای راه هستند را تحویل نمی گیرند من 24 ساعت این تایپک را گذاشتم ولی به غیر از HSIMPLEهیچ کس راهنمایم نکرد حتی مدیران.
    موتور جستجو هم که غیر فعال مثل اینکه من این دفعه بدشانسی اوردم
    اگه راهنماییم کنید کمک بزرگی بهم کردید.

  8. #8

    نقل قول: notpad

    سایت چند روزی در حال Update شدن بود.

    private
    { Private declarations }
    FSelPos: integer;
    public
    { Public declarations }
    end;

    var
    Form1 : TForm1;

    implementation

    {$R *.dfm}

    procedure TForm1.FindDialog1Find(Sender : TObject);
    var
    S : string;
    startpos : integer;
    begin
    with TFindDialog(Sender) do
    begin
    if FSelPos = 0 then
    Options := Options - [frFindNext];

    if frfindNext in Options then
    begin
    StartPos := FSelPos + Length(Findtext);
    S := Copy(Memo1.Lines.Text, StartPos, MaxInt);
    end
    else
    begin
    S := Memo1.Lines.Text;
    StartPos := 1;
    end;
    FSelPos := Pos(FindText, S);
    if FSelPos > 0 then
    begin
    FSelPos := FSelPos + StartPos - 1;
    Memo1.SelStart := FSelPos - 1;
    Memo1.SelLength := Length(FindText);
    Memo1.SetFocus;
    end
    else
    begin
    if frfindNext in Options then
    S := Concat('There are no further occurences of "', FindText,
    '" in Memo1.')
    else
    S := Concat('Could not find "', FindText, '" in Memo1.');
    MessageDlg(S, mtError, [mbOK], 0);
    end;
    end;
    end;

    procedure TForm1.Button1Click(Sender : TObject);
    begin
    FSelPos := 0;
    FindDialog1.Execute;
    end;


    فکر کنم بتوانید آن ذا برای Replace هم تعمیم دهید.
    موفق باشید...

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •