Форум: "Начинающим";
Текущий архив: 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