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

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

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

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125

Открыть новую тему     Написать ответ в эту тему

ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Продолжение темы Вопросы по Delphi (до версии 2009) - часть 5

Познаем сами, помогаем другим...
Обсуждаем вопросы, не связанные с юникоидными версиями Delphi - для этого есть соответствующая тема (см. ссылки ниже).


 
Правила топика:
    Прежде чем спрашивать:
  1. Желательно изучить вопрос, попытаться найти ответ в прилагаемых мануалах, хелпах и анализируя исходники.
  2. Выполнить поиск по топику (открыть "Версия для печати" и поискать ответ там).
  3. Применить фильтр по разделу "Прикладное программирование". Ответы на многие старые вопросы могли быть даны в отдельных темах.
  4. Продумайте вопрос. На поверхностные вопросы вы получите поверхностные ответы, или вообще ответов не получите.
  5. Желательно указывать версии используемого компилятора и операционной системы.
    Прежде чем отвечать:
  1. Если не можете помочь, не мешайте.
  2. Если уж вы отвечаете на вопрос, давайте ответ по сути.
  3. Если вы не уверены, так и говорите! Ошибочный, но авторитетно звучащий ответ хуже, чем отсутствие ответа.
  4. Задавайте дополнительные вопросы, чтобы получить больше информации.
  • Отсутствие ответа не равносильно игнорированию - иногда участники форума просто не знают ответ. Повторная посылка вопроса не приветствуется. Посты типа "неужели никто не знает ответа..." или "может мне все-таки кто-нибудь ответит" недопустимы.  
  • Все большие куски кода (более 5 строк) оформляем в тег [morе] дабы уменьшить размер поста. FAQ по тегу [morе].


    Некоторые "родственные" топики:
     
  • Вопросы по Delphi (версии 2009-2010 Weaver)
  • Вопросы по компонентам для Delphi, C++ Builder
  • Использование DevExpress
  • Вопросы по Ehlib
  • Компоненты и утилиты для Delphi/BCB/FreePascal/Lazarus - только Open Source
  • Коммерческие компоненты и утилиты для Delphi/BCB
  • кабак программистов :)
     
    См. также: Некоторые полезные ресурсы о Delphi
     
    И старайтесь, чтобы ваш код не попал сюда :)

  • Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 05:13 19-05-2010 | Исправлено: akaGM, 02:33 15-07-2020
    akaGM

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

    Цитата:
    Да, действительно компилируется. Но это похоже на баг компилятора.
    ... который существует со времён Турбо Паскаля, т.е. уже больше 20 лет...
    не смеши меня...
     

    Цитата:
    и удаляя имя программы
    ничего я не удаляю, его (имени программы) просто нет, авторы не писали его в своё время. это сейчас визуальные (или мышиные) программисты сидят на ИДЕ кодогенераторах...

    Всего записей: 24114 | Зарегистр. 06-12-2002 | Отправлено: 09:15 28-06-2019
    zedxxx

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    И как же тот Турбо Паскаль определял, какой X брать?

    Всего записей: 1505 | Зарегистр. 14-07-2008 | Отправлено: 10:27 28-06-2019
    akaGM

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

    Всего записей: 24114 | Зарегистр. 06-12-2002 | Отправлено: 11:28 28-06-2019
    Frodo_Torbins

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

    Цитата:
    При наведении курсора на такую переменную IDE выводит подсказку: "var PROGRAM.X: Integer", но обратиться в коде к ней так не выйдет, т.к. program - зарезервированное слово.  

    Справку надо читать: http://docwiki.embarcadero.com/RADStudio/Rio/en/Fundamental_Syntactic_Elements_(Delphi)

    Код:
    var
      x: Integer;
    begin
      x := 42;
      WriteLn(&program.x);
    end.

    Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 12:08 28-06-2019 | Исправлено: Frodo_Torbins, 12:09 28-06-2019
    zedxxx

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

    Всего записей: 1505 | Зарегистр. 14-07-2008 | Отправлено: 12:23 28-06-2019
    akaGM

    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Frodo_Torbins
     
    наш человек, настоящий хоббит! :)
     
    лично я бы сделал && по аналогии с сями...
     
    спасибо
     
    Добавлено:
     
    кстати, я не хотел обидеть ТР
    Цитата:
    со времён Турбо Паскаля, т.е. уже больше 20 лет...

    т.к. ему афаир давно уже 30+ лет :)

    Всего записей: 24114 | Зарегистр. 06-12-2002 | Отправлено: 14:07 28-06-2019
    Kilyan



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Добрый день Уважаемые!
    Помогите, если это возможно!
    Как отсортировать список в Delphi :
    Подробнее...
     
    чтобы получить такое представление:
    Подробнее...
    Нужна собственно функция для CustomSort

    Всего записей: 886 | Зарегистр. 04-09-2008 | Отправлено: 15:18 22-08-2019 | Исправлено: Kilyan, 15:22 22-08-2019
    zedxxx

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Kilyan
    Сортировка списка по аналогу «Проводника Windows»

    Всего записей: 1505 | Зарегистр. 14-07-2008 | Отправлено: 16:36 22-08-2019
    Amonit

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Delphi\TThread
    Друзья, подскажите, кто сталкивался с такой проблемой: под Windows XP параллельно успешно и быстро работают несколько потоков, например, внутри потока BitMap.Canvas.StretchDraw(...
     
    А вот под Windows 7 быстро работает только поток, если он один, как только появляются еще параллельные потоки, работа потоков замедляется в десятки раз и получается, что эффективнее использовать один поток, а не несколько.
     
    Это при том, что программа одна и та же, но ведет себя под этими ОСями по-разному. Сама программа очень стабильна и отлажена, в каждом потоке свой объект TBitmap, обращений к VCL нет. В чем же проблема?
     
    Помогите, плиз. У самого опыта много, но тут даже я пас. Благодарю.

    Всего записей: 8 | Зарегистр. 24-04-2007 | Отправлено: 18:59 11-12-2019
    zedxxx

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    А вы Lock/Unlock для Canvas используете? Несмотря на то, что напрямую к VCL вы не обращаетесь, это всё же VCL-ный компонент и работать с ним надо аккуратно:

    Цитата:
    In VCL, the TBitmap.Canvas must be locked while using the TBitmap in a worker thread.  The RTL keeps track of all GDI resources it allocates, and the main UI thread runs a routine periodically that frees GDI resources that are not locked.  Which is very bad for TBitmap used in a worker thread.  The alternative is to not use TBitmap at all, just use the Win32 API directly for all GDI operations in a worker thread.  

    https://en.delphipraxis.net/topic/1292-why-is-this-code-not-thread-safe-delphi-7/?tab=comments#comment-10789

    Всего записей: 1505 | Зарегистр. 14-07-2008 | Отправлено: 23:54 11-12-2019
    Amonit

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Увы, Lock/UnLock не помогает.
    Вообще странно, под XP работает в 2-3 быстрее хоть один поток хоть несколько. В чем может быть природа тормозов под Win7 64 bit?

    Всего записей: 8 | Зарегистр. 24-04-2007 | Отправлено: 11:43 15-12-2019
    Frodo_Torbins

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Amonit
    Под XP у GDI было небольшое аппаратное ускорение для типичных операций. Начиная с Висты эту фичу вырезали, и в семерке добавили Direct2D. В делфи есть канва на основе этой штуки, но со стандартной канвой она не совместима.

    Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 20:06 16-12-2019
    Amonit

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Благодарю за ответы.

    Всего записей: 8 | Зарегистр. 24-04-2007 | Отправлено: 16:57 20-12-2019
    sldaac



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Доброго дня.  
    Подскажите пожалуйста, как получить возвращаемое значение при закрытие приложения.
    Есть два приложения на Delphi Одно запускается,  второе запускается при нажатие на кнопку (не форма из проекта, а отельный экзешник).  Как получить в первом приложение значение которое возвращает второе при его закрытие?

    Всего записей: 721 | Зарегистр. 15-06-2005 | Отправлено: 10:06 20-01-2020
    Frodo_Torbins

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

    Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 20:06 21-01-2020
    RUBOP



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

    Цитата:
    Подскажите пожалуйста, как получить возвращаемое значение при закрытие приложения.
    Есть два приложения на Delphi Одно запускается,  второе запускается при нажатие на кнопку (не форма из проекта, а отельный экзешник).  Как получить в первом приложение значение которое возвращает второе при его закрытие?  

    Накидал простенький пример, думаю разберетесь.
    https://www.sendspace.com/file/znequa

    Всего записей: 91 | Зарегистр. 13-02-2008 | Отправлено: 11:20 22-01-2020
    sldaac



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

    Цитата:
    Накидал простенький пример, думаю разберетесь.  

    Спасибо.

    Всего записей: 721 | Зарегистр. 15-06-2005 | Отправлено: 18:08 22-01-2020
    Amonit

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

    Цитата:
    Delphi\TThread
    Друзья, подскажите, кто сталкивался с такой проблемой: под Windows XP параллельно успешно и быстро работают несколько потоков, например, внутри потока BitMap.Canvas.StretchDraw(...
     
    А вот под Windows 7 быстро работает только поток, если он один, как только появляются еще параллельные потоки, работа потоков замедляется в десятки раз и получается, что эффективнее использовать один поток, а не несколько.
     
    Это при том, что программа одна и та же, но ведет себя под этими ОСями по-разному. Сама программа очень стабильна и отлажена, в каждом потоке свой объект TBitmap, обращений к VCL нет. В чем же проблема?  

     
    Сам допер. В моем алгоритме при обработке очередной строки изображения считывался адрес источника строки изображения так:
     
    srcPb := SrcMap.ScanLine[ y ]; // где var srcPb : PByteArray;
     
    Естественно, что адрес получателя получал аналогичным образом. И так каждую строку картинки.  
     
    Теперь же сделал получение адреса всего буфера изображения прямо перед циклом обработки изображения так:
     
    var srcPb_base, dstPb_base, srcPb, dstPb : PByteArray;
     
     srcPb_base := SrcMap.ScanLine[ SrcMap.Height-1 ];
     dstPb_base := DstMap.ScanLine[ DstMap.Height-1 ];
     
    с указанием получить адрес последней строки изображения, поскольку в Bitmap изображение хранится вверх ногами.
    и уже в цикле так:
     
     ...
     dstPb := @dstPb_base[ y * dstPb_line ];
     repeat
      //srcPb := SrcMap.ScanLine[ y ];
      srcPb := @srcPb_base[ y * srcPb_line ];
     ...
     
    Это уже под самой WinXP дало двухкратное ускорение, и исчезли задержки под Win7 в потоках абсолютно.

    Всего записей: 8 | Зарегистр. 24-04-2007 | Отправлено: 19:42 02-02-2020
    ALeXkRU



    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    сегодня в лентах #Delphi25th:  
     

     
         
     
    Delphi - 25 лет  

    Всего записей: 11794 | Зарегистр. 03-12-2003 | Отправлено: 12:59 15-02-2020 | Исправлено: ALeXkRU, 15:04 15-02-2020
    akaGM

    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    1983 г -- это год выхода первого ТурбоПаскаля/Си
    версию не помню, по-моему ТР 3.0 (почему-то?) + Turtle graphics и ТС 1.0

    Всего записей: 24114 | Зарегистр. 06-12-2002 | Отправлено: 14:25 15-02-2020
    Открыть новую тему     Написать ответ в эту тему

    Страницы: 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 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125

    Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (до версии 2009) - часть 6


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru