Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flash Приложения: AIR, Zinc и тд. (http://www.flasher.ru/forum/forumdisplay.php?f=94)
-   -   Проблемы при выводе приложения на разные мониторы. (http://www.flasher.ru/forum/showthread.php?t=197584)

Chum 09.04.2013 20:39

Проблемы при выводе приложения на разные мониторы.
 
Вложений: 1
Написал промежуточный вариант приложения где ядро - swf-файл, а оболочка WinForms C#.
Начал тестировать по принципу: выбрать сторонний комп с Windows 7 вставить флешку с приложением, запустить и что-б работало.
SWF-файл был написан в FlashDevelop 4 изначальные размеры указывались 800*600пкс, масштабирование "noScale".
Оболочка: VisualStudio 2010 C# Express WinForms. Изначальные размеры компонента AxShockwaveFlash в форме - 920*492 пкс. Все возможные параметры Anchor в свойствах были заданы : Top, Bottom, Left, Right.
Приложение писалось на компе с широкоформатным монитором (1680*1050пкс). При тестировании использовалось 4 стронних компа с мониторами 2 (1280*1024) и 2 (1680*1050), причём один из широкоформатных мониторов был вертикально установлен.
На всех широкоформатных мониторах приложение работало так как было задумано.
Проблемы возникли при отображение приложения на мониторах с разрешением 1280*1024 на двух аналогично.
Более наглядно косяки можно увидеть на представленном скриншоте. Там выделено 3 ошибки:
1. Рабочая область - swf-файл вместо того чтобы занимать всё пространство компонента AxShockwaveFlash, занимал выделенное красным.
2. Увеличились кнопки и фоновое изображение в них сползло в верхний левый угол.
3. В верхней части меню уменьшилось и открылся фон.
Если у кого-то есть какие-либо соображения по данному поводу, в чём причина косяков - поделитесь плиз.Вложение 29375

alexcon314 10.04.2013 17:21

1.См. в сторону автоматически генерируемого метода формы InitializeComponent() и в частности на выставление режимов AutoScaleDimensions и AutoScaleMode формы.
http://msdn.microsoft.com/ru-ru/library/ms229605.aspx
http://msdn.microsoft.com/ru-ru/libr...(v=vs.90).aspx
2. Не надо злоупотреблять анкорами (имхо). Можно использовать контейнеры типа Panel, TableLayoutPanel Dock-режимы, но это имхо, повторюсь.
3. Рабочая область ролика визуально соответствует заявленным "800*600пкс, масштабирование "noScale".
Естественно, масштабированием контента ролика дожен заниматься плеер, а не WinFоrms. Тут не понятно, что не устраивает.

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

И да, NET-приложения можно отчасти сконфигурировать, используя *.exe.config-файл. Например, сориентировать NET-рантайм на использование определенной версии фреймворка, когда их не одна на целевой машине.
На тестовых компах с версией NET все в порядке?

Chum 10.04.2013 17:38

Я проверял на скриншоте размеры выводимого изображения SWF-файла, каждая из сторон более первоначально заданной.
Повторюсь - на широкоформатных мониторах флешка занимала всю площадь экрана отведённую под компонент AxShock а не часть её как явствует из скрина.
Спасибо за ответ, буду рыть дальше.
Кстати, компонент AxShock вставлен на одну из страниц TableLayoutPanel, которая вставлена в Panel, которая вставлена в ячейку TabControl.
Прям как у Маршака!

alexcon314 11.04.2013 16:05

Каким образом ролик 800*600 занимает всю площадь плеера при размере 920*492 и режиме noScale???
Хотя...
В свойствах компонента AxShockwaveFlash на форме есть поля
CtlScale и SAlign. Они отвечают за выравнивание и скалирование контента.
При этом одновременно в коде ролика можно указать параметры stage.align и stage.scaleMode, например:
Код AS1/AS2:

stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;

что соответствует CtlScale=NoScale (или ScaleMode=0) и SAlign=LT (или AlignMode=5),
Глюки можно словить, если в свойствах контрола и в коде пытаться указывать разное поведение. Кроме того, нужно смотреть и на процесс инициализации как формы с контролом, так и ролика. Т.е. что и в какой последовательности выполняется. Анкоры, наложенные на контрол, могут добавить путаницы.

Выкладывайте пример проекта (C# и AS 3), где у вас происходят "непонятные" вещи. Не видя конкретного кода, трудно что-либо сказать..разве что пару общих фраз типа "чего-то вы там перемудрили" и "попробуйте все сначала" :).
И да, кнопочки со съехавшими картинками - это флеш или родный кнопки WinForms? Какое у них выравнивание и анкоры? Меню тоже выглядит странно, больше похоже на тулбар..
Вобщем, у меня сложилось впечатление, что вы пытаетесь как-то "своеобразно" проинициализировать приложение, оттого и глюки.

Chum 11.04.2013 17:02

Вложений: 1
Вот скрин экрана моего монитора и открытого приложения. Разрешение монитора 1680*1050.
Ясно видно что работает всё пространство рабочего поля компонента AxShockW.
Ядро - swf-файл выполненный в FD4, в нём ни одной кнопки прогораммно не создаётся, только рисование, логика и контакт с формой C#.
В том-то и дело что я не могу выложить примеры кода, потому как не знаю где происходят непонятные вещи.
На моём мониторе и других широкоформатных мониторах всё работет так как надо.
Проблемы с "квадратными" (в смысле 4*3) мониторами.
Я несколько переделал навигацию приложения но все внутренности те-же.
Вложение 29386

Chum 11.04.2013 17:05

У кнопок на малой форме все так как было изначально, толко уменьшена ширина, добавлены фоны (стрелки). Все кнопки VS WinForms.

alexcon314 11.04.2013 17:24

Сделайте вместо фона на кнопках (BackgroundImage) просто Image, и будет вам счастье...
Вы бы хоть значения свойств контрола перечислили, о которых я говорил... в коде ролика скалирование и выравнивание есть? Как загружаете ролик в контрол? Какие параметры привязок используете?
Без кода нифига не понятно, по-любому.
Цитата:

не знаю где происходят непонятные вещи
Я же вам сказал, как надо действовать в такой ситуации: убрать все лишнее, вплоть до "вообще все", добиться нормального поведения и добавлять постепенно остальное....

Chum 11.04.2013 18:45

Да я всё переделал с нуля, оттого и навигация новая. Правда опять таки на своём мониторе.
В принципе можно попробовать на "квадратном" переделать. Поговорю с народом дадут напрокат мониторчик.
Вот код класса в котором описывается работа компонента AxShockWeaveFlash:
Код AS3:

using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using AxShockwaveFlashObjects;
using ShockwaveFlashObjects;
using System.Windows.Forms;
using System.Xml;
 
 
namespace curve1
{
    class ComponentSWF
    {
        private Sklad sklad;
 
        public ComponentSWF(Sklad arg1)
        {
            sklad = arg1;
            String swfPath = Directory.GetCurrentDirectory() + Path.DirectorySeparatorChar + "curve3.swf";
            sklad.form1.swf.LoadMovie(0, swfPath);
            sklad.form1.swf.FlashCall += new AxShockwaveFlashObjects._IShockwaveFlashEvents_FlashCallEventHandler(this.poluchDannAS3);
        }
        /// <summary> Получение запроса из SWF-файла компонента AxShockwaveFlash.
        /// Получение запроса из SWF-файла компонента AxShockwaveFlash.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void poluchDannAS3(object sender, _IShockwaveFlashEvents_FlashCallEvent e)
        {
            XmlDocument document = new XmlDocument();
            document.LoadXml(e.request);
            XmlAttributeCollection attributes = document.FirstChild.Attributes;
            String command = attributes.Item(0).InnerText;
            XmlNodeList list = document.GetElementsByTagName("arguments");
            /* Передача полученных данных для обработки и вывода результата */
            string str = list[0].InnerText;
            switch (command)
            {
                /* Переадресация в класс SozdanieSloev */
                case "otvet_SozdNewSloy": sklad.szdSloy.otvetSozdNewSloy(str); break;
                case "vosstanvlNameSloy": sklad.szdSloy.vosstNameSloy(); break;          /* Восст.в Cbx0.Text имени прежнего слоя */
                /* Переадресация в класс OtvetAS3 */
                case "vyvod_okno_soobsh": sklad.otvtAS3.vyvodOtvetOkno(str); break;
                case "vyvod_otvetST_AS3": sklad.otvtAS3.vyvodOtvetStat(str); break;
                case "vyvod_otvetVL_AS3": sklad.otvtAS3.vyvodOtvetVLab(str); break;
                case "vyvod_proverkDann": sklad.otvtAS3.vyvodZnachMBx(str); break;
                /* Переадресация в класс OshybkaAS3 */
                case "vyvod_oshybka_AS3": sklad.oshbAS3.vyvodOshybki(str); break;        /* Вывод ошибки */
                /* Переадресация в класс ComponentPicBox */
                case "image_peredDannyh": sklad.cPicBox.vyvodRisunok(str); break;
            }
        }
        /// <summary> Вызов функции в объекте SWF отформатированной XML-строкой.
        /// Вызов функции в объекте SWF отформатированной XML-строкой.
        /// </summary>
        /// <param name="arg1">XML-отформатированная строка</param>
        public void otprZaprosSWF(string arg1)
        {
            sklad.form1.swf.CallFunction(arg1);
        }
 
        /* Передача в SWF-файл значений реальной ширины и высоты SWF-файла */
        public void otpravkaWdtHghtSWF()
        {
            /*  1.Ширина и 2.Высота SWF-файла */
            string strP = sklad.form1.swf.Width.ToString() +
                          "*!*" + sklad.form1.swf.Height.ToString();
            List<string> list = new List<string>();
            list.Add("documentWdHg");
            list.Add(strP);
            StrokaXMLzaprosAS3 strXML = new StrokaXMLzaprosAS3(sklad);
            string str = strXML.strokaZaprXML_AS3(list);
            sklad.cSWF.otprZaprosSWF(str);
        }
    }
}


alexcon314 11.04.2013 19:43

Дружище, это ни о чем. Полный код проектов религия не позволяет показать? И ас3 и c#. Проекты FD и VisualStudio (желательно не старше MSVS 2010).

Chum 11.04.2013 20:34

Я сторонник открытости кодов, тому есть примеры и на моём сайте kersha.ru и на этом форуме. Однако это касается только тех проектов которые претендуют на статус законченных. Незаконченные проекты не выкладываются.
Да в принципе я докопаюсь.


Часовой пояс GMT +4, время: 03:58.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.