|
|
|
Обработка нажатия трех кнопок в параллельном потоке
|
|||
|---|---|---|---|
|
#18+
makhaonBellic, Понятно, я так и думал. Можно попробовать сделать так: 1. Считаем всё до момента необходимости выбора. 2. Включаем visible, либо, лучше, делаем enable кнопкам. 3. Ждём безо всяких циклов когда юзер нажмёт какую-то кнопку. 4. В обработчиках OnClick кнопок развешиваем остальные куски кода, в зависимости от того, что нажмут. Согласен, что батонокидательство. Но, думаю, в этом случае, допустимое. Из всего этого все понятно и так есть и будет! Уже давно пользуюсь "Enabled кнопкам"..)) ... А теперь хотелось бы увидеть Ваше решение 3 -го пункта!!! ... У меня до этого было примерно так (Это и было Вашим 3-м пунктом! - Ожидание!): Код: pascal 1. 2. Ну а после этого - анализ ответа (Rez) и соответственно свой код. Но этот модальный Диалог мне мешал: 1. Если не позицировать его - мешал анализу данных других полей на форме; 2. Если убрать куда-нибуть в угол - как то не "Айс"; 3. Модальность не позволяла при необходимости скопировать инфу из Мэмо или Эдитов; 4. ... Нужно было как то избавиться от Диалога, воспроизведя кнопки на форме и смоделировать режим "Ожидания"... Вот! P.S. Было еще одно решение, но в силу опять же "модальности", оно тоже было отброшено! Это было маленькая форма с этими тремя кнопками, без шапки и боковых границ, ... она позиционировалась в нужное место на Осн.форме и кнопки выглядели, как будто принадлежащие Осн.форме... В общем - это к делу не относится!..)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2018, 12:46 |
|
||
|
Обработка нажатия трех кнопок в параллельном потоке
|
|||
|---|---|---|---|
|
#18+
Да, я уже понял твою проблему. авторА теперь хотелось бы увидеть Ваше решение 3-го пункта!!! Решение без кода :) Просто - ждём до тех пор, пока юзер что-то нажмёт. Как только нажал - считаем дальше. Совсем не обязательно счетную процедуру делать в пределах одного метода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2018, 12:52 |
|
||
|
Обработка нажатия трех кнопок в параллельном потоке
|
|||
|---|---|---|---|
|
#18+
makhaon(это я к тому, что булево значение уже не надо сравнивать с True, вообще не надо ни с чем сравнивать, оно готово для использования в условиях - if Flag2 then) я прекрасно об этом знаю! Это - мелочи Тестового кода, не стоило в это место меня носом тыкать!..))) makhaonПлох Application.ProcessMessages + Sleep Я уже ответил по этому поводу, читайте выше! Sleep - только лишь тут в Тестовом коде, дабы замедлить счет от 0 до 5 и от 5 до 10! Application.ProcessMessages - для того, чтоб опять таки в Тестовом коде в шапке формы не видеть "Не отвечает". Вот весь анализ Код: pascal 1. 2. 3. 4. 5. Тэги в кнопках проставить только. Мне эта идея больше нравится, чем массивы!..))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2018, 13:01 |
|
||
|
Обработка нажатия трех кнопок в параллельном потоке
|
|||
|---|---|---|---|
|
#18+
makhaonДа, я уже понял твою проблему. Решение без кода :) Просто - ждём до тех пор, пока юзер что-то нажмёт. Как только нажал - считаем дальше. Совсем не обязательно счетную процедуру делать в пределах одного метода. Я не понимаю выражения "просто ждем"! В варианте с Диалоговым окном - понятно было в каком месте это ожидание! А как в Вашем варианте заставить, к примеру цикл, "просто ждать" ну скажем в своем i/2 -состоянии? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2018, 13:10 |
|
||
|
Обработка нажатия трех кнопок в параллельном потоке
|
|||
|---|---|---|---|
|
#18+
Извиняюсь, что влезаю опять. BellicЯ не понимаю выражения "просто ждем"! Ну есть 2 варианта: 1. "Ждем" - это ждем наступления события; 2. "Просто ждем" - вообще ничего не делаем. Bellicзаставить, к примеру цикл, "просто ждать" Никак. Цикл не нужен просто. Скорее всего, не смотря ни на что. Хотя то, что нужно, до сих пор тайна, но я уверен, что не нужен, и хватит одного цикла обработки сообщений (который и так есть), который и события действий пользователя обрабатывает. Просто ничего не нужно. Нужно вызвать какую-то процедуру при запуске программы и затем вызывать какие-то процедуры при нажатии на кнопки, всё. Всё, пока не будет известна задача. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2018, 13:23 |
|
||
|
Обработка нажатия трех кнопок в параллельном потоке
|
|||
|---|---|---|---|
|
#18+
Vizit0r, makhaon. Как вы tag то в OnMessage отловите ???? Я первым делом попытался это сделать, и не было ничего в структуре tagMSG Насчёт handle да, надо было NativeUInt ... Была глубокая ночь, под утром. BellicМожет для начало нужно было отловить нажатие левой кнопки мыши (WM_LBUTTONDOWN), а потом проанализировать - а не по нужной ли кнопке мацнул юзер? Или из WM_COMMAND можно сразу Хэндл кнопки узнать?! У меня так и реализована, проверка нажатие кнопки. + Проверка, на какую нажали по handle ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2018, 13:26 |
|
||
|
Обработка нажатия трех кнопок в параллельном потоке
|
|||
|---|---|---|---|
|
#18+
Циклы к слову вообще не нужны, уже есть ApplicationEvents Можно и так сделать ведь Код: pascal 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2018, 13:34 |
|
||
|
Обработка нажатия трех кнопок в параллельном потоке
|
|||
|---|---|---|---|
|
#18+
YuRock , Вы похоже так "Задачу" и не поняли в отличие от makhaon !...((( А знаете почему? - Потому, что мыслите стандартно! - По Вашему, раз есть Обработчики событий, то и целостный код нужно "поделить" между ними и заново переписать весь алгоритм!? Предприму "крайнюю" попытку, лично для Вас на тестовом коде сымитировать и описать Задачу: (только слезно прошу - не переделывать цикл под свое мышление! - Это всего лишь имитация Реального кода!) Имеется код с Диалогом Код: pascal 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. Задача: Избавиться от Диалогового окна и не нарушая алгоритма процедуры и не разваливая ее на 3-4 отдельных, "перенести" три кнопки на форму. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2018, 14:27 |
|
||
|
Обработка нажатия трех кнопок в параллельном потоке
|
|||
|---|---|---|---|
|
#18+
Bellic YuRock , Вы похоже так "Задачу" и не поняли в отличие от makhaon !...((( Можно на ты? Так проще. Bellic не разваливая ее на 3-4 отдельных Почему ты так боишься упрощения кода? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2018, 14:32 |
|
||
|
Обработка нажатия трех кнопок в параллельном потоке
|
|||
|---|---|---|---|
|
#18+
Да.. Если нужен цикл, то используй таймер. Он уже как бы почти в потоке работает. И выполняй код без тормозов. Вот его останавливай - запускай, задавай время через сколько он будет срабатывать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2018, 14:42 |
|
||
|
Обработка нажатия трех кнопок в параллельном потоке
|
|||
|---|---|---|---|
|
#18+
BellicПредприму "крайнюю" попытку, лично для Вас Спасибо, конечно. Но этот "крайний" код не работоспособен. Ведь TestCode() даже не вызывается нигде. Если она вызывается в FormCreate и будет "крутиться" постоянно, то действительно нужен отдельный поток. В этом случае надо четко определить состояния результата твоего расчета и когда будет какой-то результат - посылать об этом сообщение главному потоку и ожидать от него команды на продолжение. Но я в этом до сих пор, мягко говоря, не уверен. Я уже 2 раза просил объяснить задачу, а не показывать "тестовый код". Русским языком объяснить, что тебе заказчик (или препод или кто там) заказал сделать. Твои "тестовые коды" только уводят всё дальше и дальше от понимания задачи не только окружающих, но и тебя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2018, 14:42 |
|
||
|
Обработка нажатия трех кнопок в параллельном потоке
|
|||
|---|---|---|---|
|
#18+
НяшикДа.. Если нужен цикл, то используй таймер. Он уже как бы почти в потоке работает. И выполняй код без тормозов. Массивы ввели, теперь таймер. Еще надо COM использовать и дотнетовскую библиотеку прикрутить через прослойку-сервер приложений. Для упрощения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2018, 14:44 |
|
||
|
Обработка нажатия трех кнопок в параллельном потоке
|
|||
|---|---|---|---|
|
#18+
YuRock, Таймер то лучше использовать, чем for с sleep и ProcessMessages Это правильный вариант (Таймер) И самый простой ... Я думаю пользователь делает игру для развития умственных способностей, выполняя действий подсчёт чего - либо то, и нахождения совпадений и так далее Судя по последнему примеру ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2018, 14:48 |
|
||
|
Обработка нажатия трех кнопок в параллельном потоке
|
|||
|---|---|---|---|
|
#18+
YuRockПочему ты так боишься упрощения кода? YuRock , зачем этот вопрос? Я ведь технически грамотно вроде поставил задачу на Тестовом примере? Или ты хочешь услышать - что делается в Реальной процедуре, или даже увидеть? я ведь уже немного писал о ней! Там открыто на чтение 2 файла, идет цикл побайтового их сравнения (автоматом), и при особых ситуациях требуется Решение оператора, в 3-й файл попадают результаты, на форме - 4 текстовых эдита с промежуточными результатами и еще Окошко типа как в Hex-редакторе (Оффсеты, Нех-значения и литеральное соответствие). И ты хочешь эти открытые файлы и процедуры взять и закрыть и потом опять их дергать открывание-закрывание и передачей переменных между процедурами? Нет уж!!! Кстати - есть аналогичная и Автоматическая процедура, которая отрабатывает от начала и до конца без "тычков" оператора. Ручная процедура была просто скопирована с Автоматической и дополнена Диалоговым окном и обработкой его результатов. (Возможно можно будет в будущем оба варианта (Авто и Ручной) сделать для экономии в одной процедуре, но это сейчас не важно.) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2018, 14:53 |
|
||
|
Обработка нажатия трех кнопок в параллельном потоке
|
|||
|---|---|---|---|
|
#18+
Что мешает открыть файл в одном месте - держать на него ссылку ??? Даже если мы и закрываем файл, мы можем запомнить на какой позиции чтения было закрыто. И при открытии сделать offset .... Или ты читаешь файл целиком???? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2018, 15:09 |
|
||
|
Обработка нажатия трех кнопок в параллельном потоке
|
|||
|---|---|---|---|
|
#18+
ИЗ тс-а вытягивают инфу силой, вымогая - а он суёт свои тестовые коды, где нет подробности информации .... А он думает, что все должны понять его мысль - которую он и сам не может реализовать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2018, 15:10 |
|
||
|
Обработка нажатия трех кнопок в параллельном потоке
|
|||
|---|---|---|---|
|
#18+
YuRockСпасибо, конечно. Но этот "крайний" код не работоспособен. Ведь TestCode() даже не вызывается нигде. TestCode() вызывается единственной кнопкой на форме SButton: TButton ; Неужели это трудно увидеть или догадаться, раз есть Одна процедура, то ее нужно запустить! Тестовый код - полностью работоспособен!!! - Я же не на бумажке рисую, как Няшик с ошибками!?..))) ( Вот ссылка на полный исходник Теста ) А это - Форма: Текст файла формы "Main_Module.dfm": Код: pascal 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. YuRockЯ уже 2 раза просил объяснить задачу, а не показывать "тестовый код". Русским языком объяснить, что тебе заказчик (или препод или кто там) заказал сделать. Твои "тестовые коды" только уводят всё дальше и дальше от понимания задачи не только окружающих, но и тебя. Меня лично никто никуда не уводит, и вы тоже не убегайте!.))) Я Задачу поставил - если хотите, решите ее с моими поставленными условиями! Не можете понять или не хотите тратить время - воля Ваша! Кратко: Задача, просто избавиться в теле цикла от Диалогового окна с 3-мя кнопками, создав аналогичные кнопки на самой форме, при этом не делить цикл на части(процедуры). Куда уже проще описать без тестового кода? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2018, 15:15 |
|
||
|
Обработка нажатия трех кнопок в параллельном потоке
|
|||
|---|---|---|---|
|
#18+
НяшикЧто мешает открыть файл в одном месте - держать на него ссылку ??? Даже если мы и закрываем файл, мы можем запомнить на какой позиции чтения было закрыто. И при открытии сделать offset .... Или ты читаешь файл целиком????Запомнить можно все и не важно как читается файл(в Memory, TByte, ... или FileStream) - я уже написал, что задача "избавиться от Диалогового окна", не переделывая всю процедуру... Читай выше! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2018, 15:28 |
|
||
|
Обработка нажатия трех кнопок в параллельном потоке
|
|||
|---|---|---|---|
|
#18+
BellicЯ ведь технически грамотно вроде поставил задачу на Тестовом примере? Мне уже настолько надоело, что стало интересно . Вот это - то, что тебе нужно? Твой тестовый пример на потоке (возможно есть баги, но на глаз я не вижу): Код: pascal 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. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. (Во вложении - проект. Играйся.) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2018, 15:33 |
|
||
|
Обработка нажатия трех кнопок в параллельном потоке
|
|||
|---|---|---|---|
|
#18+
НяшикИЗ тс-а вытягивают инфу силой, вымогая - а он суёт свои тестовые коды, где нет подробности информации .... А он думает, что все должны понять его мысль - которую он и сам не может реализовать Знаешь, становится похожим на короля из Мультика "Бременские музыканты", который просто хотел на завтрак съесть кусочек масла, а придворные из этого желания сделали проблему! Я привожу Вам всем простую Задачу ( как просто кусочек Масла ), а Вы требуете какие то подробности( может быть нужна инфа по Жирности масла, дате его изготовления, сроке годности или производителе? ), которые принесут еще больший головняк и Вам и мне! Нафига спрашивается? Или Вы просто насмехаетесь надо мной? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2018, 15:36 |
|
||
|
Обработка нажатия трех кнопок в параллельном потоке
|
|||
|---|---|---|---|
|
#18+
YuRockМне уже настолько надоело, что стало интересно . Вот это - то, что тебе нужно? Твой тестовый пример на потоке (возможно есть баги, но на глаз я не вижу): Ругнулось при открытие на отсутствие "Project.res", но пересоздала его...) У меня все работает, согласно "Задаче"... Класс!!! Но лично мне еще "вкурить" это все нужно! Единственное на взгляд - очень много процедур добавилось, но это не критично, я не придираюсь! Ну и вопрос - в принципе, обязателен ли тут был Поток? Без него - какие варианты еще есть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2018, 15:51 |
|
||
|
Обработка нажатия трех кнопок в параллельном потоке
|
|||
|---|---|---|---|
|
#18+
Bellicочень много процедур добавилось Процедуры btnContinueClick, btnSkipClick, btnStopClick легко превращаются в одну с помощью Tag BellicНу и вопрос - в принципе, обязателен ли тут был Поток? Любую задачу можно решить в одном потоке. Иногда это идеальный вариант. Но ты же хранишь условие задачи в секрете, откуда я знаю. BellicБез него - какие варианты еще есть? Только такие, которые будут тормозить интерфейс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2018, 15:59 |
|
||
|
Обработка нажатия трех кнопок в параллельном потоке
|
|||
|---|---|---|---|
|
#18+
Bellic, Вот так я бы насписАл надцать лет назад и не парился: Код: pascal 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. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. А сейчас что-то как у 21080208 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2018, 16:07 |
|
||
|
Обработка нажатия трех кнопок в параллельном потоке
|
|||
|---|---|---|---|
|
#18+
Bellic, на форму кидаешь панельку с тремя (или сколько нужно кнопками), делаешь её не активной, в фомре объявляешь переменную, например FRes: integer, а вместо Rez := MessageDlg вставляешь код Код: pascal 1. 2. 3. 4. При этом в обработчиках кнопок FRes присваиваешь нужное значение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2018, 16:10 |
|
||
|
Обработка нажатия трех кнопок в параллельном потоке
|
|||
|---|---|---|---|
|
#18+
YuRockПроцедуры btnContinueClick, btnSkipClick, btnStopClick легко превращаются в одну с помощью Tag Это понятно: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2018, 16:15 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39578990&tid=2041379]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
151ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
91ms |
get tp. blocked users: |
2ms |
| others: | 217ms |
| total: | 508ms |

| 0 / 0 |
