Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (все версии) - часть 4

Модерирует : ShIvADeSt

ShIvADeSt (28-06-2009 02:10): Продолжение в http://forum.ru-board.com/topic.cgi?forum=33&topic=10477  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101

   

Frodo_Torbins

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Antananarivu
Попробуйте воспользоватся процедурой LocalAsyncVclCall:

Код:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Timer1.Enabled:=false;
  LocalAsyncVclCall(Dm.LoadMsg);
end;

и тогда:

Код:
procedure TDM.LoadMsg;
...
begin
  ...
  EnterMainThread;
  try
    if (i_t=0) and (status= -25) then Timer1.Interval:=600000;
    Timer1.Enabled:=true;
    t:=incMillisecond(time,timer1.interval);
  finally
    LeaveMainThread;
  end;
end;

Всего записей: 2319 | Зарегистр. 24-05-2007 | Отправлено: 17:38 03-10-2008
Antananarivu

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Нет...  
Даже не компилируется вот это:  LocalAsyncVclCall(Dm.LoadMsg) - несовпадение типов пишет.

Всего записей: 151 | Зарегистр. 10-10-2006 | Отправлено: 18:16 03-10-2008
Frodo_Torbins

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Хотя нет, так не пойдет.
Попробуйте в таймере просто вызвать EndMenu перед EnterWorkerThread.

Всего записей: 2319 | Зарегистр. 24-05-2007 | Отправлено: 18:30 03-10-2008
Antananarivu

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Меню исчезло... но во время отработки Dm.LoadMsg - меню становится недоступно...

Всего записей: 151 | Зарегистр. 10-10-2006 | Отправлено: 18:46 03-10-2008
Frodo_Torbins

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Antananarivu
Ну тогда остается только запихнуть весь код из LoadMsg в полноценный поток.

Всего записей: 2319 | Зарегистр. 24-05-2007 | Отправлено: 19:04 03-10-2008
Antananarivu

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Видимо да... спасибо за помощь..попробую..
 
Добавлено:
Frodo_Torbins  
Кстати, убрал вообще потоки. Кинул на форму элемент AntiFreeze из Indy (антизаморозка). теперь вся прога выполняется в одном потоке. Проблема осталось таже самая... может быть это вообще глюк именно popupmenu?..  
 
Добавлено:
И еще одну вещь сделал... убрал вообще потоки, убрал вообще Antifreeze. В процедуре LoadMsg оставил только вот такой код:

Код:
Procedure LoadMsg;
var t: integer
begin
repeat
t:=t+1-1;
until 1=2;
end;

То есть проблема видимо в том, что фрограмма передает управление DM и уходит с формы Form1. Видимо просто в процедуре отображающей popup и отслеживающее перемещение мыши надо что-то подправить, неужели никто не сталкивался??

Всего записей: 151 | Зарегистр. 10-10-2006 | Отправлено: 19:09 03-10-2008
Frodo_Torbins

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Antananarivu
Это не глюк, а особенность его работы. Проблема в том, что он создает локальную петлю сообщений (подробнее: Сообщения Windows). Все эти AntiFreeze и EnterWorkerThread тоже создают такую петлю. И вот пока ихняя петля работает, петля в popupmenu заблокирована. Это как стопка коробок:
------------------------------------
| петля в EnterWorkerThread |
------------------------------------
------------------------------------
|      петля в popupmenu      |
------------------------------------
------------------------------------
|   петля в Application.Run    |
------------------------------------
Пока верхнюю коробку не снимите вторую не сможете передвинуть. Пока не снимите первые две - не сможете передвинуть третью. А для работы TThread никаких петель не нужно.

Всего записей: 2319 | Зарегистр. 24-05-2007 | Отправлено: 19:52 03-10-2008
Antananarivu

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Frodo_Torbins
Так в том то и дело, я убрал из проги и Антифриз и EnterWorkerThread  -  а проблема осталась.
 

Всего записей: 151 | Зарегистр. 10-10-2006 | Отправлено: 20:15 03-10-2008
DmitryKz

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ребята, как можно сохранить в файл три массива разнотипных записей?

Всего записей: 3145 | Зарегистр. 29-09-2005 | Отправлено: 20:16 03-10-2008
Frodo_Torbins

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Antananarivu
А что осталось? Догадываюсь, что осталось обычное зависание из-за долгого выполнения одной из процедур.

Всего записей: 2319 | Зарегистр. 24-05-2007 | Отправлено: 20:25 03-10-2008
Antananarivu

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Frodo_Torbins
 
Ну да, я там оставил очень длинный цикл.
Я бы согласился, что это просто зависание, но! Ведь если мы уже находимся в этой процедуре этом цикле и я щелкаю на трей менюшка вылезает!

