Важная информация
Показано с 1 по 9 из 9

Тема: Сборка программы из работающих кусков.

  1. #1 Сборка программы из работающих кусков. 
    Супер модератор Аватар для >Quiet Snow<
    Регистрация
    11.04.2011
    Адрес
    Планета земля
    Сообщений
    3,822
    Сказал(а) спасибо
    1,808
    Поблагодарили 933 раз(а) в 795 сообщениях
    Записей в блоге
    1
    Короче говоря забавная вещь - по отдельности программы работают, вместе - нет.
    Что за юмор я не могу понять. Пытаюсь объединить мышку с прогой по загрузке *.BMP, и - не пашет.
    Причём если добавляю код последовательно, то на этапах до последнего - работает, а когда всё в
    сборе - нет. Ошибок в коде нет, т.к. по отдельности всё работает, короче бред какой-то. Просто бьюсь
    бошкой об стену: рабочий код не работает. Я уже не раз замечал такое с прогами на FB, это косяк компилятора?

    Я не исключаю возможность своей ошибки, НО я уже второй раз пересобираю прогу и получаю в конце лажу,
    причём делаю последовательно и до определённого момента работает... Подсознательно понимаю, что комп
    не может ошибаться, но что-то уже совсем устал пересобирать прогу. А задача ведь простейшая, загрузить
    курсорчик и вывести его. Не хочется спихивать всё на компиль, попробую ещё раз конечно, но блин представьте:
    код работает, меняете имя переменной на нужное, проставляете его везде где надо - хрясь и уже не работает,
    меняете имя обратно и, то что 10 секунд назад работало - тоже перестало, короче забавнее некуда...
    Обучение прикладному программированию(по skype), качественно, недорого, 18+, вопросы в личку.
    «Если вы ничего не сделаете, я уверяю вас, ничего и не произойдёт» © Жак Фреско
    Ограниченно модерирую.
    Ответить с цитированием  
     

  2. #2  
    Профи Аватар для stabud
    Регистрация
    05.01.2013
    Сообщений
    768
    Сказал(а) спасибо
    319
    Поблагодарили 339 раз(а) в 268 сообщениях
    Записей в блоге
    6
    Цитата Сообщение от >Quiet Snow< Посмотреть сообщение
    Я уже не раз замечал такое с прогами на FB, это косяк компилятора?
    Когда успел? Ведь если не ошибаюсь, ты только начал свой кодинг на этом языке...

    Цитата Сообщение от >Quiet Snow< Посмотреть сообщение
    Я не исключаю возможность своей ошибки
    Че из пустого в порожнее переливать, покажи код, или его работающую часть с подобным багом, попробуем понять и разобраться. Хотя если подобное возникает исключительно в режиме FBLITE , тогда я пас. По поводу этого режима я уже высказывался и он (fblite) мне абсолютно не интересен.
    Ответить с цитированием  
     

  3. Пользователь сказал cпасибо:

    >Quiet Snow< (26.01.2013)

  4. #3  
    Супер модератор Аватар для >Quiet Snow<
    Регистрация
    11.04.2011
    Адрес
    Планета земля
    Сообщений
    3,822
    Сказал(а) спасибо
    1,808
    Поблагодарили 933 раз(а) в 795 сообщениях
    Записей в блоге
    1
    Когда успел? Ведь если не ошибаюсь, ты только начал свой кодинг на этом языке...
    При попытках подредактировать абсолютно рабочие примеры. Так же их запарывал.

    По сабжу:
    Вот код который сижу и сейчас пытаю, при попытке отрисовать PUT'ом хоть вообще что-нибудь,
    мышь координаты возвращает и всё, что связано с мышью работает на ура. PUT как будто не выполняется
    вообще, т.к. беру любые примеры из справки, вставляю их в тек код и нифига не пашет. При том я чётко
    понимаю, что делаю, а не просто от балды вставляю код.

    Код fb:
       #INCLUDE ONCE "FbGfx.bi"
       #INCLUDE ONCE "Windows.bi"
       ' $Lang: "FBLite"
     
       '    Тип события для мышки
    TYPE MY_SCEVENT FIELD = 1
          EvTip AS INTEGER
          UNION
               TYPE
                     ScnCod AS INTEGER
                     AscCod AS INTEGER
               END TYPE
               TYPE
                     X AS INTEGER
                     Y AS INTEGER
                     Dx AS INTEGER
                     Dy AS INTEGER
               END TYPE
               Button AS INTEGER
               Z AS INTEGER
               W AS INTEGER
          END UNION
    END TYPE
     
       '    Тип заголовка *.BMP
    TYPE BMFile FIELD = 1
       BmID AS SHORT = 19778
       FileSize AS INTEGER
       Reserved AS INTEGER
       BmOFFSET AS INTEGER = 54
       HeadSize AS INTEGER = 40
       BmpSizeX AS INTEGER
       BmpSizeY AS INTEGER
       BmSlices AS SHORT = 1
       BitDepth AS SHORT = 32
       Rez1 As LONGINT
       Rez2 As LONGINT
       Rez3 As LONGINT
    END TYPE
     
        '    Декларации
     
        '    Функции виртуальной мышки
    DECLARE SUB  SetMouPos(XMp AS INTEGER, YMp AS INTEGER)
    DECLARE SUB  SetMouWnd(X1p AS INTEGER, Y1p AS INTEGER, X2p AS INTEGER, Y2p AS INTEGER)
    DECLARE SUB  ALLInput ()
     
        '    Функции работы с *.BMP
    DECLARE FUNCTION LoadBMP (BmName AS STRING) AS ANY POINTER
    DECLARE SUB SaveBMP (BmName AS STRING, IMG_Buff AS ANY POINTER)
     
        '    Функции программы
     
    DECLARE SUB  InitALL ()       '    Общая инициализация
     
    'DECLARE SUB  MainMenu ()
     
    DECLARE SUB  ButtonXY (X AS SHORT, Y AS SHORT, Xdl AS USHORT, Ydl AS USHORT, R AS UBYTE, G AS UBYTE, B AS UBYTE, Ctrst AS SINGLE, State AS INTEGER)
        '    Технические функции
          'DECLARE SUB  LoadCur ()
     
     
        '    Технич. переменные
     
              ' |>    Экран    <|
    DIM SHARED AS UINTEGER ScrXRez, ScrYRez, FullSCR
     
              ' |>    Мышь    <|
    DIM SHARED AS DOUBLE  MouseSPD = 1
    DIM SHARED AS INTEGER  Mx, My, Mb, MbO, LClick, CClick, RClick
    DIM SHARED AS LONG  MxE, MyE, StepsTBL(511)
    DIM SHARED AS LONG  MxE_LClip, MxE_RClip, MyE_UClip, MyE_DClip
    DIM SHARED AS POINT  Md, Cntr
    DIM SHARED MyProgEv AS MY_SCEVENT
    DIM SHARED Mdx AS INTEGER, Mdy AS INTEGER
     
     
              ' |>    Курсор    <|
    DIM CurBMImg AS ANY POINTER
    'CurBMImg = LoadBMP("Курсор 1.BMP")
    CurBMImg = ImageCreate(100, 100, RGBA(255, 255, 255, 255) , 32)
    LINE CurBMImg, (0, 0)-STEP(10,10), RGBA(255, 255, 255, 255)
    ScrXRez = 1024: ScrYRez = 768           '  Фиксированное разрешение
    'SCREENINFO ScreenXRez, ScreenYRez           '  Разрешение рабочего стола
     
         InitALL
     
     
         DO
             CLS
     
         'ALLInput
          PUT (RND * 255, RND * 255), CurBMImg, ALPHA
           'PUT (Mx, My), CurBMImg, ALPHA
     
             'PCOPY
             FLIP
             'SLEEP 10, 1
         LOOP UNTIL INKEY$ = CHR$(27)
     
    END
     
    SUB  SetMouPos(XMp AS INTEGER, YMp AS INTEGER)
       MxE = XMp SHL 8
       MyE = YMp SHL 8
         IF MxE < MxE_LClip THEN MxE = MxE_LClip
         IF MxE > MxE_RClip THEN MxE = MxE_RClip
         IF MyE < MyE_UClip THEN MyE = MyE_UClip
         IF MyE > MyE_DClip THEN MyE = MyE_DClip
    END SUB
     
    SUB  SetMouWnd(X1p AS INTEGER, Y1p AS INTEGER, X2p AS INTEGER, Y2p AS INTEGER)
       MxE_LClip = X1p SHL 8
       MxE_RClip = X2p SHL 8
       MyE_UClip = Y1p SHL 8
       MyE_DClip = Y2p SHL 8
    END SUB
     
    SUB ALLInput ()
    DIM TmpA AS INTEGER, TmpB AS INTEGER
     
       ' ___   Мышь   ___
     IF (Screenevent(@MyProgEv)) THEN 'если произошло событие
         SELECT CASE MyProgEv.EvTip    'тогда узнаем какое
             CASE EVENT_MOUSE_MOVE        '   Перемещение мыши
               '   Определяем новые координаты мыши
                 GetCursorPos(@Md)
     
               '   Ставим мышь в центр
                 SetCursorPos(Cntr.x, Cntr.y)
     
               '   Считаем дельту
                 Mdx = Md.x - Cntr.x
                 Mdy = Md.y - Cntr.y
     
               '   Добавляем к координатам приращение мыши
                 MxE = MxE + StepsTBL(Mdx + 256)
                 MyE = MyE + StepsTBL(Mdy + 256)
     
               '   Границы мыши
                 IF MxE < MxE_LClip THEN MxE = MxE_LClip
                 IF MxE > MxE_RClip THEN MxE = MxE_RClip
                 IF MyE < MyE_UClip THEN MyE = MyE_UClip
                 IF MyE > MyE_DClip THEN MyE = MyE_DClip
                 Mx = MxE SHR 8
                 My = MyE SHR 8
             CASE EVENT_WINDOW_CLOSE    '   Закрытие окна
                 END
         END SELECT
     END IF
         '    Возьмём клики мышкой
         GetMouse TmpA, TmpB, , Mb
         IF ((MbO AND 1) IMP (Mb AND 1)) = -2 THEN LClick = 1 ELSE LClick = 0
         IF ((MbO AND 2) IMP (Mb AND 2)) = -3 THEN RClick = 1 ELSE RClick = 0
         IF ((MbO AND 4) IMP (Mb AND 4)) = -5 THEN CClick = 1 ELSE CClick = 0
         MbO = Mb
     
       '___   Клавиатура   ___
         Kb$ = INKEY$
         IF Kb$ = CHR(27) THEN END
    END SUB
     
    FUNCTION LoadBMP (BmName AS STRING) AS ANY POINTER
    DIM NewIMG AS ANY POINTER, BmID AS SHORT
    DIM AS INTEGER NewIMG_XRez, NewIMG_YRez
    DIM SvBMF AS INTEGER
    SvBMF = FREEFILE
    IF NOT OPEN(BmName, FOR BINARY, ACCESS READ, AS #SvBMF) THEN
        GET #SvBMF, , BmID
        IF BmID = 19778 THEN
            GET #SvBMF, 19, NewIMG_XRez
            GET #SvBMF, , NewIMG_YRez
            IF NewIMG_XRez > 0 AND NewIMG_YRez > 0 THEN
               NewIMG = ImageCreate(NewIMG_XRez, NewIMG_YRez, , 32)
               BLOAD BmName, NewIMG
               LoadBMP = NewIMG
            END IF
        END IF
    CLOSE #SvBMF
    END IF
    END FUNCTION
     
    SUB SaveBMP (BmName AS STRING, IMG_Buff AS ANY POINTER)
    DIM AS INTEGER  SImgRezX , SImgRezY, ImgSize, LineBytes
    DIM WhereData AS BYTE PTR
    DIM NewFHead AS BMFile, FHead AS BMFile, BmNameL AS STRING
    DIM AS INTEGER  AdrAdd, SvBMF, ImY
     
       IMAGEINFO IMG_Buff, SImgRezX, SImgRezY, , LineBytes, WhereData, ImgSize
       NewFHead.FileSize = SImgRezX * SImgRezY SHL 2 + 54
       NewFHead.BmpSizeX = SImgRezX
       NewFHead.BmpSizeY = SImgRezY
       SvBMF = FREEFILE
       OPEN BmName FOR BINARY ACCESS WRITE AS SvBMF
       PUT #SvBMF, , NewFHead
            FOR ImY = SImgRezY - 1 TO 0 STEP -1 
                 AdrAdd = LineBytes * ImY
                 PUT #SvBMF, , *(WhereData + AdrAdd), SImgRezX SHL 2
            NEXT
       CLOSE SvBMF
    END SUB
     
     
    SUB  InitALL ()
    DIM i AS LONG
       '    Экран
     SCREENRES ScrXRez, ScrYRez, 32, 2, FullSCR
     SCREENSET 1, 0
       '    На английскую раскладку
     IF GetKeyboardLayout (0) = 68748313 THEN
        ActivateKeyboardLayout(HKL_NEXT, KLF_SETFORPROCESS)
     END IF
       '    Загрузим курсор
     'LoadCur
     
       '     Мышку в центр
    Mx = ScrXRez SHR 1
    My = ScrYRez SHR 1
    SetMouse Mx, My, 0, 1
       '     И возьмём координаты "глобального" центра
    GetCursorPos(@Cntr)
       '     Подготовим таблицу умножений для мышки
      FOR i = 0 TO 511
           StepsTBL(i) = CLNG((CDBL(i - 256)) * MouseSPD * 256)
      NEXT
     
    SetMouWnd 0, 0, CINT(ScrXRez - 1), CINT(ScrYRez - 1)
    SetMouPos Mx, My
    END SUB
     
    SUB  ButtonXY (X AS SHORT, Y AS SHORT, Xdl AS USHORT, Ydl AS USHORT,_
                            R AS UBYTE, G AS UBYTE, B AS UBYTE, Ctrst AS SINGLE, State AS INTEGER)
     
    DIM Kf1 AS SINGLE, Kf2 AS SINGLE
      SELECT CASE State
          CASE 0: Kf1 = 1 + Ctrst: Kf2 = 1 - Ctrst
          CASE ELSE: Kf1 = 1 - Ctrst: Kf2 = 1 + Ctrst
      END SELECT
          R1 = CSNG(R) * Kf1: IF R1 > 255 THEN R1 = 255
          G1 = CSNG(G) * Kf1: IF G1 > 255 THEN G1 = 255
          B1 = CSNG(B) * Kf1: IF B1 > 255 THEN B1 = 255
          R2 = CSNG(R) * Kf2: IF R2 > 255 THEN R2 = 255
          G2 = CSNG(G) * Kf2: IF G2 > 255 THEN G2 = 255
          B2 = CSNG(B) * Kf2: IF B2 > 255 THEN B2 = 255
      LINE (X, Y)-STEP(Xdl, Ydl), RGB(R, G, B), BF
      LINE (X, Y)-STEP(Xdl, 0), RGB(R1, G1, B1)
      LINE (X, Y)-STEP(0, Ydl), RGB(R1, G1, B1)
      LINE (X, Y + Ydl)-STEP(Xdl, 0), RGB(R2, G2, B2)
      LINE (X + Xdl, Y)-STEP(0, Ydl), RGB(R2, G2, B2)
    END SUB
    Обучение прикладному программированию(по skype), качественно, недорого, 18+, вопросы в личку.
    «Если вы ничего не сделаете, я уверяю вас, ничего и не произойдёт» © Жак Фреско
    Ограниченно модерирую.
    Ответить с цитированием  
     

  5. #4  
    Супер модератор Аватар для >Quiet Snow<
    Регистрация
    11.04.2011
    Адрес
    Планета земля
    Сообщений
    3,822
    Сказал(а) спасибо
    1,808
    Поблагодарили 933 раз(а) в 795 сообщениях
    Записей в блоге
    1
    Буду пересобирать прогу, бесполезно пытать этот код... Комп надо мной просто шутит.
    Обучение прикладному программированию(по skype), качественно, недорого, 18+, вопросы в личку.
    «Если вы ничего не сделаете, я уверяю вас, ничего и не произойдёт» © Жак Фреско
    Ограниченно модерирую.
    Ответить с цитированием  
     

  6. #5  
    Профи Аватар для stabud
    Регистрация
    05.01.2013
    Сообщений
    768
    Сказал(а) спасибо
    319
    Поблагодарили 339 раз(а) в 268 сообщениях
    Записей в блоге
    6
    Цитата Сообщение от >Quiet Snow< Посмотреть сообщение
    Буду пересобирать прогу, бесполезно пытать этот код... Комп надо мной просто шутит.
    Да нет никаких проблем в твоем коде, обычная банальная ошибка программиста, который запарился

    Нельзя использовать функции из либы FbGfx до инициализации экрана.

    Так функция ImageCreate у тебя возвращает 0 и правильно делает, ведь инициализации экрана еще не производилось.
    Ответить с цитированием  
     

  7. Пользователь сказал cпасибо:

    >Quiet Snow< (26.01.2013)

  8. #6  
    Супер модератор Аватар для >Quiet Snow<
    Регистрация
    11.04.2011
    Адрес
    Планета земля
    Сообщений
    3,822
    Сказал(а) спасибо
    1,808
    Поблагодарили 933 раз(а) в 795 сообщениях
    Записей в блоге
    1
    АААА!!!, спасибо stabud, я думал эту функцию можно вызывать везде, т.к. работа с GET идёт через описатели,
    которые выделяют память под картинку, а тут сделали так хитрожопо. Ну что ж буду знать, буду знать.
    Ошибки последовательности - самые ламерские и блин их искать реально сложно, особенно когда думаешь,
    что всё вроде бы должно работать. А так если бы не ваш мессадж, я бы с этой прогой ещё долго бы трахался.
    Обучение прикладному программированию(по skype), качественно, недорого, 18+, вопросы в личку.
    «Если вы ничего не сделаете, я уверяю вас, ничего и не произойдёт» © Жак Фреско
    Ограниченно модерирую.
    Ответить с цитированием  
     

  9. #7  
    Профи Аватар для stabud
    Регистрация
    05.01.2013
    Сообщений
    768
    Сказал(а) спасибо
    319
    Поблагодарили 339 раз(а) в 268 сообщениях
    Записей в блоге
    6
    ВЫ да ВЫ... Давай проще?
    Ответить с цитированием  
     

  10. #8  
    Супер модератор Аватар для >Quiet Snow<
    Регистрация
    11.04.2011
    Адрес
    Планета земля
    Сообщений
    3,822
    Сказал(а) спасибо
    1,808
    Поблагодарили 933 раз(а) в 795 сообщениях
    Записей в блоге
    1
    Давай проще?
    Ну да можно и проще, спасибо короче, чтобы без тебя делал, такой я "ласось" ваще.

    Как видишь пишу плацдарм для разных прог, а по коду - там можно найти мышку с сенсой,
    правда, я её ещё допиливать буду, клики по отпусканию - есть а по нажатию ещё нету.
    Ну и может быть простенький GUI-фейс буду делать с частью функционала, совместимой с
    OpenGL. Короче теперь я в очередной раз(наверное в стотысячный) понял - комп всегда прав!
    Обучение прикладному программированию(по skype), качественно, недорого, 18+, вопросы в личку.
    «Если вы ничего не сделаете, я уверяю вас, ничего и не произойдёт» © Жак Фреско
    Ограниченно модерирую.
    Ответить с цитированием  
     

  11. #9  
    Профи Аватар для Dimon012
    Регистрация
    09.02.2011
    Адрес
    Владивосток
    Сообщений
    850
    Сказал(а) спасибо
    29
    Поблагодарили 130 раз(а) в 108 сообщениях
    Записей в блоге
    3
    Цитата Сообщение от >Quiet Snow< Посмотреть сообщение
    ...код работает, меняете имя переменной на нужное, проставляете его везде где надо - хрясь и уже не работает...
    Вот из-за этого я и бросил VB.
    А еще бывает добавил строчку и не работает, добавил еще строчку wuala, заработало!
    Ответить с цитированием  
     

Информация о теме
Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Повтор программы HELP
    от Reimon в разделе QBasic
    Ответов: 2
    Последнее сообщение: 22.05.2012, 15:34
  2. Циклические программы
    от sanchez6666 в разделе QBasic
    Ответов: 7
    Последнее сообщение: 05.12.2011, 21:01
  3. Циклические программы 2
    от maxon01 в разделе QBasic
    Ответов: 9
    Последнее сообщение: 01.12.2011, 20:33
  4. Программы на СТЕПЛЕРе
    от Kakos_nonos в разделе Степлер
    Ответов: 4
    Последнее сообщение: 01.12.2011, 04:20
  5. Помогите исправить код программы
    от azalivin в разделе QBasic
    Ответов: 3
    Последнее сообщение: 10.05.2011, 18:52
Ваши права
  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •