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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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

   

OdesitVadim



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

Цитата:
одно и тоже изменение может давать разные эффекты. То есть имеем три разные пути повидения.  
Какие изменения и это где-то описано? Ткни, чтоб знал.

до 2007 делфи кнопка на парели задач и главная форма - разные вещи.
Теперь, если в dpr файле есть нужная строка - это связанные вещи, и меняя заголовок формы, автоматом меняем и надпись на кнопке панели задач (наверно все видели, что по умолчанию заголовок формы - Form1, а на панели задач - Project1).
начиная с 2005 делфи и старше, теперь dpr файл не совсем настоящий. точнее не совсем главный. Он генерируется на основании других файлов. И неудачная правка (когда делфи не поняла что же было сделано) приводит к странным результатам.
На одном с форумов человек долго мучился, почему у него не собирается проект, пока ему не обяснили, что править dpr файл надо очень аккуратно.
А вот где это описано... есть, но размазано по сотням хелпов и сорцов. Надо искать и собирать.

Цитата:
Чего ей путаться? В свойствах проекта явно задано какая из форм главная. К тому же она первой в dpr создается.  

Ага
На самом деле, главная та форма, которая была первая создана строкой Application.CreateForm. А то что видно  в свойствах проекта - результат парсинга. И "хороший хитрый" программист всегда умудриться так написать, что бы свести с ума дефли.
Цитата:
Ну... если следовать этой мысли, то тогда получается, что создание любой формы до Run не гарантированно. Все контролы создаются и работают через виндовые сообщения.

Для создания им сообщения не надо. А вот для работы - а кто мешает самостоятельно слать себе же события? Делфи так сама делает.


----------
Press any key to continue or any other key to exit
Пишите так, чтобы не было стыдно за нобелевскую премию.

Всего записей: 1568 | Зарегистр. 19-09-2003 | Отправлено: 11:55 28-07-2008
SZap



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Frodo_Torbins
lerthe61
Ок, спасибо, буду рыть в указанном направлении...

Всего записей: 145 | Зарегистр. 19-11-2003 | Отправлено: 12:58 28-07-2008
Kilich



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Возник вопрос - решить который не могу вот уже несколько дней!
Облазил просторы Инета - пользы сплошной 0.
 
Необходимо из Длл выплюнуть TDataset c набором данных.
Причем хотелось бы не просто выплюнуть а передать приложению, которое и вызовет из Длл.
Как это сделать?

Всего записей: 267 | Зарегистр. 18-09-2006 | Отправлено: 15:38 28-07-2008 | Исправлено: Kilich, 15:39 28-07-2008
OdesitVadim



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Kilich
лучше так не делать.  
Если уж сильно хочеться, то стоит посмотреть в сторону bpl.

----------
Press any key to continue or any other key to exit
Пишите так, чтобы не было стыдно за нобелевскую премию.

Всего записей: 1568 | Зарегистр. 19-09-2003 | Отправлено: 17:04 28-07-2008
Kilich



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
OdesitVadim
Почему лучше не делать?  
Где то находил, но не нашел как - Длл выплюнет в файл содержимое TDataset, а в приложении хотелось бы этот файл втянуть!
Ну же - помогите - существует подобная реализация?!

Всего записей: 267 | Зарегистр. 18-09-2006 | Отправлено: 17:35 28-07-2008
OdesitVadim



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Kilich
Ну через файл можно. никто не мешает сохранить в длл данные, а с основного приложения загрузить этот файл. А вот передавать ссылку на компонент через границу приложение-длл не стоит - проблемы будут.

----------
Press any key to continue or any other key to exit
Пишите так, чтобы не было стыдно за нобелевскую премию.

Всего записей: 1568 | Зарегистр. 19-09-2003 | Отправлено: 18:03 28-07-2008
mvictor71



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Kilich
я пробовал нечто подобное для Activex - через Variantarray  

Всего записей: 289 | Зарегистр. 15-02-2005 | Отправлено: 18:17 28-07-2008
Kilich



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
OdesitVadim
Если возможно - покажите примером как сбросить в файл TDataset?

Всего записей: 267 | Зарегистр. 18-09-2006 | Отправлено: 18:49 28-07-2008
Maks150988



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помогите разобраться с потоками. Ситуация такая: имеет процедуру/функцию, которую необходимо выполнить в отдельном потоке чтобы программа не висла. Но необходимо выполнить ее так, чтобы не в цикле что-то происходило, а единоразово все это выполнилось, но в потоке. Код урезанный и впринципе все что нужно есть. Принцип работы состоит в том что: запускается поток - в нем исполняется функция по загрузке и сохранению текстового файла на диск - чтение этого файла и дальнейший его парсинг - удаление файла после парсинга чтоб замести следы. Ненужное вырезано тут. Проблема заключаентся в том что если отсутсвует соединение с интрнетом, то функция остается висеть в потоке и якобы чего-то скачивается в текстовый файл и размер растет в арифметической прогрессии. Если без потока - все нормально. Как корректно запускать функцию в отдельном потоке единоразаово с дальнейшим завершением потока после завершения функции?
 

Код:
 
///// Функция для выполнения в потоке
 
function DownloadThread : Integer;
begin
  Result := 0;
  // Начинаем загрузку файла с маршрутами
  if GetInetFile('http://ссылка', ExtractFilePath(ParamStr(0)) + DOWNLOADFILENAME) = FALSE then
    begin
      SendMessage(hDwn, WM_CLOSE, 0, 0);
      MessageBox(hApp, PChar('Не удалось загрузить файл'), PChar('Ошибка'), MB_ICONSTOP);
    end
  else
    begin
      Sleep(150);
      // Считываем значения маршрутов из файла
      LoadRoutesServer(GetDlgItem(hDwn, IDC_PBR_INFO), GetDlgItem(hApp, IDC_LVIEW_IP));
      // Усыпляем программу чтобы е было так быстро все
      Sleep(150);
      // Закрываем наш диалог под конец
      SendMessage(hDwn, WM_CLOSE, 0, 0);
    end;
end;
 
///// Кусок кода из функции диалога WM_INITDIALOG
 
          hThread := BeginThread(nil, 0, @DownloadThread, 0, 0, ThreadID);
          if hThread <> 0 then
            CloseHandle(hThread);
 

 
Нужно ли также уничтожать поток в WM_CLOSE? А то выскакивает ошибка и программа вылетает если использовалось TerminateThread с дескриптором трэда. Или если надо, то как позакрывать всякие финтиклюшки этого трэда корректно, чтоб уж на всякий случай завершить его при закрытии диалога.

Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 00:13 29-07-2008 | Исправлено: Maks150988, 00:15 29-07-2008
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Maks150988
А если вначале попробовать проверить, есть ли соединение с инетом перед стартом потока?

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

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 02:19 29-07-2008
Jokerjar79



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Maks150988, сделай брэйкпоинт на строку Result := 0; и пройди по шагам в отсутствии интернета. Возможно, из функции не выходит и поток тут вообще не при чем (на GetInetFile, например, зацикливается).  
 
З.Ы. Есть также функция ExitThread

Всего записей: 710 | Зарегистр. 08-09-2007 | Отправлено: 05:23 29-07-2008
Ramazan



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

Цитата:
А вот передавать ссылку на компонент через границу приложение-длл не стоит - проблемы будут.

Вовсе не обязательно. Основные требования - включить компиляцию с runtime-пакетами (во избежание ошибок типа "Cannot assign TFont to TFont", "Class XXX already exists" и т.п.) и не пытаться выгрузить DLL до того, как будут освобождены созданные в библиотеке ресурсы (AV при выгрузке).
 
Вопрос немного не в тему: никому не встречалась утилита/эксперт для централизованного задания настроек группы проектов (параметры компиляции, линкера и т.д.)?

----------
Per rectum ad...

Всего записей: 359 | Зарегистр. 13-04-2002 | Отправлено: 08:03 29-07-2008
Mandor Sawall

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

Цитата:
Вопрос немного не в тему: никому не встречалась утилита/эксперт для централизованного задания настроек группы проектов (параметры компиляции, линкера и т.д.)?

