Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Не сайты (http://www.flasher.ru/forum/forumdisplay.php?f=82)
-   -   Програмка прикладная в AS 3.0 (http://www.flasher.ru/forum/showthread.php?t=127874)

siver 24.07.2009 21:18

Програмка прикладная в AS 3.0
 
Сделал такую вот програмку, узкопрофильную для проверки спл на вертолётах Ми-8, Ми-24. Надоело пальцем по графикам возить, да и в actionscrpt-е третьем заодно попрактиковался.Первое, что сделал на AS 3.0 в чистом коде.
www.demonium.com.ua/spl.swf

Яски 24.07.2009 21:49

Че делать то?
Цитата:

При атмосферном давлении 666 мм.рт.ст.
и температуре окружаюшего воздуха 5 °C
указанное давление срабатывания СПЛ NaN атм.
выходит за предел допустимых значений.
СПЛ подлежит замене.
Записал строку

VVall 24.07.2009 21:57

Ума не приложу, ну как можно додуматься подтверждать ввод клавишами в поле ввода только кликом по кнопке? Почему пользователь (вы) должен разрываться между клавиатурой и мышью в таких элементарных действиях?

Яски 24.07.2009 22:03

Я, кстати, класс поля для вода вещественных чисел писал для своей курсовой. Может кому пригодиться.


Код AS3:

package gui {
 
        import flash.display.Sprite;
        import flash.events.TextEvent;
        import flash.text.*;
 
        public class DigitField extends Sprite {
 
                private var text:TextField;
 
                public function DigitField(caption:String = null) {
                        mouseEnabled = false;
 
                        text = new TextField();
                        addChild(text);
                        text.x = 0;
                        text.y = 20;
                        text.defaultTextFormat = new TextFormat("_typewriter", 14);
                        text.autoSize = TextFieldAutoSize.NONE;
                        text.width = 100;
                        text.height = 20;
                        text.background = true;
                        text.border = true;
                        text.type = TextFieldType.INPUT;
                        text.addEventListener(TextEvent.TEXT_INPUT, onInput);
                        text.maxChars = 10;
 
                        if (caption != null) {
                                var label:TextField = new TextField();
                                addChild(label);
                                label.text = caption;
                                label.defaultTextFormat = new TextFormat("Tahoma", 12);
                                label.selectable = false;
                                label.autoSize = TextFieldAutoSize.LEFT;
                        }
                }
 
                private function onInput(e:TextEvent):void {
                        var txt:String = e.text;
                        var str:String = "";
                        for (var i:int = 0; i < txt.length; i++) {
                                var char:String = txt.charAt(i);
                                if (isDigitChar(char) || ((char == "." || char == ",") && (dotIndex(text.text) < 0 || dotIndex(text.selectedText) >= 0) && dotIndex(txt) == i)) {
                                        str += char;
                                }
                        }
                        e.preventDefault();
                        if (str != "") {
                                text.replaceSelectedText(str.substr(0, 10 - (text.length - Math.abs(text.selectionEndIndex - text.selectionBeginIndex))));
                        }
                }
 
                private function dotIndex(str:String):int {
                        var id1:int = str.indexOf(".");
                        var id2:int = str.indexOf(",");
                        return (id1 < 0) ? id2 : (id2 < 0) ? id1 : (id1 < id2) ? id1 : id2;
                }
 
                public function get value():Number {
                        var val:Number = Number(text.text.replace(",", "."));
                        return isNaN(val) ? 0 : val;
                }
 
                private static function isDigitChar(char:String):Boolean {
                    var charCode:Number;
                    charCode = char.charCodeAt();
                        return (charCode >= 48 && charCode <= 57);
                }
 
        }
}


siver 24.07.2009 23:35

эт в принципе и всё.
Просто давление надо было вводить между 0.1 и 0.8
Надо доработать ограничение ввода, не может там Nan вылезать.
Я понимаю, что это бредом кажется, но на работе помогает.

Добавлено через 1 минуту
согласен на все 100, надо ещё кнопочку enter на ввод добавить

Добавлено через 8 минут
Цитата:

Сообщение от Яски (Сообщение 838026)
Я, кстати, класс поля для вода вещественных чисел писал для своей курсовой. Может кому пригодиться.


Спасибо за класс, у меня что-то очень похожее, только работает чуть по другому.(и возможно где-то и неправильно:away:)

WRC_S 25.07.2009 08:59

не понятно чё надо делать?

siver 25.07.2009 11:37

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

VovkaMorkovka1 26.07.2009 01:50

Лучше было - бы, чтобы значения вводились не последовательно, а в форму и не пропадали после ввода.

siver 26.07.2009 05:04

а они и не пропадают.
Между графиками висят после ввода.

crazyone 26.07.2009 17:17

Цитата:

Сообщение от Яски (Сообщение 838026)
Я, кстати, класс поля для вода вещественных чисел писал для своей курсовой. Может кому пригодиться.

Ого. А не проще через restrict сделать было?
Типа:
Код:

package gui {
 
        import flash.display.Sprite;
        import flash.events.TextEvent;
        import flash.text.*;
 
        public class DigitField extends Sprite {
 
                private var text:TextField;
               
                private const DIGITS_ONLY:String="0-9";
                private const DIGITS_AND_DOTS:String="0-9.,";

 
                public function DigitField(caption:String = null) {
                        mouseEnabled = false;
 
                        text = new TextField();
                        addChild(text);
                        text.x = 0;
                        text.y = 20;
                        text.defaultTextFormat = new TextFormat("_typewriter", 14);
                        text.autoSize = TextFieldAutoSize.NONE;
                        text.width = 100;
                        text.height = 20;
                        text.background = true;
                        text.border = true;
                        text.type = TextFieldType.INPUT;
                        text.addEventListener(TextEvent.TEXT_INPUT, onInput);
                        text.maxChars = 10;

                        text.restrict=DIGITS_AND_DOTS;
 
                        if (caption != null) {
                                var label:TextField = new TextField();
                                addChild(label);
                                label.text = caption;
                                label.defaultTextFormat = new TextFormat("Tahoma", 12);
                                label.selectable = false;
                                label.autoSize = TextFieldAutoSize.LEFT;
                        }
                }
                private function onInput(e:TextEvent):void {
                        if(e.text.indexOf(".")!=-1||e.text.indexOf(",")!=-1){
                                e.target.restrict=DIGITS_ONLY;
                        }else{
                                e.target.restrict=DIGITS_AND_DOTS;
                        }

                }
                public function get value():Number {
                        var val:Number = Number(text.text.replace(",", "."));
                        return isNaN(val) ? 0 : val;
                }
        }
}

Должно работать, не проверял.


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

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