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

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

   

Yozj



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

Цитата:
Ребята, посоветуйте софтину для подсчета строк написанного кода. В смысле, во всех pas-файлах проекта.  

Сам напиши, алгоритм простой:
- обходишь всю директорию рекурсивно
- если файл PAS, то передаешь его в процедуру обработки
- cчитал файл в StringList
- просуммировал количество строк
 
Как только реализуешь - захочется больше, к примеру не учитывать пустые строки или комментарии, всё это будет несложно добавить.

Всего записей: 125 | Зарегистр. 01-12-2004 | Отправлено: 12:30 07-12-2008
VAbramyak

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте! Нужна помощь!
Есть библиотека DLL написана на C++. В ней есть експортируемая функция
_RunSQLConsole(Con : TADOConnection; Str : pchar) : pchar; stdcall.
При вызове этой функции, откривается форма с редактором запроса, текст запроса передается через параметр str, и после закрития формы тест передается вызываемому приложению. Нужно эту функуию вызвать из приложения написанного на delphi 2009.
функцию прикрутил в своем приложении вот так:
 
function _RunSQLConsole(Con : TADOConnection; Str : pchar) : pchar; Stdcall; External 'SQLTOOLS.dll';
 
 
Текст, передаваемый функции имеет тип string и на выходе надо тоже получить string.Вызов:
 
procedure TForm1.Button6Click(Sender: TObject);
var return, input : pchar;
begin
  input := Pchar(SynEdit1.Text);
  return := _RunSQLConsole(DM.ADOConnection1,input);
  SynEdit1.Text := string(return);
end;
 
 
Правильно не работает, при вызове в открывшемся редакторе отображается непонятно что, а при закрытии вываливается ошибка обращения к памяти.
Подскажите как правильно реализовать это дело. Спасибо.

Всего записей: 191 | Зарегистр. 16-09-2005 | Отправлено: 20:40 07-12-2008
Url



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
у меня вопрос - почему в turbo delphi (Borland® Delphi® for Microsoft® Windows)
при использовании "randomize", счетный цикл "for .. to .. do"  считает в обратном порядке?

Всего записей: 166 | Зарегистр. 06-12-2006 | Отправлено: 22:18 07-12-2008 | Исправлено: Url, 22:19 07-12-2008
V1s1ter



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Url
Попробывал, вот код:
 
procedure TForm1.FormCreate(Sender: TObject);
var
  I: Integer;
begin
  randomize;
  for I := 0 to 10 do begin
    Caption := Caption+' '+IntToStr(i);
  end;
end;
 
Вот результат 'Form1 0 1 2 3 4 5 6 7 8 9 10'
как видно утверждение  

Цитата:
счетный цикл "for .. to .. do"  считает в обратном порядке

не подтвердилось...

Всего записей: 948 | Зарегистр. 06-02-2007 | Отправлено: 23:21 07-12-2008
Frodo_Torbins

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

Цитата:
Con : TADOConnection
В таких случаях самый верный способ - использование рантайм пакетов. Но поскольку библиотека написана на билдере, получается очень нехорошая ситуация. Единственный выход - использовать менеджер памяти, который умеет работать с библиотеками. Идеальный вариант FastMM4. Но такой менеджер должен использоваться как в приложении, так и в библиотеке, причем одной версии.

Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 00:00 08-12-2008
delover

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Maks150988
Сорри за офтоп, тема была старая, вопрос в этой ветке про выполнение батников после билда в Delphi5, D6, D7, D2005, D2006. Выкладывал линку, может там её что-то надо?

Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 07:42 08-12-2008
RomanTim

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Url
V1s1ter
Если включена оптимизация и в цикле не используется переменная, по которой он организуется, то компилятор делает обратный цикл

Всего записей: 375 | Зарегистр. 11-09-2003 | Отправлено: 07:53 08-12-2008
Yozj



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
RomanTim
Если переменная не используется, то и значение её нас волновать не должно, т.к. порядок выполнения прямой или обратный при этом не важен.

Всего записей: 125 | Зарегистр. 01-12-2004 | Отправлено: 09:16 08-12-2008
RomanTim

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

Всего записей: 375 | Зарегистр. 11-09-2003 | Отправлено: 10:12 08-12-2008
anfilat

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

Цитата:
Нужно эту функуию вызвать из приложения написанного на delphi 2009.  

А ты учитываешь, что D2009 по умолчанию используется юникод? Что бы твой код рабтал надо в нем везде заменить pchar на pansichar, а string на ansistring

Всего записей: 845 | Зарегистр. 12-08-2005 | Отправлено: 10:24 08-12-2008
Yozj



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

Всего записей: 125 | Зарегистр. 01-12-2004 | Отправлено: 10:33 08-12-2008
fcdobpiy



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
RomanTim
даже если переменная используется, то цикл бывает и обратным.  
неоднократно убеждался в процессе отладки. не мог понять почему. но т.к. все работало - плюнул

Всего записей: 410 | Зарегистр. 22-08-2005 | Отправлено: 11:55 08-12-2008
Yozj



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
fcdobpiy
Проверил, действительно в обратную сторону. Но оно понятно почему Delphi так оптимизирует, т.к. индекс не используется.  
Если счетчик используется, то индексу присваивается значение первого элемента, а далее используется команда CMP для сравнения с последним значением индекса.
Если счетчик не используется, то индексу присваивается значение количества циклов, а далее используется команда DEC, для уменьшения индекса до нуля.
CMP - 3 байта, 15 тактов
DEC - 1 байт, 3 такта
оптимизация на лицо
Это всё действует, если границы заданы константами, иначе с вариациями.

Всего записей: 125 | Зарегистр. 01-12-2004 | Отправлено: 12:36 08-12-2008
Url



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
fcdobpiy
вот и я про то
 
Добавлено:
Yozj а как отключить оптимизацию? и что плохого можно ждать при ее отключении?

Всего записей: 166 | Зарегистр. 06-12-2006 | Отправлено: 12:37 08-12-2008 | Исправлено: Url, 12:41 08-12-2008
Yozj



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Url
Project -> Options (Shift+Ctrl+F11) -> закладка Compile, галочка Otimization
Сравнив сгенерированный код с оптимизацией и без нее - так и хочется ее включить, т.к. количество используемых командами байт и тактов сильно превышает оптимизированный вариант. Но, мне кажется, это по большому счету мало влияет на скорость исполнения программы, так что если есть глюки из-за оптимизации - лучше ее отключить.

Всего записей: 125 | Зарегистр. 01-12-2004 | Отправлено: 12:53 08-12-2008
Artem59

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вопрос следующего порядка.
Немного отошел от Делфи. Работал последний раз 4 года назад. Сейчас больше 1С. Надо сделать один проект на Делфи. Программа должна формировать очень сложные выходные формы (полиса по страхованию) в виде таблиц. Раньше я пользовался QuickReport (в 6-ой версии Delphy). Но он был не приспособлен для сложных форм. Сейчас какие веяния в этом вопросе? Есть что-то стандартное с хорошими возможностями? Покупать что-то внешнее для одного раза не хочется.

Всего записей: 92 | Зарегистр. 19-09-2005 | Отправлено: 13:55 08-12-2008
delover

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Maks150988
Да забыл, там работает автоматическая дата сохранения, т.е. в хидер падает прямо в редактор дата сохранённого файла, на счёт D2009 не знаю, похоже что и там должно работать, так как вроде всё компилится ОК.

Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 15:09 08-12-2008
VAbramyak

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
anfilat
Все заработало после замены pchar на pansichar. Cпасибо за совет.

Всего записей: 191 | Зарегистр. 16-09-2005 | Отправлено: 15:30 08-12-2008
Maks150988



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
delover
Я немного подзабыл уже. Киньте ссылку. Я работаю в Делфи 7.
 
Так, а у меня вопросик. Вот решил ради интереса сделать проект, чтобы сразу использовать только нужные функции и размер был максимально минимально-возможным. http://webdrive.avtograd.ru/Download/Explorer/sources/Project1.zip Правда программа не запускается. Что-то фиг знает что надо, вроде все правильно, с мессаджбоксом же работает способ, а диалогбокс не прокатывает...
 
И еще аналог блиттингбаттон на чистом апи. Посмотрел в сторону прорисовки кнопок через отрисовку элементов системных тем. Пришлось выкинуть много мусора из кода и оставить используемые функции и переменные. http://webdrive.avtograd.ru/Download/Explorer/sources/button_theme_src.zip Есть вопрос по поводу критических секций - нужно ли в финализации делать их удаление? И достаточно ли в момем случае LeaveCriticalSection?

Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 21:03 08-12-2008
delover

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Maks150988
У меня D2006 (на этом компе Turbo Delphi, т.е. без компилятора командной строки) и она не компилит  

Код:
[Pascal Fatal Error] Project1.dpr(1): F2063 Could not compile used unit 'SysInit.pas'

Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 07:54 09-12-2008 | Исправлено: delover, 07:57 09-12-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