|
|
|
Создание формы программным способом
|
|||
|---|---|---|---|
|
#18+
Задача: Необходимо сделать форму с двумя страницами на каждой, из которых присутсвует один combo box и два text-поля. Проблема: не могу программно описать (из справочной системы неясно как это сделать) или добавить объекты combobox и text, принадлежащие соотвествующим страницам. Как делал: Код: plaintext 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. Очевидно, что при выполнении ADD OBJECT cbolistitem AS combobox WITH ; он создается на форме и не принадлежит первой странице, но как описать прикрепить его к первой странице не понял. Помогите, кто может. Заранее спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2006, 11:19 |
|
||
|
Создание формы программным способом
|
|||
|---|---|---|---|
|
#18+
Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2006, 13:05 |
|
||
|
Создание формы программным способом
|
|||
|---|---|---|---|
|
#18+
спасибо, но этого недостаточно для полного понимания. я пробывал сделать так Код: plaintext 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. но мне нужна еще процедура инициализации combo box вида Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. пытался ее приспособить так Код: plaintext 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. выдает ошибку. Если можно, опубликуйте код ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2006, 13:31 |
|
||
|
Создание формы программным способом
|
|||
|---|---|---|---|
|
#18+
Сделай DEFINE CLASS MyCombo AS Combo Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2006, 13:55 |
|
||
|
Создание формы программным способом
|
|||
|---|---|---|---|
|
#18+
Понятно. Спасибо за помощь. К сожалению хорошей справки по фокс про у меня нет. А некоторые общие технологии ООП тут работают немного отлично, чем скажем в Дельфи. Но подход ясен. Только один момент. Определение класса mycombo слуедует делать внутри определения класса wizardexample или вне его? Кажестя, нужно делать вне его... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2006, 14:21 |
|
||
|
Создание формы программным способом
|
|||
|---|---|---|---|
|
#18+
Если появляются такого рода вопросы, то Fox сам может подсказать что,как и куда нужно запихать. Для этого создаёшь свой класс (например на основе Form) закидываешь на него Page, заполняешь Page combobox(ами) , text(ами), прописываешь Init(ы) и т.д. Нажимаешь на кнопку Class Browser в нём кнопку View Class Browser и видишь свой текст программы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2006, 15:32 |
|
||
|
Создание формы программным способом
|
|||
|---|---|---|---|
|
#18+
Ага!!! Вот это я сегодня полдня искал, где бы посмотреть текстовое описание созданной формы. Как например в дельфях. Ну теперь гора с плеч. Баальшой фенькс ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2006, 16:54 |
|
||
|
Создание формы программным способом
|
|||
|---|---|---|---|
|
#18+
Владимиру! Сделал как доктор прописал:-) Но сразу возникли проблемы. Создал сначала форму, посмотрел ее код, добавил необходимые строки вот код Код: plaintext 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. однако при компиляции или запуске программы сразу возникла проблема в строке Код: plaintext т.е. неизвестный объект. Как быть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2006, 17:13 |
|
||
|
Создание формы программным способом
|
|||
|---|---|---|---|
|
#18+
Ага, залезь, посмотри. Создай форму, прилепи страничный блок, запихни на него какой-нибудь лабель, сохрани, посмотри код в классброузере, посмотри хелп на DEFINE CLASS. Попробуй код скопировать и выполнить Думаю, вопросов у тебя поприбавится ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2006, 17:23 |
|
||
|
Создание формы программным способом
|
|||
|---|---|---|---|
|
#18+
m.a.vСделай DEFINE CLASS MyCombo AS Combo Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. Попытался сделать, как ты мне указал. Вероятно, что-то не совсем верно вот код Код: plaintext 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. Каковы ошибки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2006, 17:30 |
|
||
|
Создание формы программным способом
|
|||
|---|---|---|---|
|
#18+
Вот этот код работает только форма не остается на экране после завершения prg Я поставил точку останова форма висит после пропадает честно говоря почему не знаю. Кто знает прошу поделиться. Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2006, 08:35 |
|
||
|
Создание формы программным способом
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2006, 08:57 |
|
||
|
Создание формы программным способом
|
|||
|---|---|---|---|
|
#18+
prg вызывается из формы т.е. команда read events уже была. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2006, 09:08 |
|
||
|
Создание формы программным способом
|
|||
|---|---|---|---|
|
#18+
Если вас всех так тянет работать с форами As Top-Level, то ознакомтесь с особенностями их применения в FoxPro. Хотя бы HELP читайте по тем командам, которые используете! По умолчанию, FoxPro рассчитан на работу In SCREEN. Т.е. внутри основного окна FoxPro. Для As Top-Level форм будете всегда налетать на грабли. Не то, чтобы их нельзя было обойти, но для FoxPro - это "не стандартный" путь. В данном случае: форма As Top-Level - не может быть модальной. Просто не может. Следовательно, команда loform.Show(1) отобразит форму, но останова не произойдет, поскольку форма НЕ модальная. Код благополучно выполниться до конца, а поскольку переменная loform объявлена как LOCAL, то эта переменная и связанный с ней объект будут уничтожены по завершению процедуры. Я бы рекомендовал сначала поработать с обычными формами. ShowWindow = 0. А вот когда научитесь, тогда и переходите к As To-Level. Тут разные организационнные решения. Разная идеология построения приложений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2006, 10:46 |
|
||
|
Создание формы программным способом
|
|||
|---|---|---|---|
|
#18+
ВладимирМ благодарю за ответ действительно поменял local на public все отлично работает. Видно не уследил в чужем коде. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2006, 12:08 |
|
||
|
Создание формы программным способом
|
|||
|---|---|---|---|
|
#18+
m.a.vВладимирМ благодарю за ответ действительно поменял local на public все отлично работает. Видно не уследил в чужем коде. Я присоединяюсь к благодарности. Действительно проблема в типе переменной. m. a. v. - это моя вина, я просто использовал примеры фокса из справки. В одном случае заметь в примере используется public, в другом local. Но поскольку у меня ни один код не прошел, то данная промашка и не была замечана. Однако пример, который ты-таки добил:-) страдает массой недочетов. Взять хотябы туже процедуру INIT для класса MyCombo. Я полагаю иметь два разных комбо на каждой из страниц и с разными значениями. Класс же следует описывать как-то более обще, без доп данных, а процедуру описывать там где в ней есть особая потребность. Я поступил так как мне рекомендовал Владимир и скопировал код формы , сделанной вручную, как текст программы. Однако - результат плачевный - смотри письмо днем раньше. Насчет модальных режимов формы и использования ее как Top level, а что тут сложного? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2006, 17:00 |
|
||
|
Создание формы программным способом
|
|||
|---|---|---|---|
|
#18+
Вот код, который работает на ура. Код: plaintext 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. Если сравнивать с предыдущими примерами, мы видим, что разница в том, что все новый объекты класса мы добавлем прямо на форму. В случае же использования страниц pageframe, мы имеем дело с одним объектом pageframe, у которого есть множество страниц и вот тут ничинается билеберда, которая простым способ не решается к сожалению. Несмотря на то, что дисскусия была довольно острой, особого конструктивизма практически нет, разве только m.a.v. добрая душа. Понятно, что сделанные вручную формы - нормальные формы, но хотелось бы грамотно формировать формы программным способом -любой сложности и по возможности простым способом. Пока все примеры фокса, которые я изучил внимательно, описыват процесс создание формы и ее контролов, только на этой самой форме. В нашем исходном случае, вероятно, надо идти таким образом. Создавать собственный класс mypageframe и уже от него плясать по видимому... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2006, 18:23 |
|
||
|
Создание формы программным способом
|
|||
|---|---|---|---|
|
#18+
criptonПонятно, что сделанные вручную формы - нормальные формы, но хотелось бы грамотно формировать формы программным способом -любой сложности и по возможности простым способом. Вы уж выберите что-то одно: либо "любой сложности", либо "простым способом". Сложную форму простым способом сделать в принципе невозможно. Не важно каким инструментом и в каком языке программирования. При программном создании классов - контейнеров (не только форм, а вообще любых контейнеров) в FoxPro есть ограничение на количество уровней вложенности. В пределах одной конструкции DEFINE CLASS не может быть больше одного уровня вложенности объектов по ADD OBJECT. То, что показывает Class Browser (он может показать больше одного уровня вложенности у класса созданного в дизайнере) не всегда можно реально запустить из программы. Будут именно описанные ошибки на этапе компиляции. На практике, это означает, что необходимо делать иерархию классов. Т.е. описывать отдельными конструкциями DEFINE CLASS собственно PageFrame, а потом другим DEFINE CLASS добавлять уже готовый класс в класс формы. Для таких объектов как PageFrame и Grid все осложняется тем, что у них добавление объектов Page и Column осуществляется не командами ADD OBJECT, а простым указанием количества этих объектов. До некоторой степени проблему можно решить используя свойства MemberClass и MemberClassLibrary. Но здесь проблема в том, что через эти свойства можно указать только один класс общий для всех добавляемых членов. Вот работающий код. Дальше можешь украсить по вкусу Код: plaintext 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. Чтобы не писать кучу команд AddObject для каждой Page можно сделать для каждой страницы описание объекта-контейнера. И через AddObject() добавлять нужный контейнер со всеми объектами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2006, 23:49 |
|
||
|
Создание формы программным способом
|
|||
|---|---|---|---|
|
#18+
ВладимирМ criptonПонятно, что сделанные вручную формы - нормальные формы, но хотелось бы грамотно формировать формы программным способом -любой сложности и по возможности простым способом. Вы уж выберите что-то одно: либо "любой сложности", либо "простым способом". Сложную форму простым способом сделать в принципе невозможно. Не важно каким инструментом и в каком языке программирования. . Согласен формулировка подкачала :-) Сам других ругаю за такие формулировки, а вот сделал перл... Имелось ввиду, конечно, не любой сложности, а проектирование форм содержащие другие контейнеры такие как grid и frame. Спасибо за код программы, становится более понятно как действовать. Каюсь фокс знаю очень плохо (в смысле концепции). Ничто не мешает, конечно, изучить сначала, но как всегда надеешься на аналогию с другими система и попадаешь впросак. ВладимирМ Чтобы не писать кучу команд AddObject для каждой Page можно сделать для каждой страницы описание объекта-контейнера. И через AddObject() добавлять нужный контейнер со всеми объектами. А нельзя примерчик опубликовать, неочень доходит как это делать. заранее спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2006, 13:22 |
|
||
|
Создание формы программным способом
|
|||
|---|---|---|---|
|
#18+
cripton ВладимирМ Чтобы не писать кучу команд AddObject для каждой Page можно сделать для каждой страницы описание объекта-контейнера. И через AddObject() добавлять нужный контейнер со всеми объектами. А нельзя примерчик опубликовать, неочень доходит как это делать. заранее спасибо Я имел в виду сделать DEFINE CLASS на основе базового класса CONTAINER. Накидать в этот контейнер нужные объекты через ADD OBJECT, а в событии INIT для PageFrame делать AddObject() нужного класса CONATINER. Т.е. получается внутри страницы вставлен только один объект-контейнер (CONTAINER), а уже в нем все остальные объекты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2006, 14:21 |
|
||
|
Создание формы программным способом
|
|||
|---|---|---|---|
|
#18+
ВладимирМ cripton ВладимирМ Чтобы не писать кучу команд AddObject для каждой Page можно сделать для каждой страницы описание объекта-контейнера. И через AddObject() добавлять нужный контейнер со всеми объектами. А нельзя примерчик опубликовать, неочень доходит как это делать. заранее спасибо Я имел в виду сделать DEFINE CLASS на основе базового класса CONTAINER. Накидать в этот контейнер нужные объекты через ADD OBJECT, а в событии INIT для PageFrame делать AddObject() нужного класса CONATINER. Т.е. получается внутри страницы вставлен только один объект-контейнер (CONTAINER), а уже в нем все остальные объекты. Да понял. Делаем скажем два класса на базе CONTAINER включаем в него объект COMBOBOX и 2 TEXTBOX. Определяем процедуру INIT и CLICK для COMBOBOX в рамках данного контейнера. Далее уже формируем основную форму с объектом на базе PAGEFRAME, для которого в процедуре INIT создаем объект, ранее определенный как контейнер. Кажется все ясно и разумно. Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2006, 15:51 |
|
||
|
Создание формы программным способом
|
|||
|---|---|---|---|
|
#18+
Попробывал сделать задачу с контейнером. Однако не пошло. При компиляции кода выдает ошибку при определении класса mypage на первой строке добавления объекта - типа неизвестная команда код здесь: Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2006, 16:17 |
|
||
|
Создание формы программным способом
|
|||
|---|---|---|---|
|
#18+
В этом коде сразу несколько ошибок. 1) Перечитайте свой собственный пост в начале всей это ветки. Посмотрите синтаксис команды ADD OBJECT. Там он совершенно корректный. А в приведенном примере вы забыли точки с запятой и просто запятые. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 2) Когда объект создается через метод object.AddObject(), то, по умолчанию, он создается с настройкой Visible = .F. вне зависимости от того, что было прописано в классе. Т.е. делать новый объект видимым надо в любом случае Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 3) Это уже не столь принципиально. Надо задать размеры объекта контейнера иначе по умолчанию он примет некоторые стандартные размеры. Если не ошибаюсь, что-то около 100х100 Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2006, 19:20 |
|
||
|
Создание формы программным способом
|
|||
|---|---|---|---|
|
#18+
Спасибо за помощь. Не догадывался, что точка с запятой в данном случае строга обязательна... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2006, 15:43 |
|
||
|
Создание формы программным способом
|
|||
|---|---|---|---|
|
#18+
Возникла проблема создания исполняемого файла и отчуждения готового приложения. Раньше я всегда в своих примерах делал примерно так Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. когда я попытался сделать то же самое для кода, который обсуждался выше, возникли проблемы. Во-первых, после закрытия формы приложение на завершается полностью. Во-вторых, не вызывается messagebox. Я почитал статью про то как делать главный файл программы, попытался повторить опыт, но что-то не так. Приложение не закрывается, попытка его закрыть вызывает сообщение в моей процедуре, которое работает циклически..... В чем может быть проблема объяните не путевому. Пока сделано так.... Код: plaintext 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. 173. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2006, 16:43 |
|
||
|
|

start [/forum/topic.php?fid=41&fpage=262&tid=1591874]: |
0ms |
get settings: |
7ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
48ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
| others: | 206ms |
| total: | 346ms |

| 0 / 0 |
