Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.07.25;
Скачать: CL | DM;

Вниз

Проблема с CommaText   Найти похожие ветки 

 
cvg   (2004-07-08 17:53) [0]

Hi All! Помогите чайнику кто чем сможет!

В одном месте проги у меня строчка

list.CommaText := line;

работает без проблем, в другом -- ругается словами Access Violation. Причем происходит это на стороке

if (FDelimiter <> Value) or not (sdDelimiter in FDefined) then

в процедере

procedure TStrings.SetDelimiter(const Value: Char);

В чем может быть трабл?


 
ssk ©   (2004-07-08 17:55) [1]

по коду похоже, что тебе в конференцию "Компоненты" надо идти


 
Семен Сорокин ©   (2004-07-08 17:58) [2]

ты бы весь код привел? интересуют строки до
list.CommaText := line;


 
cvg   (2004-07-08 18:19) [3]

Там, где ругается, предшествующий код такой:

  try
   line := Clipboard.AsText;
  except
   raise Exception.Create("blah-blah-blah");
  end;
  list.CommaText := line;

а там, где не ругается, такой:

   Readln(FL,line);
   Application.ProcessMessages;
   list.CommaText := line;


 
cvg   (2004-07-09 07:23) [4]

Люди! Pls не молчите! подскажите че-нить! Ибо сильно нужно... :/


 
Alx2 ©   (2004-07-09 08:15) [5]

>cvg   (09.07.04 07:23) [4]
list - что это? Как он создается и что с ним происходит "до того"?


 
cvg   (2004-07-09 08:21) [6]

list описан в вызывающей процедуре как list:TStringList.


 
Думкин ©   (2004-07-09 08:22) [7]


> [6] cvg   (09.07.04 08:21)

А он создан? Как он живет и т.п.


 
Alx2 ©   (2004-07-09 08:24) [8]

Все-таки нужен код. Подробный. Иначе игра в "холодно-горячо" получается какая-то.


 
cvg   (2004-07-09 08:44) [9]

Вот тут выдает ошибку:

procedure Data_from_KKK (Geld,Geld_locked:double;lots,lots_locked:integer);
var i1,i2:integer;
begin
  windows.BringWindowToTop(h_mons);
  PressKeys("Ctrl+C",10);
  try
   line := Clipboard.AsText;
  except
   raise Exception.Create("blah-blah-blah");
  end;
  list.CommaText := line;
// Разбор значений

А вот тут все нормально:

function file_reading:Boolean;
var buf:array [1..2] of double;
begin
 if eof(FL)
 then Result := false
 else
  begin
   buf[1] := ar[4]; ar[4] := ar[1];
   buf[2] := ar[5]; ar[5] := ar[2];
   Readln(FL,line);
   Application.ProcessMessages;
   list.CommaText := line;
// Разбор значений
   Result := true;


 
КаПиБаРа ©   (2004-07-09 08:47) [10]

В первом случае list не создан


 
cvg   (2004-07-09 08:50) [11]

Но он же определен в вызывающей процедуре! И потом, я ведь уже пробовал дописывать в var

var ... list:TStringList; line:string;

-- не помогло Ж:((


 
ЮЮ ©   (2004-07-09 08:51) [12]

да и во втором, похоже, создан случайно


 
КаПиБаРа ©   (2004-07-09 08:51) [13]

У тебя в коде есть строка list := TStringList.Create; ?


 
КаПиБаРа ©   (2004-07-09 08:52) [14]


> ЮЮ ©

Вторым случаем может быть вложенная процедура.


 
Alx2 ©   (2004-07-09 08:52) [15]


procedure Data_from_KKK (Geld,Geld_locked:double;lots,lots_locked:integer);
var i1,i2:integer;
List : TStringList;
begin
 windows.BringWindowToTop(h_mons);
 PressKeys("Ctrl+C",10);
 try
  line := Clipboard.AsText;
 except
  raise Exception.Create("blah-blah-blah");
 end;
 List := TStringList.Create;
try
 list.CommaText := line;
// Разбор....
finally
List.Free;
end;


 
ЮЮ ©   (2004-07-09 08:52) [16]

а строчка list := TStringList.Create  в вызывающей процедуре есть?


 
Anatoly Podgoretsky ©   (2004-07-09 08:54) [17]

Где ни будь возможно и есть, а что?


 
cvg   (2004-07-09 09:02) [18]

Точно, перед вторым вызовом (который без ошиюок проходит) есть такая! Типа, и перед первым должна быть? Ща попробую...


 
ЮЮ ©   (2004-07-09 09:07) [19]

если Data_from_KKK - вложенная в ту самую вызывающую, то наличие, причем до вызова Data_from_KKK, ну просто необходимо.

если же Data_from_KKK - внешняя и вызывается из разных процедур и им этот list ьоже нужен, то надо добавить list в параметры и не забыть создать для вызова.

если же list нужен только в Data_from_KKK, то см. [15]


 
cvg   (2004-07-09 09:21) [20]

ПРОКАТИЛО!!! Всем спасибо! Только еще ма-аланький вопросец:

В принципе CommaText -- это чисто временное решение. Вместо него хотелось бы использовать DelimitedText (потому что в выдираемом тексте есть числа с десятичными запятыми). Теперь, чтобы мне переопределить Delimiter, я в var должен написать Delimiter:Char;, а в теле проседуры -- Delimiter := " ";. Правильно?


 
cvg   (2004-07-09 09:29) [21]

Ой, там вроде так должно быть:

  list := Tstringlist.create;
  list.Delimiter := " ";


 
ЮЮ ©   (2004-07-09 09:45) [22]

К сожалению, IMHO, list.Delimiter := " " доопределяет, а не переопределяет разделители, и десятичная запятая так и останется в числе разделителей. Поэтому надежнее самому парсить текст и выделять "единицы" информации


 
ЮЮ ©   (2004-07-09 09:52) [23]

Хотя, помнится, этот побочный эффект вылазил, если определенного тобой разделителя не было в строке. Т.е. достатосно так:
if Pos(list.Delimiter , s) > 0 then
 list.DelimitedText := s
else
 list.Text := s;


 
КаПиБаРа ©   (2004-07-09 09:56) [24]


> cvg

Там еще где то надо вставить list.Free :)


 
cvg   (2004-07-09 09:56) [25]

Да вроде как я в последнем варианте написал, так работает -- например, list[19] оказался равным "227,10" (без кавычек, конечно). Что, собственно, я и хотел получить. Вот.


 
cvg   (2004-07-09 09:58) [26]

list.Free? Ладно, где-нить воткну... А то память не освободится, что ли?


 
Думкин ©   (2004-07-09 10:18) [27]


> [26] cvg   (09.07.04 09:58)

Ты бы книжку какую почитал, что ли?



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

Текущий архив: 2004.07.25;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.053 c
1-1089787498
TransparentGhost
2004-07-14 10:44
2004.07.25
TComboBox - не могу использовать Canvas.


1-1089737316
Prostoi
2004-07-13 20:48
2004.07.25
Как удалить каталог?


14-1088768593
AlexG
2004-07-02 15:43
2004.07.25
Кто может объяснить, что это за ошибка?


1-1089274152
sashok
2004-07-08 12:09
2004.07.25
Выполнение процедур из dll


14-1088753757
Alexei Sviridov
2004-07-02 11:35
2004.07.25
IB Server for RH Linux