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

Вниз

Одновременный вызов OpenDialog1.Execute и Append(f);   Найти похожие ветки 

 
Sniper-Max ©   (2004-04-23 21:41) [0]

Я вызываю AssignFile(f, "1.txt") в таймере где записываю в фаил (f : TextFile) нужные значения.
После этого я пишу Append(f);
Короче пишу в фаил и закрываю его. (Все как обычно)

Все работает просто замечательно, но вот когда я попытался вызвать OpenDialog1.Execute по нажатию кнопки, то у меня вылетела ошибка File not found!
В дэбаге смотрел, как раз падает на Append(f);

Мне необходимо вызвать этот диалог при ведущейся записью в фаил! А тут они только по отдельности работают :(

В чем тут может быть дело? Почему не совместимо? Что посоветуете?

Эх... вот засада блин... :( Может мозг уже перегрелся :)))


 
VID ©   (2004-04-23 22:18) [1]

Ну ты вообще то не указал как закрываешь файл...

короче

procedure tform1.timer1timer(...);
begin
 assignfile(f, "1.txt");
 append(f);
 ...
 closefile(f);
end;

procedure tform1.opendialog1execute(...);
begin
 if assigned(f) then
   try closefile(f) except exit end;

 //А здесь уже делаешь чё надо с файлом имя которого имеешь в OpenDialog1.filename
end;


 
Sniper-Max ©   (2004-04-24 07:30) [2]


procedure WriteLog(...);
var
   fileLog : TextFile;
begin
   AssignFile(fileLog, "log.txt");
   Append(fileLog);
   ...
   CloseFile(fileLog);
end;


Вызывается она у меня тогда когда по сети придет посылка, я ее должен записать! Прийти она может в любой момент и я в отладке просто это на таймер запихнул (типа они приходят)...

А вот вызываю Form2.OpenDialog1.Execute для того, что бы открыть фаил для чтения, прочитать из него нужную информацию и затем отослать по сети... Совершенно fileLog тут ни причем!
Запнулся чисто на Form2.OpenDialog1.Execute;

Если я вызвал Form2.OpenDialog1.Execute и просто сижу, смотрю тупо на это диалоговое окно... То обвалится как только посылка придет и попробует записать в фаил!!!

И куда мне писать посылки если я буду тупо кликнув на "Open File"  и ничего не делая меня отвлекли, сидеть и смотреть...
Я же даже пока ничего не делаю!!! Совершенно! Просто Execute и все!


 
SPeller ©   (2004-04-24 08:36) [3]

Потому что OpenDialog.Execute не возвращается пока не закроется диалог. Тут у тебя, по все видимости, бяка с разделением ресурсов между потоками.


 
Sniper-Max ©   (2004-04-24 09:22) [4]

to SPeller
Как же мне быть?
Ладно, попробую написать свой OpenDioalog который ничего делать не будет кроме как путь к файлу вернет, что мне всего-то и надо. А потом я считаю из файла и все будет ништяк :) Надеюсь по крайней мере так :)

Но этот бред мне совершенно не понятен!!! Какое нафиг разделение ресурсов? Кривой какой-то компонент этот OpenDialog :(


 
SPeller ©   (2004-04-24 09:26) [5]


> Кривой какой-то компонент этот OpenDialog

Компонент-то ровный, а вот руки ваши такими не назовёшь.


> попробую написать свой OpenDioalog который ничего делать
> не будет кроме как путь к файлу вернет

А так не получится?
MyVar := MyFileName;
Нафига диалоги всякие?


 
VID ©   (2004-04-24 10:58) [6]

Sniper-Max
А ты примаешь посылки в основном потоке ?
Т.е. у тебя как я понимаю в основном потоке создаётся компонент TClient/ServerSocket и с его помощью ты принимая текст, записываешь (там же в основном потоке) этот текст в файл ? так ?
Если так, то учти что любое модальное окно, каковым является окно выбора файла (OpenDialog) не даст нормально фунционировать твоему коду, который выполняется "как бы в фоне".

Если же сам приёмник посылок (TClient/ServerSocket) создан и дополнительном потоке, и проблема всё равно возникает, то незнаю тогда в чём дело.

А таймер твой - плохой имитатор "фонового" приёма посылок, потому что ты его поставил в основной поток, а там действует правило модального окна...

У меня есть подозрение, что дельфи кривым называют те, кто раньше программировал на VB :) - ну привыкли они к кривости, и она для них является нормой.


 
SPeller ©   (2004-04-24 11:33) [7]


