|
Создание объекта shape программно
|
|||
---|---|---|---|
#18+
Гуглю уже минут 20. Нифига толкового нет на тему как программно создать фигуру shape. Если не сложно, подскажите как это сделать. Спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2015, 17:43 |
|
Создание объекта shape программно
|
|||
---|---|---|---|
#18+
начать запись макроса вставить shape мышкой закончить запись макроса посмотреть записанный макрос понять записанный макрос ... профит ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2015, 17:49 |
|
Создание объекта shape программно
|
|||
---|---|---|---|
#18+
Antonariy, Браво за аватарку! ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2015, 17:51 |
|
Создание объекта shape программно
|
|||
---|---|---|---|
#18+
Какой еще макрос? Я написал в ветке Visual Basiс. Хотел создать на VB6. Но тем не менее воспользовался идеей. Antonariyначать запись макроса вставить shape мышкой закончить запись макроса посмотреть записанный макрос понять записанный макрос В excel проделал это, ибо думаю код будет похож. Но этот макрос после записи пуст! ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2015, 17:57 |
|
Создание объекта shape программно
|
|||
---|---|---|---|
#18+
vdekameronКакой еще макрос? Я написал в ветке Visual Basiс. Хотел создать на VB6. тьфу, я-то уже и забыл, что эта ерунда есть в VB6, думал по офису вопрос. Код: vbnet 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2015, 18:17 |
|
Создание объекта shape программно
|
|||
---|---|---|---|
#18+
Antonariyтьфу, я-то уже и забыл, что эта ерунда есть в VB6ты, походу, еще забыл, чему равно True в VB ))) ЗЫ: Я тоже про офис подумал сначала ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2015, 18:39 |
|
Создание объекта shape программно
|
|||
---|---|---|---|
#18+
Shocker.Proчему равно True в VBНу, главное помнить, чему не равно :-) 0 - False. А все остальное уже True. Поэтому можно и 3 поставить, VB воспримет как True. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2015, 19:24 |
|
Создание объекта shape программно
|
|||
---|---|---|---|
#18+
The_Prist, да я-то в курсе, троллю по-тихому ) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2015, 19:30 |
|
Создание объекта shape программно
|
|||
---|---|---|---|
#18+
Shocker.ProAntonariyтьфу, я-то уже и забыл, что эта ерунда есть в VB6ты, походу, еще забыл, чему равно True в VB )))да пофиг, +/- важен лишь в математике, и на самом деле я не брезгую заменять условия формулами, они быстрее работают, так что значение true мне прекрасно известно :). просто из-за неопределенности типа sh интеллисенс не подсказал варианты для visible, а 1 пейсать короче, чем true. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2015, 22:34 |
|
Создание объекта shape программно
|
|||
---|---|---|---|
#18+
Antonariy,Shocker.Pro,The_Prist, Да тут целые баталии развернулись) Спасибо! А насчет свойства Visible пока вчера гуглил прочитал. Что по умолчанию создается shape.visible=false , поэтому понятно почему =1 или true ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2015, 08:13 |
|
Создание объекта shape программно
|
|||
---|---|---|---|
#18+
Выполняется отскакивание shape1 от краев формы. Как только шар касается правого края, создается новый шар. Подскажите пожалуйста как организовать движение каждого нового появляющегося shape. В учебнике этого нет, но мне уже самому интересно. Если не сложно подскажите. Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2015, 09:25 |
|
Создание объекта shape программно
|
|||
---|---|---|---|
#18+
в этом коде Код: vbnet 1.
переменной sh присваивается созданный шейп. Соответственно, двигать нужно не Shape1, a sh ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2015, 10:09 |
|
Создание объекта shape программно
|
|||
---|---|---|---|
#18+
Shocker.ProСоответственно, двигать нужно не Shape1, a sh Я наверное снова не достаточно лаконично выразился Код, который скинул Антонарий я понял. Также как и то, что можно допустим Me.Controls.Add("VB.Shape", "sh1") писать без Me и то, что мы создали круг с именем sh. Вопрос в другом. Я то его двигать смогу, например точно так же как и shape1 созданный в design. НО ведь пока первый шар не ударится об край формы следующего шара нет, отсюда вытекают те вопросы, которые я некорректно задал: 1) Как прописать в таймере что если контрола нет, то ..... 2) Как создавать каждый раз shape с новым именем( когда шар ударился второй раз об край формы вылезла ошибка - такой объект уже есть. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2015, 10:28 |
|
Создание объекта shape программно
|
|||
---|---|---|---|
#18+
2) Один вариант: Задать контролу в дизайне свойство Index = 0. Это сделает его массивом контролов. Нулевой элемент скрываем - Visible = 0 Добавить новый контрол - Код: vbnet 1. 2.
Другой вариант: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8.
"sh" & colShapes.Count будет работать до тех пор, пока из коллекции не начнут удаляться элементы произвольным образом. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2015, 11:28 |
|
Создание объекта shape программно
|
|||
---|---|---|---|
#18+
Antonariy"sh" & colShapes.Count будет работать до тех пор, пока из коллекции не начнут удаляться элементы произвольным образом. Ну тут понятно, я смогу и сам ограничить число их появления. Самый главный вопрос в том как мне потом вдохнуть в эти sh жизнь Код: vbnet 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.
Придется в процедуре таймера для каждого sh писать Код: vbnet 1. 2.
Если так, то если контролов будет 100 , то строк будет 200, что как минимум не правильно. И второе, возвращаясь к первому своему вопросу, пока первый шар не ударился о край формы таймер выполнится несколько раз. И сразу выдаст ошибку, что необходим объект. Конечно и это можно обойти, опираясь на свой минимум знаний, и включить обработчик ошибок, но и это мне кажется не совсем правильно. Может есть более правильный и простой способ избежать этого? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2015, 13:27 |
|
Создание объекта shape программно
|
|||
---|---|---|---|
#18+
Алгоритм опиши словами, а не кодом Как я понял: Шейп двигается до края экрана, как только достиг, мы на него плюем, создаем новый шейп и двигаем его. И зачем нам эти 200 строк? мы двигаем только текущий шейп, на остальные забили. Возможно, я неверно понял задачу. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2015, 17:21 |
|
Создание объекта shape программно
|
|||
---|---|---|---|
#18+
Shocker.ProВозможно, я неверно понял задачу. Нет(( Это я как обычно объяснил и думаю раз я знаю что нужно, то должны догадаться и все(( А на самом деле идея в том, что когда первый shape (созданный в design ) касается края появляется второй и он должен начать двигаться с того места где появился по тому же закону что и первый shape( который остается в движении и видимым) т.е. Код: vbnet 1. 2.
При чем если сделать даже как я написал vdekameronПридется в процедуре таймера для каждого sh писать Код: vbnet 1. 2.
То после появления второго sh он сразу сольется с первым и будут дружно лететь вместе как один т.к. Код: vbnet 1. 2. 3. 4. 5.
Вот тут я и застрял. Надеюсь в этот раз понятнее объяснил ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2015, 17:35 |
|
Создание объекта shape программно
|
|||
---|---|---|---|
#18+
То есть у всех шейпов одно и то же место старта? ЗЫ: не надо плодить сущности, зачем создавать 99 шейпов программно и один в дизайне? создавай все 100 программно, это сильно упростит программу. ЗЗЫ: Делаешь процедуру, которая называется ОДИН_ШАГ и на входе получает шейп. Процедура делает один шаг указанному шейпу (при этом ей все равно, с каким шейпом она работает, вспомни, чему я тебя учил - процедура не знает ничего о том, кто ее вызывает) Далее устраиваешь цикл, который который вызывает этот шаг для каждого из существующих шейпов. То есть имеет место быть стандартный прием программирования - инкапсуляция. Вышестоящая программа делает шаги, но не знает, каким образом реализуется сам шаг. Процедура делает шаг, но ей все равно, кто ее вызывает и зачем. Таким образом легче программу понимать, модифицировать и отлаживать. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2015, 18:05 |
|
Создание объекта shape программно
|
|||
---|---|---|---|
#18+
Shocker.Proсоздавай все 100 программно, это сильно упростит программу. Сделал. Shocker.ProЗЗЫ: Делаешь процедуру, которая называется ОДИН_ШАГ и на входе получает шейп. Сделал. ИТОГ:-Первый созданный sh двигается и когда касается правого края появляется второй sh, который сразу оказывается возле первого, а не плавно начинает двигаться со своего места появления. При этом первый sh уже стоит на месте т.к. Таймер уже работает со вторым. Я не проигнорировал вашу строку- Shocker.Proалее устраиваешь цикл, который который вызывает этот шаг для каждого из существующих шейпов. Но как его сделать, если sh появляются не сразу все а один за одним( при касании об правый край формы) Повторю конечная цель в том, чтобы появлялся шар в движении и при ударе о край формы вызывал другой шар, который бы тоже начинал хаотично двигаться и попав в край формы орять вызывал новый. и так до опупения Не знаю, может я снова сделал не то, что вы имели в виду ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2015, 11:01 |
|
Создание объекта shape программно
|
|||
---|---|---|---|
#18+
Shocker.Pro, Код: vbnet 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2015, 11:02 |
|
Создание объекта shape программно
|
|||
---|---|---|---|
#18+
Ты игнорируешь мои советы, я могу устать советовать. - One_step должна принимать шейп в качестве параметра и работать с ним - One_step должна вызываться в цикле, который перебирает все имеющиеся на данный момент шейпы - Надо избавиться от глобальных переменных, тут пока не нужна ни одна, кроме коллекции или массива шейпов Не пытайся написать программу, пока не придумал алгоритм, который ты можешь написать на бумаге и который будет работать в твоем сознании. Перевод алгоритма в код - дело техники, создание алгоритма - основная работа. Естественно, если ты используешь переменные x и y для всех шейпов сразу, они и будут находиться в одном месте, разве это не очевидно? И вообще, зачем нужны эти переменные, если те же самые значения хранятся в свойствах шейпа Top и Left? Не нужны вообще. Единственная проблема возникнет сейчас в stepY и stepX. Давай пока ты ее решать не будешь, чтобы не морочить себе голову ее можно решать отдельно. Пусть задача выглядит так: один шейп вылетел из исходной точки и полетел в указанном направлении, через 10 шагов в исходной точке появился второй шейп и полетел туда же, через 10 третий и т.п. (при этом, естественно, первый лететь не прекращает). Вот сделаешь это, тогда будем решать с отскоком от края. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2015, 11:15 |
|
Создание объекта shape программно
|
|||
---|---|---|---|
#18+
eddcontrol естественно, должна быть тоже автономна. Она ничего не принимает на вход, но возвращает созданный шейп. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2015, 11:17 |
|
Создание объекта shape программно
|
|||
---|---|---|---|
#18+
У тебя зацикленность на общих переменных, я не понимаю, откуда это взялось и как заставить избавиться от этой зависимости. Посмотри на свой код, ни одной переменной не определено в процедурах, ни одного параметра, ни одна процедура не возвращает результат, все переменные объявлены на уровне формы. Это неверный подход в принципе. Он тебе мешает, из-за этого у тебя не работает программа, потому что она представляет собой спагетти (и это почти официальный термин в программировании ))). ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2015, 11:39 |
|
Создание объекта shape программно
|
|||
---|---|---|---|
#18+
Shocker.ProТы игнорируешь мои советы, я могу устать советовать. Я понимаю, что вам может просто надоесть возня со мной, но я не игнорирую ваши советы вообще! Читаю по несколько раз, просто не совсем понимаю в виду своей недостаточной грамотности в этих вопросах. Но я же учусь. А переспрашивать не хочу) Ибо рискую тем, что пошлете или просто не ответите Shocker.ProНе пытайся написать программу, пока не придумал алгоритм, который ты можешь написать на бумаге и который будет работать в твоем сознании. Алгоритм я четко в своей голове представил и могу четко написать на бумаге и уже точно объяснил вам. Я бы не морочил вам голову, если бы сам не знал чего я хочу! Избавился от глоб. переменных. оставил только коллекцию шейпов. Shocker.Pro- One_step должна принимать шейп в качестве параметра и работать с ним Не совсем понял((( Shocker.Pro- One_step должна вызываться в цикле, который перебирает все имеющиеся на данный момент шейпы Не могу понять как цикл записать чтобы перебирал все им. sh Делаю вот так выдает ошибку - byref argument type mismatch Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2015, 12:08 |
|
Создание объекта shape программно
|
|||
---|---|---|---|
#18+
Shocker.ProУ тебя зацикленность на общих переменных, я не понимаю, откуда это взялось и как заставить избавиться от этой зависимости. Посмотри на свой код, ни одной переменной не определено в процедурах, ни одного параметра, ни одна процедура не возвращает результат, все переменные объявлены на уровне формы. Это неверный подход в принципе. Он тебе мешает, из-за этого у тебя не работает программа, потому что она представляет собой спагетти (и это почти официальный термин в программировании ))). Эту базу мне дала книга, по которой сейчас занимаюсь. Хотел ее скинуть вам просто для оценки опытным взглядом, но ее размер 7 метров( ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2015, 12:10 |
|
|
start [/forum/topic.php?fid=60&msg=38866392&tid=2156049]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
45ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
others: | 296ms |
total: | 445ms |
0 / 0 |