Вопрос по меню

Applications development, KoOS API questions
  • Щас выложу. У меня нова трабла хотел сделать панель цвета A60000(красный), но заместо этого панель сверху нужного цвета, а бОльшая часть - голубая. Из-за чего так?
    P.S.
    И ещё:
    если использовать последний скин то придется некоторые проги переделать т.к. они рисуют компоненты прямо по заголовку (т.к. он шире обычного)
  • Попоробуй цвет без нулевых компонетов, скажем A60101
  • Тоже сталкивался с таким глюком. Для панели можно выставить не любой цвет :(
  • Глюки с цветом панели связаны, видимо, с тем, что компоненты цвета уменьшаются/увеличиваются не по отдельности, а все вместе.
    Пример кода:

    Code: Select all

            sub eax,0x00010101
    В таком случае, если в EAX находилось число 0x00A60000, то станет оно равным 0x00A4FEFF, что, естественно, больше похоже на синий/голубой, а не на красный.
    Чтобы исправить ситуацию, обычно делают, например, так:

    Code: Select all

            mov ecx,3
        @@: dec al
            jns .lp1
            xor al,al
      .lp1: ror eax,8
            loop @b
            shr eax,8
    
  • подскажите как можно панельку пошире сделать??? если конечно это возможно...
  • В @Panel наверно где то зарыто. скорее всего рядом с цветом.
  • AqwAS
    Ты имеешь в виду по высоте? Пока что это невозможно. Ты, конечно, можешь увеличить высоту окна панели, но нижняя часть при этом отрисовываться не будет и панель будет выглядеть такой же узкой
  • mike.dld
    Я спрашивал не тебя. Соответственно отвечать должен был автор.
    И хватит уже играть роль суперцензора. Вот откроешь сайт http://www.kolibrios.org, вот там, пожалуйста, затыкай рот, кому хочешь и когда хочешь. Тем более это будет полностью твой сайт...
    А здесь люди имеют право говорить все, что они думают. Если ты не перестанешь заниматься той деятельностью, которую ты развел здесь, то я могу и забанить тебя и без всяких опросов. Это крайняя мера и она будет использована лишь в последнюю очередь.

    Veliant
    Heavyiron
    Для создания псевдотрехмерности панель рисуется не одним цветом. Сверху и снизу (по 2 линии) цвета изменены относительно цвета середины. Это приходиться учитывать, когда вы пытаетесь применять чистые цвета. Не для всех цветов правильно срабатывает изменение цвета.

    AqwAS
    А ты посмотри код внимательней и думаю, догадаешься, где поправить нужно, правда придется править код в нескольких местах сразу, так как панель состоит из нескольких частей.
  • в версии ме 0.75 кажется (точно не помню) была панелька linux-подобная... я много раз код отрисовки смотрел..., но разницу не нашёл... в чём-то конечно есть, но все игры с цифрами илши вообще ничего не давали или панель не работала...

    простите конечно за глупые вопросы, но я только начал вникать в систему...
  • Так я посмотрел код изменять нужно, в 4 местах. Это только чтобы окно рисовалось на другой размер, а уж высоту остальных деталей найдете сами, а то будет маразмом описывать все здесь.
    1)
    newline3:
    add edx,[esi]
    add esi,4

    mov eax,38
    int 0x40
    add ecx,1*65536+1
    cmp cx,15 - здесь рисуется центральная часть панели, начальное значение 5, отсюда 15-5=10
    jb newline3
    2)
    stripe:
    dd -0x010101
    dd -0x010101
    dd -0x020202
    dd -0x010101
    dd -0x000000

    dd 0x000000
    dd 0x010101
    dd 0x020202
    dd 0x010101
    dd 0x010101
    здесь должно быть столько строк сколько рисуется в первой процедуре. Они определяют псевдотрехмерность формы панели.

    3)
    set_variables:

    pusha

    mov [b_size_y],dword 38
    cmp [graph_text],1
    jne noy2
    mov [b_size_y],dword 18 - тут нужно прописать высоту всей панели
    noy2:
    4)
    no_def_width:

    mov ebx,eax
    mov [screenxy],ebx
    shr ebx,16
    sub ax,38
    shl eax,16
    mov ecx,eax
    add ecx,0*65536+38
    cmp [graph_text],1
    jne no_text_1
    mov cx, 18 - здесь желательно тоже прописать высоту
    add ecx,20*65536 - а вот старшие 16 бит ecx определяют где будет начинаться окно, смотрите как это вычисляется в коде выше.
    no_text_1:
    mov eax, 0 ; DEFINE AND DRAW WINDOW
    mov edx, [wcolor]
    or edx, 0x01000000 ; do not draw the window
    mov esi, [wcolor]
    or esi, 0x01000000 ; unmovable window
    mov edi, [wcolor]
    int 0x40

    Вот и все, вроде не особо сложно.
    А для того чтобы было проще отлаживать код можно пользоваться отладчиком который написал Diamond.
    http://meos.sysbin.com/viewtopic.php?t= ... sc&start=0
    Тем более, что он написал для него весьма подробное руководство.
  • огромное спасибо... буду пробовать...
  • все сделал... работает... теперь хочу картинку поставить на кнопку меню, но почемуто она не отображается... вместо картинки разноцветные точки!
  • AqwAS
    Чтобы вывести картинку тебе придется использовать формат BMP и к тому же перевернуть картинку по горизонтали и вертикали пред использованием, плюс учитывать сдвиг, так как в начале идут служебные данные.
    Либо есть возможность использовать библиотеку Павлюшина Евгения ASCL - в ней кроме вывода BMP можно выводить и GIF картинки и там не нужно манипулировать с картинкой. Правда описание не очень подробное, так что придется смотреть реализацию кода в приложенных демках. Сама библиотека ASCL включена в исходники Колибри. Правда, там она в нескольких версиях, просто в более поздних отсутствовали некоторые демо приложения.
  • Who is online

    Users browsing this forum: No registered users and 12 guests