Всего записей: 151 | Зарегистр. 10-10-2006 | Отправлено: 20:28 03-10-2008
Frodo_Torbins

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Antananarivu
Вы в этом уверены? Что то в вашем коде еще не так.

Всего записей: 2319 | Зарегистр. 24-05-2007 | Отправлено: 20:35 03-10-2008
Antananarivu

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Уверен... ладно, не буду больше забивать Вам голову.. постараюсь сам разобраться.

Всего записей: 151 | Зарегистр. 10-10-2006 | Отправлено: 20:41 03-10-2008
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DmitryKz

Цитата:
Ребята, как можно сохранить в файл три массива разнотипных записей?

Тип файла роль играет, если нет, то сохраняй в xml - каждая ветка свой тип записей. Аттрибут ветки - количество элементов, тип ветки - тип массива. Если xml не подходит - то надо определиться, как будешь считывать данные. Походу нужна будет работа с нетипизированными файлами.
 
Добавлено:
Frodo_Torbins

Цитата:
А что осталось? Догадываюсь, что осталось обычное зависание из-за долгого выполнения одной из процедур.

Угу скорее всего приложение не посылает очередное сообщение, пока не отработает процедура. Надо делать нормальные потоки и туда код сувать, я так в свое время делал, когда мне при старте программы надо было просканировать пару папок на наличие в них файлов и еще кое что сделать. Пока код в поток не сунул - было подвисание программы, что не есть хорошо.

----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 03:44 04-10-2008
Alex70

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Доброго времени суток.
Надо прочитать ячейки c Excelя  и объединить их в одну строчку  

Код:
[/code]
var
i:integer;
s[]:array of string;
begin
Excel:=CreateOleObject('Excel.Application');
Excel.Workbooks.Open('C:\st.xls');
Excel.Visible:=True;
for i:=1 to 5 do  
  begin
  s[i]:=Excel.Cells[1,i];
end;
end;
[code]

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

Всего записей: 44 | Зарегистр. 23-04-2004 | Отправлено: 20:24 04-10-2008 | Исправлено: Alex70, 16:13 05-10-2008
DmitryKz

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ребята, у меня тут такая трабла со справочной системой Дельфи 7. Список контента продублировался аж трижды. После чего это случилось, не знаю - обнаружил случайно. Причем в редакторе справки (OpenHelp) все в норме. Удалял GID-файлы, нажимал в OpenHelp Clean Registry - ничего не меняется. Что-то еще можно сделать?

Всего записей: 3145 | Зарегистр. 29-09-2005 | Отправлено: 19:37 05-10-2008
ByteMaster

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Ребята, у меня тут такая трабла со справочной системой Дельфи 7. Список контента продублировался аж трижды. После чего это случилось, не знаю - обнаружил случайно. Причем в редакторе справки (OpenHelp) все в норме. Удалял GID-файлы, нажимал в OpenHelp Clean Registry - ничего не меняется. Что-то еще можно сделать?

 
стоит попробовать пункт help->customize и во вкладках посмотреть и удалить дубликаты
"Delphi Object and Component Library Reference" и "Visual Component Library Reference"

Всего записей: 4 | Зарегистр. 18-09-2008 | Отправлено: 21:28 05-10-2008
DmitryKz

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ByteMaster
Написал ведь, что в OpenHelp все в порядке, то есть именно во вкладках нет никаких дубляжей

Всего записей: 3145 | Зарегистр. 29-09-2005 | Отправлено: 21:45 05-10-2008
Maks150988



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ребята, помогите пожалуйста с функцией извлечения имени фтп хост из урл. Ну то есть имеем строку "ftp.bla.ru/files/file.zip" и извлекаем "ftp.bla.ru" из этого месива.
Нашел функцию URLExtractFileName. А есть ли для хоста что-нибудь? Понимаю конечно что нужно искать в строке первый попавшийся разделитель и копировать все до него в результат. Но изобретать велосипед не хочется, а времени мало. Может просто уже есть? Поделитесь функцией пожалуйста. =)

Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 22:54 05-10-2008
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Maks150988
FTPHost:=Copy(MyUrl,1,Pos('/',MyURL)-1);  
можно оформить это в функцию. При условии конечно, что протокол не указан в урке, если указан протокол (ftp://ftp.bla.ru) то добавляем логику
if Pos('//',MyURL)>0 then Delete(MyURL,1,Pos('//',MyURL)+1);
FTPHost:=Copy(MyUrl,1,Pos('/',MyURL)-1);  
примерно так.

----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 05:38 06-10-2008
   

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (все версии) - часть 4
ShIvADeSt (28-06-2009 02:10): Продолжение в http://forum.ru-board.com/topic.cgi?forum=33&topic=10477


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru