Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.07.26;
Скачать: [xml.tar.bz2];

Вниз

Странное поведение FindDialog   Найти похожие ветки 

 
Darvin   (2009-05-27 17:53) [0]

Здравствуйте!
Выполняю с помощью FindDialog-а поиск по тексту в Memo. Иногда, далеко не всегда, возникает Access Violation при нажатии кнопки [Отмена] или клавиши Esc в нем. С чем это может быть связано? Я действий никаких на его закрытие не программировал. Может быть, я что-то туплю?


 
{RASkov} ©   (2009-05-27 17:56) [1]

мало инфы для реальной помощи, а так: У тебя обращение к "битой" памяти...


 
Darvin   (2009-05-27 17:59) [2]

могу привести коды вызова FindDialog и обработки FindDialogFind. Но они тут не вызываются


 
KilkennyCat ©   (2009-05-27 18:21) [3]

тестировать на другой машине.


 
{RASkov} ©   (2009-05-27 19:41) [4]

> [2] Darvin   (27.05.09 17:59)
> могу привести коды

приводи.... приведи строку где ав...


 
Darvin   (2009-05-28 10:36) [5]


> приводи.... приведи строку где ав...

Вываливается на Application.Run  (((


 
Darvin   (2009-05-28 10:43) [6]

Вызов диалога:
procedure TfrmLogVisualPage.acSearchExecute(Sender: TObject);
begin
  FindDialog.Execute;
end;


Обработка поиска:
procedure TfrmLogVisualPage.FindDialogFind(Sender: TObject);
var
 I, PosReturn, SkipChars : Integer;
 IsFound                 : Boolean;

 function FindIterate ( Idx : Integer ) : Boolean;
 var
   I    : Integer;
 begin         // Найти в строке совпадение
   Result := true;
   if frMatchCase in FindDialog.Options then  // С учетом регистра
     PosReturn := Pos ( FindDialog.FindText, meRecParams.Lines[Idx] )
   else                                       // Без учета регистра
     PosReturn := Pos ( AnsiUpperCase(FindDialog.FindText), AnsiUpperCase(meRecParams.Lines[Idx]) );

   // Если только слово целиком
   if frWholeWord in FindDialog.Options then begin
     if ( PosReturn > 1 ) and ( meRecParams.Lines[Idx][PosReturn - 1] <> " " ) then
       PosReturn := 0;
     if ( PosReturn < Length(meRecParams.Lines[Idx]) ) and
        ( meRecParams.Lines[Idx][PosReturn + Length(FindDialog.FindText) + 1] <> " " ) then
       PosReturn := 0;
   end;

   // Нашли?
   if PosReturn <> 0 then
   begin
     // Подсчет кол-ва Enter-ов
     Skipchars := 0;
     for I := 0 to Idx - 1 do
       Skipchars := Skipchars + Length(meRecParams.Lines[I]);
     SkipChars := SkipChars + (Idx*2);
     // Общее смещение по коду
     SkipChars := SkipChars + PosReturn - 1;

     // Выделить найденный текст
     meRecParams.SetFocus;
     meRecParams.SelStart := SkipChars;
     meRecParams.SelLength := Length ( FindDialog.FindText );
     FSearchStartLn := Idx + 1;   // С этой строки начнем поиск при следующей попытке
     IsFound := true;
     meRecParams.BringToFront;

     Result := false;
   end
 end;  // of FindIterate
 //--------------------------------------------------------------

begin
 IsFound := false;
 // Пройти по строкам Memo от последней найденной до следующей или до конца
 if frDown in FindDialog.Options then  // Вниз по тексту
 begin
   for I := FSearchStartLn to meRecParams.Lines.Count - 1 do
     if not FindIterate(I) then Break
 end
 else begin                            // Вверх по тексту
   for I := FSearchStartLn - 2 downto 0 do
     if not FindIterate(I) then Break;
 end;

 // Текст не найден - обнулить поиск
 if not IsFound then begin
   ssMessageInfo ( 0, MSG_TextNotFound_s, [FindDialog.FindText] );
   FSearchStartLn := 0;
 end;
end;


 
Плохиш ©   (2009-05-28 11:56) [7]


> Darvin   (28.05.09 10:36) [5]
>
>

В делфи встроен хороший отладчик.

> Darvin   (27.05.09 17:59) [2]
>
> могу привести коды

Это ты нам одолжение сделаешь?


 
Darvin   (2009-05-28 12:20) [8]

>Плохиш ©
>Это ты нам одолжение сделаешь?
Хамить не надо! Если бы мне удалось им воспользоваться, я бы на форум не ходил... Укажи мне, темному, функцию ХОРОШЕГО отладчика, которая решит эту проблему, если ты такой умный.
А если у тебя нет светлых мыслей, то и постить нечего...


 
Сергей М. ©   (2009-05-28 12:33) [9]


> Access Violation при нажатии кнопки [Отмена] или клавиши
> Esc в нем


А причем здесь тогда Application.Run ?


 
Darvin   (2009-05-28 12:47) [10]

>Сергей М.
Вот и я не погимаю. При нажатии в режиме отладки возникает АВ и отладчик останавливается на этой строке


 
Плохиш ©   (2009-05-28 12:52) [11]


> Darvin   (28.05.09 12:20) [8]
>
> >Плохиш ©
> >Это ты нам одолжение сделаешь?
> Хамить не надо! Если бы мне удалось им воспользоваться,
> я бы на форум не ходил... Укажи мне, темному, функцию ХОРОШЕГО
> отладчика, которая решит эту проблему,

Точки останова, кнопки F7/F8.


 
Сергей М. ©   (2009-05-28 12:53) [12]

для начала пересобери  свой проект с Use Debug DCUs = True


 
Darvin   (2009-05-28 13:49) [13]

>для начала пересобери  свой проект с Use Debug DCUs = True
Ок, спасибо, попробую


 
Anatoly Podgoretsky ©   (2009-05-28 16:55) [14]

> Darvin  (28.05.2009 12:20:08)  [8]

Отладчик он в голове



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2009.07.26;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.006 c
2-1243718076
Rembo
2009-05-31 01:14
2009.07.26
TApplicationEvents.OnException получить имя метода из Exception


2-1243760229
HRustBB
2009-05-31 12:57
2009.07.26
модальный вызов формы из длл


15-1243091123
NailMan
2009-05-23 19:05
2009.07.26
кто какие нетбуки пользует? Какие впечатления?


15-1242938302
Юрий
2009-05-22 00:38
2009.07.26
С днем рождения ! 22 мая 2009 пятница


11-1197097138
zNk
2007-12-08 09:58
2009.07.26
LZMA в MCK





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский