Вопросы реализации графического интерфейса

Тема в разделе "Машинное отделение", создана пользователем Orlov, 11 апр 2007.

  1. TopicStarter Overlay

    Orlov Учаcтник

    • Участник
    Рег.:
    27.02.2007
    Сообщения:
    177
    Симпатии:
    0
    Репутация:
    0
    Оффлайн
    На днях нарисовал в дельфи 7 доску с фигурами. Фигуры обучил правилам игры.
    Доску и фигуры рисую так:

    EmptyBoard:=TBitMap.Create;
    OutputMemo.Lines.Clear;
    try
    with EmptyBoard do begin
    LoadFromFile('C:\Pict\EmptyBoard.bmp');
    TransparentColor:=EmptyBoard.Canvas.Pixels[100,100];
    Form1.Canvas.Draw(10,10,EmptyBoard);
    end;
    finally
    end;

    ......



    Но ... таскать с собой с:\Pict не хотелось и я решил включить изображение в exe. Для этого попытался использовать Delphi image editor и далее как ресурс.

    примерно так:

    EmptyBoard:=TBitMap.Create;
    OutputMemo.Lines.Clear;
    try

    with EmptyBoard do begin
    EmptyBoard.LoadFromResourceName(HInstance,'EMPTYBOARD');
    Form1.Canvas.Draw(10,10,EmptyBoard);
    end;
    finally
    end;

    Не тут то было! Не могу загрузить более чем 256 - цветный bmp файл. Тупой редактор не дает.
    Как обойти? Подскажите пож.
    Заранее благодарен.
  2. Chemer Максим

    • Участник
    Рег.:
    14.09.2006
    Сообщения:
    1.674
    Симпатии:
    13
    Репутация:
    0
    Адрес:
    Запорожье
    Оффлайн
    для фигур и клеток 256 цветов с головой хватит ;)
  3. WinPooh В.М.

    • Команда форума
    Рег.:
    13.02.2006
    Сообщения:
    9.491
    Симпатии:
    3.118
    Репутация:
    95
    Адрес:
    Москва
    Оффлайн
    Фу, бяка! Что ещё за магические числа 100 и 10?

    В правильно написанной программе могут встречаться в явном виде только числа 1 и 0, всё остальное параметризуется через константы или переменные.

    Вот захочется вам через какое-то время сделать доску растягиваемой до произвольного размера, будете по коду на четвереньках ползать и везде эти 100 и 10 отыскивать...
  4. TopicStarter Overlay

    Orlov Учаcтник

    • Участник
    Рег.:
    27.02.2007
    Сообщения:
    177
    Симпатии:
    0
    Репутация:
    0
    Оффлайн
    так вот не хватает :) увы ...
  5. TopicStarter Overlay

    Orlov Учаcтник

    • Участник
    Рег.:
    27.02.2007
    Сообщения:
    177
    Симпатии:
    0
    Репутация:
    0
    Оффлайн
    если бы это было самым сложным :) А вообще Вы правы конечно. Буду исправляться.
  6. TopicStarter Overlay

    Orlov Учаcтник

    • Участник
    Рег.:
    27.02.2007
    Сообщения:
    177
    Симпатии:
    0
    Репутация:
    0
    Оффлайн
    в Visual C++ та же проблема, как оказалось ...
  7. Chemer Максим

    • Участник
    Рег.:
    14.09.2006
    Сообщения:
    1.674
    Симпатии:
    13
    Репутация:
    0
    Адрес:
    Запорожье
    Оффлайн
    Осталось билдер попробывать ... :D
  8. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    А потом искать что-же это за переменная :)
    136 в константы никак нельзя :)
  9. Vladimirovich Консультант

    • Ветеран
    • Заблокирован
    • Старожил
    Рег.:
    27.09.2006
    Сообщения:
    6.007
    Симпатии:
    810
    Репутация:
    31
    Нарушения:
    31
    Адрес:
    https://quantoforum.ru/
    Оффлайн
    С отображением проблемы нет. С редактированием есть
    http://support.microsoft.com/kb/132705
  10. TopicStarter Overlay

    Orlov Учаcтник

    • Участник
    Рег.:
    27.02.2007
    Сообщения:
    177
    Симпатии:
    0
    Репутация:
    0
    Оффлайн
    для того, что бы фигура пападала в клетку придумал такую фигню:

    procedure Coordinate; //определение координат откуда-куда
    begin
    i:=one div(10);
    j:=one-i*10;
    l:=two div(10);
    m:=two-l*10;
    b:=11+53*j;t:=382-53*i;
    r:=11+53*m;s:=382-53*l;
    end;
    .
    .
    Coordinate;
    movefigure;//нарисовать ход

    размер клетки 53x53, размер доски 382x382. Может можно получше что-нибудь замутить :)

    Добился рандомного исполнения ходов (с соблюдением правил). Делаю так:

    searchlegmvs(whitesturn,1); //список возможных ходов
    Randomize;
    temp:=Random(legals[1]); // legals - максимальное число в списке возможных ходов
    if temp=0 then temp:=1; // ничего умнее не придумал(правда и не парился сильно) Если 0 - прога не делает ход :)

    file1:=legmvs[1,temp].file1;// поле откуда например 50
    rank1:=legmvs[1,temp].rank1;// поле куда 60

    что соответствует ходу черных a7a6. Доска как у Каиссы [0..77]

    может у кого есть желание и возможность подсказать что-нибудь полезное?

    Заранее благодарен.
  11. ProstoTak Старожил

    • Ветеран
    • Старожил
    Рег.:
    12.02.2006
    Сообщения:
    5.479
    Симпатии:
    123
    Репутация:
    1
    Оффлайн
    Может я не совсем понял проблему, но если не охота "таскать с собой с:\Pict " то его можно просто добавить в exe файл, тупо дописав его в конец готового экзешника. Потом при запуске программы его оттуда доставать и сбрасывать во временный каталог, у же из временного каталога работать как обычно с изображением.
  12. TopicStarter Overlay

    Orlov Учаcтник

    • Участник
    Рег.:
    27.02.2007
    Сообщения:
    177
    Симпатии:
    0
    Репутация:
    0
    Оффлайн
    Простите, ничего не понял. Нельзя ли поподробнее.
  13. ProstoTak Старожил

    • Ветеран
    • Старожил
    Рег.:
    12.02.2006
    Сообщения:
    5.479
    Симпатии:
    123
    Репутация:
    1
    Оффлайн
    К готовому экзешнику в конец дописывается ("приклеивается") нужный .bmp файл. Зная размер этого файла, в програме можно предусмотреть процедуру его добычи из экзешника. Просто копируем нужное количество байт начиная с конца экзешника к которому "приклеен" наш .bmp файл во временный файл. А потом этот временный файл и используем как изображение.
  14. TopicStarter Overlay

    Orlov Учаcтник

    • Участник
    Рег.:
    27.02.2007
    Сообщения:
    177
    Симпатии:
    0
    Репутация:
    0
    Оффлайн
    благодарю,
    мне кажется проще в папку с программой поместить файлы изображений, что я и сделал. Программа в стадии разработки и нет смысла после каждой перекомпиляции проводить описанную выше процедуру.
  15. bankuss Александр

    • Заслуженный
    • Участник
    • Старожил
    Рег.:
    24.05.2006
    Сообщения:
    1.084
    Симпатии:
    38
    Репутация:
    6
    Оффлайн
    не проще ли сделать масштабируемые от размера окна лейблы а вместо картинок вставлять символы (тоже масштабируемые) шахматного шрифта? (шрифтов таких навалом) . единственный минус этого способа - нужно устанавливать шрифт в систему где его нет. но я думаю это не очень напряжно :)

Поделиться этой страницей