> У меня есть подозрение, что дельфи кривым называют те, кто
> раньше программировал на VB :)

Потому что VB не поддерживает многопоточности :)


 
Sniper-Max ©   (2004-04-25 08:22) [8]

to VID

Я жду события от DLL, она соединяется, принимает посылки...
Мне приходит посылка (байтовый массив).
Я ее разбираю для дальнейшего отображения в моей проге и записываю ее в фаил.
Так же я могу собрать нужную посылку и отослать...
В одной из пасылок должна быть конфигурация, которая читается из файла... Я решил с этим опен диалогом...

Если не вести лог, т.е. не вызывать функцию Append, то все работает, вижу, что посылки идут, отображаются...

Да, я не создавал больше потоков... Наверное ты прав на счет модального окна... Я не знаю... буду разбираться...


 
Sniper-Max ©   (2004-04-25 08:31) [9]

Я тут хотел свое окошко написать для открытия окна, да вот только опять на такую же фигню напоролся.
Я воткнул копмпонент DirectoryListBox и вот при смене дирректории он у меня падал! Это опять же если лог вести.

Сделал пока так... просто ручками фаил написать для дальнейшего чтения и передачи посылки :) Хотелось бы удобства в выборе файла...


 
Sniper-Max ©   (2004-04-25 18:12) [10]

to SPeller

Да... видимо придется отказаться от диалога упрощающего выбор файла.

Но мне это все же не до конца понятно... :( Почему так...


 
VID ©   (2004-04-25 21:28) [11]

приём/передачу посылок реализуй в доп. потоке....
пусть все функции и callback функции используемой тобою библиотеки обрабатываются в этом доп. потоке.


 
RealRascal ©   (2004-04-26 06:01) [12]

я вот что не понял: у тебя что, файл лога каждый раз заново открывается, когда что-то в лог записать нужно?

В любом сл., если у тя вылазит file not found то попробуй вставить вместо append вот это
if fileexists(filename) then
begin
assign(f,filename);
append(f);
end else
begin
assign(f,filename);
rewrite(f);
end;


 
Sniper-Max ©   (2004-04-26 06:58) [13]

Если файл существует тогда открываем его на запись в конец файла иначе перезаписываем...
Это как бы совсем не то, что мне надо.
Дело не в ошибки на существование файла.

Файл конечно открывается и закрывается каждый раз, а вдруг прога упадет! Короче что бы данные не потерять!

Попробую создать дополнительный поток...


 
Sniper-Max ©   (2004-04-27 06:48) [14]

Все, я понял в чем тут дело!
Тут на самом-то деле проблема намного легче!
Вся фишка в том, что при вызове OpenDialog он меняет текущую директорию, а путь к лог-файлу у меня не абсолютный.
Я теперь при запуске программы определяю полный путь к моему логу и спокойно вызываю диалог открытия файла :)

Короче как всегда... глупая проблема, но мозги не всегда сразу включаются :)
Вообще спасибо чуваку не работе! Он натолкунул на эту мысль :)

Всем спасибо за помощь! ;)))
Удачи и хорошего кода в программах :)


 
RealRascal ©   (2004-04-27 16:21) [15]


> Sniper-Max ©   (26.04.04 06:58) [13]

не надо ради этого делать close. Достаточно сделать flush.


 
han_malign ©   (2004-04-27 18:03) [16]

>не надо ради этого делать close. Достаточно сделать flush.
- для текстового файла? Щазз, разбежался - посмотри реализацию TextOpen...



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

Форум: "Потрепаться";
Текущий архив: 2004.05.16;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.038 c
9-1072015827
MrAngel
2003-12-21 17:10
2004.05.16
Найти координаты точки внутри полигона.


8-1077179147
AlexV
2004-02-19 11:25
2004.05.16
Повернуть изображение в TImage на 90 градусов


3-1082103402
Иксик
2004-04-16 12:16
2004.05.16
Distinct с учетом регистра


4-1080470485
марсианин
2004-03-28 14:41
2004.05.16
Скроллинг колесиком в моих приложениях


3-1082235402
Goida
2004-04-18 00:56
2004.05.16
Непонятный файл требуется и база не открывается...





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский