![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
Danя |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 9.5.2007 Репутация: нет Всего: нет |
У меня есть очень большой код - несколько тысяч строк(и это только начало). Процедура Listbox1click содержит примерно 700 строк.
Вопрос: Можно ли как-то вырезать её из кода, поместить в отдельный файл и загрузить во время выполнения программы?? Это сообщение отредактировал(а) Danя - 18.5.2007, 18:58 |
|||
|
||||
drkot |
|
|||
![]() Ищущий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1042 Регистрация: 5.5.2006 Репутация: 5 Всего: 8 |
{$I includefile.pas}
-------------------- Ошибка не становится истиной по причине широкого распространения, как и Истина не становится Ошибкой из-за того, что никто её не видит. |
|||
|
||||
lukas |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 771 Регистрация: 23.2.2007 Репутация: 3 Всего: 15 |
Danя, засунуть процедуру в dll файл...
![]() -------------------- http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi. |
|||
|
||||
valentos |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 187 Регистрация: 7.12.2006 Где: Belarussia, Gomel Репутация: нет Всего: 2 |
Ну допустим у человека, написана по обьему большая прога с использованием какой либо графики(картинки, анимация), ТЫ lukas знаешь сколько такая прога оперативы жрет, да и .EXE весит немерено, тута без динамически подгружаемых DLL не обойтись!!! ![]() Это сообщение отредактировал(а) valentos - 18.5.2007, 19:35 --------------------
[code=sql]select name, telephone from Girls where age between 20 and 25 and (.)(.) >= 2 order by IQ desc [/code] |
|||
|
||||
Danя |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 9.5.2007 Репутация: нет Всего: нет |
Valentos прав у меня дофига и графики и звуков!
|
|||
|
||||
Sansa |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 173 Регистрация: 18.10.2006 Где: Королев Репутация: 3 Всего: 6 |
IMHO, графика или нет - 700 строк для процедуры очень много. Необходимо сделать декомпозицию задачи (разбить на процедуры), а там уже разносить их по юнитам
--------------------
- Здравствуйте, я Ваш патологоанатом |
|||
|
||||
Danя |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 9.5.2007 Репутация: нет Всего: нет |
lukas,
Расскажи поподробнее про Dll, как подключить Кстати а можно так сделать- сохранить unit с кодом этой процедуры. только как его потом подключить ![]() |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Danя, советую начать с прочтения учебника по Delphi, раздел про динамически компонуемые библиотеки (Dll), этот вопрос хорошо описан в литературе. Тут нет смысла его поднимать до прочтения книги.
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
Danя |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 9.5.2007 Репутация: нет Всего: нет |
Alexeis,
ссылку можешь дать? |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
drkot |
|
|||
![]() Ищущий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1042 Регистрация: 5.5.2006 Репутация: 5 Всего: 8 |
Может я чего не понимаю, но какой смысл в использовании dll? Что 700 строк в юните, что 700 строк в dll суть от этого не меняется.
-------------------- Ошибка не становится истиной по причине широкого распространения, как и Истина не становится Ошибкой из-за того, что никто её не видит. |
|||
|
||||
lukas |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 771 Регистрация: 23.2.2007 Репутация: 3 Всего: 15 |
ничего, UPX вам в руки, он вам сжимает всю графику...
![]() -------------------- http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi. |
|||
|
||||
ivan219 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1121 Регистрация: 19.11.2005 Где: Планета земля Репутация: 2 Всего: 12 |
Это зделает программу более удобной и читабельной а вот производительность упадёт так что каму как ![]() |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 4 Всего: 260 |
после обсуждения размеров кода в строках звучало : а при использовании dll с ресурсами загрузку этих самых в память можно управлять... Захотел - загрузил 5Мб звук. Не захотел - не занимаешь память... |
|||
|
||||
Sansa |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 173 Регистрация: 18.10.2006 Где: Королев Репутация: 3 Всего: 6 |
Причем здесь звук, графика... Вопрос поднимался про большое количество строк в коде. --------------------
- Здравствуйте, я Ваш патологоанатом |
|||
|
||||
drkot |
|
|||
![]() Ищущий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1042 Регистрация: 5.5.2006 Репутация: 5 Всего: 8 |
skyboy, по моему исходный код это не звук и не графика
![]() Во-вторых: если графику и звук (и прочую дрибедень) в dll-ки пихать ... Короче слов нет. -------------------- Ошибка не становится истиной по причине широкого распространения, как и Истина не становится Ошибкой из-за того, что никто её не видит. |
|||
|
||||
Danя |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 9.5.2007 Репутация: нет Всего: нет |
Вы мне можете конкретно сказать, как процедуры типа:
подгрузить из внешнего файла в определенную форму? Пример приведенный drkot не работает(может я ни так делаю) Я записываю процедуру в файл .pas и подключаю! Это сообщение отредактировал(а) Danя - 20.5.2007, 16:19 |
|||
|
||||
drkot |
|
|||
![]() Ищущий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1042 Регистрация: 5.5.2006 Репутация: 5 Всего: 8 |
покажи как делаеш.
скорее всего PS: в хелпе детально описано использование директивы include -------------------- Ошибка не становится истиной по причине широкого распространения, как и Истина не становится Ошибкой из-за того, что никто её не видит. |
|||
|
||||
Danя |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 9.5.2007 Репутация: нет Всего: нет |
drkot У меня с Английским плохие отношения
Я подозреваю, что я функцию в .pas неправильно записываю: Я просто вставляю всю функцию в этот файл Вот pas - файл: procedure Listbox1Click (...) var ... begin ... end; Это сообщение отредактировал(а) Danя - 20.5.2007, 20:29 |
|||
|
||||
drkot |
|
||||
![]() Ищущий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1042 Регистрация: 5.5.2006 Репутация: 5 Всего: 8 |
unit1.pas (твоя форма)
includefile.pas
дериктивой include можно вставлять любые куски кода без оглядки на синтаксис языка. компилятор просто заменяет {$I .....} на текст который содержится указанном файле. -------------------- Ошибка не становится истиной по причине широкого распространения, как и Истина не становится Ошибкой из-за того, что никто её не видит. |
||||
|
|||||
Danя |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 9.5.2007 Репутация: нет Всего: нет |
Ща попробуем
НАРОД, МОЖЕТ КТО-НИБУДЬ ЗНАЕТ ЕЩЕ ВАРИАНТЫ??? Это сообщение отредактировал(а) Danя - 21.5.2007, 16:31 |
|||
|
||||
Yanis |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2937 Регистрация: 9.2.2004 Где: Москва Репутация: 72 Всего: 111 |
$REGION
![]() |
|||
|
||||
Danя |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 9.5.2007 Репутация: нет Всего: нет |
Спасибо drkot
![]() ![]() ![]() Жаль + не могу поставить Добавлено через 1 минуту и 19 секунд Yanis, и чё с ним делать? Это сообщение отредактировал(а) Danя - 21.5.2007, 16:37 |
|||
|
||||
aktuba |
|
|||
![]() Смышленный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1915 Регистрация: 24.4.2006 Где: Планета Земля Репутация: 16 Всего: 38 |
Курить... Умную литературу курить и хелпы... F1 почаще нажимать... ![]() -------------------- ![]() |
|||
|
||||
Danя |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 9.5.2007 Репутация: нет Всего: нет |
||||
|
||||
Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
REGION тут не поможет.
Если бы у человека была 2005-я дельфи и выше, вопрос бы был другим. А вообще, процедура не должна превышать размера экрана. Если превышает - нужно разбить на несколько отдельных логических процедур, каждая из которых по размеру не превышает экрана. Просто нужно код разбить на отдельные логические блоки и оформить как отдельные процедуры. Чтение кода заметно улучшится ;-) В ListBoxClick должна находиться вообще одна строчка - вызов процедуры, которая выполнит действие. 700 строк кода - просто несеръёзно. Значит там тупо накопипастено кода и алгоритм действий не продуман. Нужно подумать над оптимизацией кода и его логической разбивкой. А инклюдить - приделывать костыли хромой собаке. |
|||
|
||||
Danя |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 9.5.2007 Репутация: нет Всего: нет |
Snowy, Это все я и так знаю, просто времени уже нету
![]() А то у меня глаза от компьютера уже как у него: ![]() ![]() Ну а так на будующее перечисли варианты, чтобы улучшить читабельность кода (кроме разбивки на отдельные блоки/процедуры) |
|||
|
||||
drkot |
|
|||
![]() Ищущий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1042 Регистрация: 5.5.2006 Репутация: 5 Всего: 8 |
это никргда не позно сделать Эта фраза была актуальна для экранов типа 80*25. Сейчас такие экраны встречаются..., что на них пол проекта поместится ![]() -------------------- Ошибка не становится истиной по причине широкого распространения, как и Истина не становится Ошибкой из-за того, что никто её не видит. |
|||
|
||||
Danя |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 9.5.2007 Репутация: нет Всего: нет |
drkot, Наберу 100 сообщений сразу поставлю
|
|||
|
||||
Snowy |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Логический блок должен быть виден на экране целиком, иначе скролл замучаешь - бегать туда-сюда. Но можно конечно разбить и на регионы, если дельфя не ниже 2005-й. Но лучше всё же разделить на отдельные блоки. Ну и оформление кода должно соответствовать стандартам.
То есть примерно не более 30-50 строк кода на блок. Культура оформления кода прививается со временем. Можно почитать исходняки VCL, чтобы привить себе культуру оформления. Лучше начать это делать раньше, чем позже - потому что, когда выработается свой стиль написания кода, менять его будет ооочень трудно. |
||||
|
|||||
StranikS |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 1.2.2006 Репутация: 1 Всего: 2 |
Можно попробовать убить сразу двух зайцев - использовать поток. Код обработчика события твоего листбокса загоняшь в тело потока, которое размещаешь отдельным юнитом. А в обработчике просто этот поток запускаешь. В результате и 700 строк убраны в отдельный юнит и проблем с быстродействием визуализации листбокса не будет.
|
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Ого тема превращается в 10 методов изврата над программированием
![]() ![]() -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
drkot |
|
|||
![]() Ищущий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1042 Регистрация: 5.5.2006 Репутация: 5 Всего: 8 |
Alexeis, думаю, что круче заворачивать не стоит.
И тему пора закрывать, пока она окончательно не забыли суть вопроса. PS: а все так мило начиналось ![]() -------------------- Ошибка не становится истиной по причине широкого распространения, как и Истина не становится Ошибкой из-за того, что никто её не видит. |
|||
|
||||
Danя |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 9.5.2007 Репутация: нет Всего: нет |
Ладно, впринципе я уже решил вопрос!!!
Всем пасибо Это сообщение отредактировал(а) Danя - 22.5.2007, 19:14 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |