Вверх ↑
Этот топик читают: Гость
Ответов: 210
Рейтинг: 52
#76: 2009-08-17 18:20:21 ЛС | профиль | цитата
Assasin, runtimeerror в большинстве случаев означает обращение к несуществующему/уничтоженому объекту
Какую у Вас нагрузку на себе несет dt1: TData;
после локального определения и до Draw_Text(dt1); для метода _work_doDrawNext0 ?
карма: 1
слтв
0
Разработчик
Ответов: 4671
Рейтинг: 420
#77: 2009-08-23 20:52:03 ЛС | профиль | цитата
А может ли case проверять на совпадение не только по индексу(integer, byte...), но и по тексту Простите если ответ прост.
карма: 10
0
Администрация
Ответов: 15278
Рейтинг: 1514
#78: 2009-08-23 23:21:56 ЛС | профиль | цитата
не может
карма: 26
0
Разработчик
Ответов: 4671
Рейтинг: 420
#79: 2009-08-24 12:33:49 ЛС | профиль | цитата
Вот готовил hiIf_Else_Multi, мульти сравнение данных парился 4 дня, доработался , обязательно, если я возьмусь за крупный код, будет runtimeerror 216 и я так и не понял, где у меня неинициализированные, уничтоженные, ненагруженные переменные, код запускается, но, как я и писал, рантаймэррор двестишэшнатцать.
Кому не надоел, помогите нубу в программиовании, написал комментарий по каждому непонятному действию, пожаааалуста code_14676.txt
карма: 10
0
файлы: 1code_14676.txt [3.4KB] [173]
Администрация
Ответов: 15278
Рейтинг: 1514
#80: 2009-08-24 12:41:07 ЛС | профиль | цитата
где и когда меняется количество элементов в массивах op,s и opTyp ?
------------ Дoбавленo в 12.44:
Assasin писал(а):
обязательно, если я возьмусь за крупный код, будет runtimeerror 216 и я так и не понял, где у меня неинициализированные, уничтоженные, ненагруженные переменные, код запускается, но, как я и писал, рантаймэррор двестишэшнатцать.

это хороший практический пример того, почему ВПГ имеет такое преимущество в сравнение с ЯВУ с точки зрения возможности допущения ошибок в программе как синтаксических, так и симантических...
карма: 26
0
Разработчик
Ответов: 4671
Рейтинг: 420
#81: 2009-08-24 12:44:15 ЛС | профиль | цитата
Отвечу вопросом на вопрос: а как менять количество элементов в массиве? Или это эквалиэнтно этому?
#pas
for i1 := 0 to int1 do begin Result := Result + ',' + Cmp(s[i1]); s[i1] := ''; end;//вывод результата в формате "%результат сравнения блока#,"
карма: 10
0
Администрация
Ответов: 15278
Рейтинг: 1514
#82: 2009-08-24 12:56:24 ЛС | профиль | цитата
Assasin писал(а):
а как менять количество элементов в массиве?

SetLength(array, count);
карма: 26
1
Голосовали:Assasin
Разработчик
Ответов: 4671
Рейтинг: 420
#83: 2009-08-24 13:04:19 ЛС | профиль | цитата
Я поставил вот тут:
#pas
function THIIf_Else_Multi.Cmp(Mask:string):string;
//...
begin
SetLength(op,0); SetLength(OpTyp,0); int := 0; i := 0; ot := 0; Cn := 0;
while i < length(Mask) do begin//определение операндов
inc(i);
SetLength(OpTyp,(ot + 1));
SetLength(op,i + 1);
//...
и тут
#pas
function THIIf_Else_Multi.MultiCompare(Maska:string):string;
//...
begin
SetLength(s,0);
Result := ';
int1 := 0;
Cn1 := 0;
for i1 := 1 to length(Maska) do
begin
SetLength(s,int1);
//...
------------ Дoбавленo в 13.04:
Тот же runTime
------------ Дoбавленo в 13.34:
Ура!!! Заработало, поставил установку длины массива в процедуру SetCount и приравнял 100, но не знаю, практичен такой метод или нет
карма: 10
0
Администрация
Ответов: 15278
Рейтинг: 1514
#84: 2009-08-24 14:55:10 ЛС | профиль | цитата
Assasin писал(а):
но не знаю, практичен такой метод или нет

нет
карма: 26
0
Разработчик
Ответов: 4671
Рейтинг: 420
#85: 2009-08-25 14:32:23 ЛС | профиль | цитата
Я вот доделал до ума код, но при выходе из программы(пример из архива в "Компоненты"->"If_else_Multi") вылетает ошибка в Windows-е не знаю почему, сначала это было установка значения элемента массива, индекс которого превышает длину(но тогда компонент вообще не работал), а сейчас чего не знаю Может для этих массивов нужен destructor Хотя я не представляю пока зачем нужны constructor и destructor
вобщем вот код:
code_14689.txt
------------ Дoбавленo в 16.10:
Разобрался! Вместо
#pas
for i1 := 0 to slen do begin op[i1] := '; OpTyp[i1] := -1; s[i1] := '; end;
надо
#pas
for i1 := 0 to slen-1 do begin op[i1] := '; OpTyp[i1] := -1; s[i1] := '; end;
Как све просто оказывается
карма: 10
0
файлы: 1code_14689.txt [4.7KB] [190]
Разработчик
Ответов: 4671
Рейтинг: 420
#86: 2009-08-27 13:59:20 ЛС | профиль | цитата
А как с помощью операции GetTok(str,delimetr) строку можно разделить на
(перевод строки по Enter)
Символы #10#13 не работают, пишет несовместимы Char and String
карма: 10
0
Разработчик
Ответов: 25654
Рейтинг: 2085
#87: 2009-08-27 14:10:26 ЛС | профиль | цитата
Assasin, используй Parse( var S : String; const Separators : String )
карма: 19

1
Голосовали:Assasin
Администрация
Ответов: 15278
Рейтинг: 1514
#88: 2009-08-27 14:37:37 ЛС | профиль | цитата

#pas
Replace(s, #13#10, #13);
gettok(s, #13);


#pas
lst.Text := s;
for i := 0 to lst.Count-1 do
// lst.items[i] ...
карма: 26
1
Голосовали:Assasin
Разработчик
Ответов: 4671
Рейтинг: 420
#89: 2009-08-27 14:42:23 ЛС | профиль | цитата
Спасибо.
nesco, насколько я понял: быстродействие компонента с этой функцией немного уменьшится чем при GetTok, если брать один символ(например ; ), всвязи с использованием строки а не символа-делиметра.
Dilma, с вашим вариантом(2) мне более подходит, так как у меня PStrList используется, только что-то вылетело XXX.items[i] из головы .
карма: 10
0
Разработчик
Ответов: 25654
Рейтинг: 2085
#90: 2009-08-27 15:19:38 ЛС | профиль | цитата
Assasin писал(а):
с вашим вариантом(2) мне более подходит

Нельзя забывать, что Replace(s, #13#10, #13), тоже, не слишком быстрый метод, особенно, при длинном тексте. И в результате, трудно сказать, что будет работать быстрее -- спарка Replace+GetTok или Parse
карма: 19

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)