Конференция "Прочее" » FWHexView
 
  • Rouse_ © (16.04.17 15:26) [0]
    Пишу тут контрольчик, для себя - ну как обычно, не хватает функционала существующих.
    Вроде как не плохо получается, некоторые моменты еще не допилены, но уже есть что показать.
    Главная фишка контрола - размапливание данных, для их более удобного редактирования.

    Выглядит оть так (экзешник приложен):
    https://www.dropbox.com/s/9ohjvbzazb6ipj2/fwhex_demo.zip?dl=0

    Жду мнений и пинков :)
  • dmk © (16.04.17 16:07) [1]
    Миленько. Дизасм?
  • Rouse_ © (16.04.17 16:13) [2]
    Все будет, я под "diStorm 3.3" закладываюсь, с прыжками и размапливанием дальних вызовов - должно получиться шеколадно (ну я так думаю).
  • Rouse_ © (16.04.17 16:18) [3]
    Только вот не решил еще что с подсветкой асм выхлопа делать.
    Хотелось бы взять что готовое, но все эти внешние хайлайтеры сильно перегружают код.
    Придется походу самому шаманить что-то простое
  • dmk © (16.04.17 16:38) [4]
    Серо-синие или серо-зеленоватые оттенки вполне подойдут. Глазам приятно, да и с цветом проще опорные точки находить. Чисто белый вариант - лишний напряг для зрения. И на микрософт похоже ;)
  • Rouse_ © (16.04.17 16:48) [5]
    Зависит от общей гаммы, оть тут-то у меня и засада на отрисовке.
    Но ничего - решу
  • dmk © (16.04.17 16:54) [6]
    А в чем могут быть сложности? Вот например делал свои контролы вместо системных.
    Вся отрисовка своя: https://cloud.mail.ru/public/bkmv/YUqSxabFZ
    Могу кодом поделиться. Дубово конечно, но работает, хоть в буфере, хоть на системный DC.
  • Rouse_ © (16.04.17 18:06) [7]

    > dmk ©   (16.04.17 16:54) [6]
    > А в чем могут быть сложности? Вот например делал свои контролы
    > вместо системных.

    Да сложности то никакой, оверхеда не хочется.
    Кстати а с твоим софтом то как работать? Какой файл открывать?
    ЗЫ: У меня два монитора - окошко "О программе", на разрезе обоих - радует :)
  • dmk © (16.04.17 18:41) [8]
    Вообще это ROAM для рипов. Для просмотра сверхбольших однобитовых растров.
    Размер до 300000х300000 пикселов. Там тиф для примера приложен.
    Прорисовка окна полностью своя. Даже ScrollDC свой ;) Свои слайдеры, линейки, прорисовка и сдвиг + движок масштабирования. Почти как в шопе.
    На двух мониторах не тестировал. Там надо окно Information поставить в любое место и потом позиция панелей по умолчанию. Они в ряд выстроятся. Интерфейс я не дорабатывал.
    У меня другая тема сейчас - 3D.
  • Rouse_ © (16.04.17 18:46) [9]

    > dmk ©   (16.04.17 18:41) [8]
    > Вообще это ROAM для рипов. Для просмотра сверхбольших однобитовых
    > растров.
    > Размер до 300000х300000 пикселов. Там тиф для примера приложен.
    >

    Херасе!!!
    Заценил - могешь.
    Алго думаю стандартное - через псевдоканвас вывод?
  • Rouse_ © (16.04.17 18:48) [10]
    Кстати (это уже профессиональное) - масштабирование блоками через метафайлы или ручками делал? :)
  • dmk © (16.04.17 21:37) [11]
    Вывод блоками 256х256 в буфер, а от винды только BitBlt и сообщения.
    В общем под досом также будет работать. Почти без переделки.
    Жалко движок выкидывать. Там можно слои делать, как в шопе рисовать и т.п.
    + поддержка LAB, CMYK, XYZ и т.п. Все сделано ручками. Даже шрифты свои ;) Правда растровые.
  • Rouse_ © (17.04.17 20:21) [12]
    Публикуй сорцы, чего таким вещам пропадать?
  • dmk © (17.04.17 23:29) [13]
    Да вот думаю может чего коммерческого из нее сделать. А так если не выйдет, то опубликую.
  • Rouse_ © (18.04.17 10:41) [14]
    Я уже давно забил на коммерцию, не получается из меня продажника :)
    Хотя есть идейка доделать утилиту выводящую диаграмму зависимостей проекта по модулям, для рефакторинга (развитие моего старого UnitWeb) да чет руки не доходят.
    Поэтому все в опенсорс выкладываю :)
  • dmk © (18.04.17 12:53) [15]
    С софтверной коммерцией всегда сложно. Угадать что нужно рынку трудно. Продукт должен быть просто идеальным в нынешних условиях. Да и еще куча факторов для успеха. В общем болото. Хотя если написать свой компилятор, то успех думаю будет. Российских компиляторов не видел ;)
  • Eraser © (18.04.17 13:01) [16]

    > dmk ©   (18.04.17 12:53) [15]


    > Хотя если написать свой компилятор, то успех думаю будет

    Более того, оглушительный успех! ) Например, такой, как у Delphi сейчас. При том, что про Делфи хотя бы мельком слышал, практически каждый программер на Земле.


    > Российских компиляторов не видел

    если не ошибаюсь, то даже местные форумщики наклепали кучу компиляторов.
  • dmk © (18.04.17 13:42) [17]
    >если не ошибаюсь, то даже местные форумщики наклепали кучу компиляторов.
    Про компиляторы не слышал. Слышал про скрипты.

    Ну Delphi со времен 3-ей версии выросла значительно. Мощная штучка получилась.
  • Rouse_ © (18.04.17 13:45) [18]

    > Хотя если написать свой компилятор, то успех думаю будет.

    Это грубо, компилер на коленке пишется за три дня - я на спор делал, сразу с декомпилером (дето у меня на сайте даже линк на него лежал).
    Оть другое дело поддержка всех функций языка, тут сложнее
  • dmk © (18.04.17 13:55) [19]
    >Оть другое дело поддержка всех функций языка, тут сложнее
    Да не очень. Я вот свои библиотеки пишу. SysUtils64, System64 и т.п.
    Всякие Lo, Hi, FloatToStrR, IntToStr, Inc, Dec, Move и т.п. мелкая чушь ;)
    У меня в ic64 все на своих функциях работает. Процентов 90. Вот.

    Вот например одна:

    //F - число типа double
    //NumDigits - кол-во разрядов после запятой (ограничивается диапазоном 0..MAXDOUBLEDIGITS(0..15))
    //FRound = True: режим округления последнего разряда (Пример: 0.99 = 1.0, 0.099 = 0.10, 0.0099 = 0.010)
    //FRound = False: режим отсечения последнего разряда (Пример: 0.99 = 0.9, 0.099 = 0.09, 0.0099 = 0.009)
    function FloatToStrR(F: double; NumDigits: integer; FRound: boolean): string;
    var
     FRes: qword;
     IRes: qword;
     NumFDigits: integer;
     NumIDigits: integer;
     FStr: string;
     IStr: string;
     MaxFracPrecision: qword;
     fF: double;
     i, d, iD, MinusSign: integer;
     NumGroupDividers: integer;
     c: char;

    begin
     if (F = DoubleNaN) then Exit('NaN');

     //Инициализация строк
     FStr := '';
     IStr := '';

     //Кол-во разрядов после запятой,
     //которые следует показать
     NumFDigits := NumDigits;

     //Отсечем максимальное кол-во разрядов
     if (NumFDigits >= MAXDOUBLEDIGITS) then
       Clamp(NumFDigits, 0, MAXDOUBLEDIGITS) else
       Clamp(NumFDigits, 0, NumDigits);

     //Дробная часть
     if (NumFDigits >= 0) then
     begin
       //Масимальная точность числа в целочисленном представлении
       MaxFracPrecision := Power10(NumFDigits);
       //Округление последнего разряда
       if FRound then
       begin
         //Сместим разряды в целую часть и округлим
         //Фактически число изменилось
         F := Round(F * MaxFracPrecision) / MaxFracPrecision;
       end;
       //Дробная часть
       fF := Frac(F);
       //Сместим разряды в целую часть
       fF := (fF * MaxFracPrecision);
       //Преобразуем в положительное целое
       if FRound then FRes := Abs(Round(fF)) else FRes := Abs(Trunc(fF));
       //Длина дробной строки
       SetLength(FStr, NumFDigits);

       for i := NumFDigits downto 1 do
       begin
         //Остаток числа в символ
         d := (FRes mod 10);
         //Преобразуем в знак
         c := SingleDigits[d];
         //Добавим в строку
         FStr[i] := c;
         //Переход к следующему разряду
         FRes := (FRes div 10);
       end;
     end;//if

     //Целочисленная часть
     if InRange(F, MinDoubleToInt64, MaxDoubleToInt64) then
     begin
       //Резерв места для знака
       if (F < 0) then MinusSign := 1 else MinusSign := 0;
       //Целая часть числа
       IRes := Abs(Trunc(F));
       //Кол-во чисел в целой части
       NumIDigits := CountIntDigits(IRes);
       //Учтем разделение разрядов в группы по 3 знака
       if (NumIDigits > 3) then
       begin
         NumGroupDividers := (NumIDigits div 3);
         //Если кол-во чисел кратно трем,
         //то последний разделитель не нужен
         if ((NumIDigits mod 3) = 0) then Dec(NumGroupDividers);
       end
       else NumGroupDividers := 0;
       //Длина строки целой части с учетом знака и разделителей групп
       SetLength(IStr, NumIDigits + NumGroupDividers + MinusSign);
       //Счетчик позиций в строке
       i := (NumIDIgits + NumGroupDividers + MinusSign);
       //Счетчик цифр
       iD := 0;

       while (i > 0) do
       begin
         //Остаток числа в символ
         d := (IRes mod 10);
         //Преобразуем в знак
         c := SingleDigits[d];
         //Добавим число в строку
         IStr[i] := c;
         //Считаем кол-во выведенных в строку цифр
         Inc(iD);
         //Вставим разделитель групп
         if (NumGroupDividers > 0) then
           if ((iD mod 3) = 0) then
           begin
             Dec(i);
             IStr[i] := GroupSeparator;
             Dec(NumGroupDividers);
           end;
         //Переход к следующему разряду
         IRes := (IRes div 10);
         //Смещаемся в строке
         Dec(i);
       end;

       if (MinusSign = 1) then IStr[1] := '-';
     end
     else Exit(MSG_DOUBLEEXCEDINGLIMITS);

     if (NumFDigits <> 0) then
       Result := IStr + DecimalSeparator + FStr else
       Result := IStr;
    end;
 
Конференция "Прочее" » FWHexView
Есть новые Нет новых   [134431   +10][b:0][p:0.001]