Для проектов - видел только експерт "Project Option Sets", входящий в GExperts.
Для группы проектов, по моему, нет, посколько у каждый проект в группе есть собственные настройки.
Когда мне нужны разные настройки для debug и release, делаю так: проект настроен для debug, а release делаю через внешный "сборщик" - want.

Всего записей: 119 | Зарегистр. 20-03-2003 | Отправлено: 09:37 29-07-2008
Maks150988



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ShIvADeSt
Проблема в том что допустим есть какой-нибудь сетевой экран и если правил для программы нет, то пока он их создает или же не принято решение пускать программу в сеть, то в файл подолжает записываться какая-то информация на сотню мегабайт.
Jokerjar79
Поставил ExitThread и заменил функцию на процедуру ради интереса. Вот если с процедурой - все нормально проходит и проблема отпадает. =)

Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 10:10 29-07-2008
Jokerjar79



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Ах да, для CreateThread нужно скармливать процедуру типа  
 
procedure (P: Pointer);

Всего записей: 710 | Зарегистр. 08-09-2007 | Отправлено: 10:28 29-07-2008
Ramazan



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mandor Sawall
GExperts знаю. У меня 37(!) проектов в группе, а для разных режимов отладки актуальны разные настройки. Держаться нету больше сил!
 
Так что вопрос сверхактуален.

----------
Per rectum ad...

Всего записей: 359 | Зарегистр. 13-04-2002 | Отправлено: 12:06 29-07-2008
OdesitVadim



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
в принципе есть три варианта.
первый - сделать inc файл и подключить его во все файлы. долго, муторно, но потом достаточно будет поправить один файл и пересобрать весь проект.
 
Способ два.
компилятору можно передавать дефайны. А в самом коде уже применять нужные настройки
 
Ну и третий - если используем делфи 2007, то можно использовать msbuild. Это приблизительно тоже, что и make.

----------
Press any key to continue or any other key to exit
Пишите так, чтобы не было стыдно за нобелевскую премию.

Всего записей: 1568 | Зарегистр. 19-09-2003 | Отправлено: 15:03 29-07-2008
Mandor Sawall

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ramazan
Отладки автоматизированные (напр. через DUnit) или просто запуск в IDE?
 
 
Добавлено:
 
Продолжу список:
4: Използувать внешное средство сборки, напр. want.
5: Сделать разные .cfg для всех режимов и копировать их в папку проекта когда нужно. Можно сделать bat для етого, которого можно даже подключить к группе (bpg).

Всего записей: 119 | Зарегистр. 20-03-2003 | Отправлено: 15:04 29-07-2008
Ramazan



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mandor Sawall
Запуск в IDE BDS2006. TDD не используем.
 
OdesitVadim
Данные варианты рассматривались, но хотелось бы минимизировать прилагаемые усилия - поставил и запустил (ну да, ленивый я ). С учетом того, что два дня поиска в сети ничего путного не дали, похоже это единственный вариант (если не браться за написание эксперта).  
 
Может я чего пропустил?
 
Добавлено:

Цитата:
внешное средство сборки, напр. want.

Честное слово, первый раз слышу. Можно ссылку, лучше в ПМ.

Цитата:
разные .cfg

Может помочь при обработке dcc32, для интегрированной отладки - вряд ли. Кроме того, BDS2006 берет настройки из .bdsproj, а создавать и копировать их и вовсе проблемно. А еще есть Starteam, соответственно неизвестно, у какого проекта какие настройки в настоящий момент.

----------
Per rectum ad...

Всего записей: 359 | Зарегистр. 13-04-2002 | Отправлено: 15:41 29-07-2008
OdesitVadim



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Для того, что бы позволить себе быть ленивым, надо вначале напрячся или напрячь кого то другого.

Цитата:
С учетом того, что два дня поиска в сети ничего путного не дали

А может просто не знаем,что искать?

----------
Press any key to continue or any other key to exit
Пишите так, чтобы не было стыдно за нобелевскую премию.

Всего записей: 1568 | Зарегистр. 19-09-2003 | Отправлено: 15:53 29-07-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