Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (до версии 2009) - часть 5

Модерирует : ShIvADeSt

ShIvADeSt (19-05-2010 05:14): Продолжаем тут http://forum.ru-board.com/topic.cgi?forum=33&topic=11215  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101

   

ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Продолжение темы Вопросы по Delphi (до версии 2009) - часть 4

Познаем сами, помогаем другим...
Обсуждаем вопросы, не связанные с юникоидными версиями Delphi - для этого есть соответствующая тема (см. ссылки ниже).

Правила топика:
    Прежде чем спрашивать:
  1. Желательно изучить вопрос, попытаться найти ответ в прилагаемых мануалах, хелпах и анализируя исходники.
  2. Выполнить поиск по топику (открыть "Версия для печати" и поискать ответ там).
  3. Применить фильтр по разделу "Прикладное программирование". Ответы на многие старые вопросы могли быть даны в отдельных темах.
  4. Продумайте вопрос. На поверхностные вопросы вы получите поверхностные ответы, или вообще ответов не получите.
  5. Желательно указывать версии используемого компилятора и операционной системы.
    Прежде чем отвечать:
  1. Если не можете помочь, не мешайте.
  2. Если уж вы отвечаете на вопрос, давайте ответ по сути.
  3. Если вы не уверены, так и говорите! Ошибочный, но авторитетно звучащий ответ хуже, чем отсутствие ответа.
  4. Задавайте дополнительные вопросы, чтобы получить больше информации.
  • Отсутствие ответа не равносильно игнорированию - иногда участники форума просто не знают ответ. Повторная посылка вопроса не приветствуется. Посты типа "неужели никто не знает ответа..." или "может мне все-таки кто-нибудь ответит" недопустимы.  
  • Все большие куски кода (более 5 строк) оформляем в тег [morе] дабы уменьшить размер поста. FAQ по тегу [morе].

  • Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 02:09 28-06-2009 | Исправлено: psa1974, 12:00 02-02-2010
    psa1974



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    TechnoDreamer
    при такомколличестве значений с помощью ползунка точно никогда не угадаешь... Я бы чуть ниже или рядом предусмотрел бы еще окно для ввода пальцами точного значения, например, как в диалоге выбора цвета при нажатой клавише "определить цвет" (когда появляется палитра цветов). Там справа есть вертикальный ползунок, а под ним 6 окон ввода для ввода точного значения. Или как в фотошопе во многих диалогах редактирования, скажем, "яркость/контраст"...  
    Можно по правой кнопке реализовать контекстное меню с зарезервированными похициями перехода (как в тоталкоммандере при щелчке правой кнопкой на сплиттере между панелями...)

    Всего записей: 438 | Зарегистр. 08-11-2005 | Отправлено: 11:19 08-11-2009
    data man



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    TechnoDreamer
    Очень хорошие "ползунки" c редакторами значений, есть в библиотеке Pegtop Common Components http://pegtop.net/delphi/components/common/screenshots.htm
    См. самый нижний скриншот. Все с исходниками.

    ----------
    Любой достаточно развитый тролль неотличим от подлинно помешанного на какой-либо идее.
    Кекс. Антибиотики. Ламбада.

    Всего записей: 1696 | Зарегистр. 13-10-2005 | Отправлено: 11:38 08-11-2009 | Исправлено: data man, 11:41 08-11-2009
    psa1974



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    data man
    Ухты, классные компаноиды! Себе забрал, спасибо

    Всего записей: 438 | Зарегистр. 08-11-2005 | Отправлено: 12:14 08-11-2009 | Исправлено: psa1974, 12:15 08-11-2009
    TechnoDreamer

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    psa1974, так и есть, есть едит с числовым значением и стрелочками вверх\вниз, а подним трэк бар.
     
    data man, спасибо, именно то что нужно.

    Всего записей: 259 | Зарегистр. 01-06-2008 | Отправлено: 14:06 08-11-2009
    data man



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    psa1974
    TechnoDreamer
    Да не за что.  
    Там еще есть очень интересный компилятор математических выражений в машинный код. Над ним поработать и PaxCompiler станет не нужен
     
    P.S. А вообще хорошо бы создать отдельный топик по OpenSource компонентам.
    С разбивкой по категориям, по поддерживаемым версиям Delphi и т.д.
    Как идея, кто поддержит ?
    Поддержка заключается не в "Да ! Да !!! Я - за !" Топик нужно будет пополнять.

    ----------
    Любой достаточно развитый тролль неотличим от подлинно помешанного на какой-либо идее.
    Кекс. Антибиотики. Ламбада.

    Всего записей: 1696 | Зарегистр. 13-10-2005 | Отправлено: 14:19 08-11-2009 | Исправлено: data man, 14:47 08-11-2009
    V1s1ter



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    data man
    Спасибо за ползунки - сидел писал собственные, теперь скачал посмотрел оставил, свои недописанные в мусорку.

    Цитата:
    P.S. А вообще хорошо бы создать отдельный топик по OpenSource компонентам.  

    Однозначно нужною Только писать туда не все что попало под руку, а только проверенные и качественные. Всякого барахла и на Тори можно посмотреть.
     
    Добавлено:
    В догонку.
    Может стоит сделать некий шаблон, например, как предложил xMesSir для "Анонсы компонент и утилит для Delphi/BCB ", да простит он меня за плагиат.
     
    Предлагаю в шапке написать так:
     
    Правила оформления постов

     
    Анонс компонента или библиотеки постить ТОЛЬКО в указанном виде и ТОЛЬКО о тех компонентах, которые не были анонсированы в данном топе ранее:
    1. Название компонента или библиотеки.
    2. Основное назначение (буквально до десяти слов).
    3. Поддерживаемые версии Delphi/Builder
    4. Ссылка на официальный сайт
     
    Дополнительно можно постить свое мнение о компоненте или библиотеке в виде:
    1. Название компонента или библиотеки.
    2. Пара-тройка слов о том чем понравилась.
    3. Пара-тройка слов о том чем НЕ понравилась.

    Всего записей: 948 | Зарегистр. 06-02-2007 | Отправлено: 16:01 08-11-2009
    data man



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    V1s1ter + всем заинтересованным
    Пока так:
    Нужен ли топик по Open Source-компонентам для Delphi ?
    Голосуем, обсуждаем оформление шапки, правила оформления постов и т.п.

    ----------
    Любой достаточно развитый тролль неотличим от подлинно помешанного на какой-либо идее.
    Кекс. Антибиотики. Ламбада.

    Всего записей: 1696 | Зарегистр. 13-10-2005 | Отправлено: 17:57 08-11-2009 | Исправлено: data man, 18:02 08-11-2009
    Vinidimka

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите, пожалуйста, как можно воспроизвести звук mp3 из файла ресурса при запуске приложения? Интересуют разные способы.

    Всего записей: 61 | Зарегистр. 15-11-2006 | Отправлено: 18:22 08-11-2009
    DmitryKz

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ребята, что не так делаю:
    разархивирую из архива текстовый файл в TFileStream, затем чтобы загрузить (LoadFromStream) его в TStringList (нужно кое-что найти в нем) - успешно загружается;
    разархивирую из архива тот же текстовый файл в TMemoryStream для тех же целей - ничего не получается - в TStringList ничего не загружается (в TMemoryStream файл есть);
    Никаких нюансов работы с TMemoryStream в доках не вижу.
     
    Добавлено:
    так, нашел - добавил к мемористрим.Seek(0, soFromBeginning);
    и все заработало. блин, как очевидно-то))))

    Всего записей: 3142 | Зарегистр. 29-09-2005 | Отправлено: 20:05 08-11-2009
    psa1974



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    DmitryKz
    хм... а Дельфи какая? Юникодовая или обычная? в 2007-й такой код работает:

    Код:
    procedure TForm9.Button2Click(Sender: TObject);
    var
      mstr: TMemoryStream;
      ts: TStringList;
    begin
      mstr:= TMemoryStream.Create;
      ts:= TStringList.Create;
      mstr.LoadFromFile('t:\Temp\manifest.xml');
      mstr.Position:= 0;
      ts.LoadFromStream(mstr);
      ShowMessage(ts.Text);
      mstr.Free;
      ts.Free;
    end;

     
    Добавлено:
    DmitryKz
    А, ну понятно Бывает... В начало потока не позиционироался

    Всего записей: 438 | Зарегистр. 08-11-2005 | Отправлено: 20:35 08-11-2009
    ValidolX

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ребята, есть вопрос по дебагеру Дельфи Lite (Delphi10_Lite_v4.1_SP2_Integrated.rar)
    не работает подсказка дебагера (маленькое желтое окошко, оно же hint-window)
    у кого то бывало такоке? мож есть способ починки
     
    дебагать без оного ну совсем не в кайф (можно конечно добавлять в Watch переменные - так работает, но ето не то!!!!!)
     
     
    ПОж-та напишите у кого такое было, кто как фискал
     
    Или (мучает меня идея ета) дело в том что дельфи - лайт?
     
    Спасибо

    Всего записей: 1713 | Зарегистр. 22-07-2001 | Отправлено: 00:12 09-11-2009
    Maks150988



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Приветствую, подскажите вот что. Есть у меня значения HDC (LongWord). Для уменьшенния объема кода решил пройтись в цикле и использовать по назначению вот такой-то соответсвующий HDC из массива. Надеюсь понятно объяснил чего хочу, для упрощения код с Boolean:
     

    Код:
    const
      MyArray: Array [Boolean] of Integer = (100, 101);
    // использование
    IntToStr(MyArray[TRUE]);
     

    У меня 3 логнворда, то есть нужно что-то типа Array [HDC] of Integer = (dc1, dc2, dc3), вобщем как бы незамысловато такое сделать, а то компилятор ругается мол объем больше 2 гб у типа данных.

    Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 21:40 09-11-2009
    ValidolX

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Maks150988
     
    непонял размерность твоего массива, мож так вот -  
     
    const:
      MyArray: array [0..2] of Integer = (100, 101, 102);
     
     
    implementation
    .....
    IntToStr(MyArray[0]);  
    ........
     

    Цитата:
     а то компилятор ругается мол объем больше 2 гб у типа данных.

    а сообщение компилятора можно сюда?
     

    Всего записей: 1713 | Зарегистр. 22-07-2001 | Отправлено: 21:47 09-11-2009
    Maks150988



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ValidolX
    Data type too large: exceeds 2 GB
     
    Впринципе не помогло. Хотелось бы что-то типа таккого MyArray: Array [HDC] of Integer = (ptp.normalDC, ptp.pressDC, ptp.maskDC) или к кнадо правильнее.

    Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 22:04 09-11-2009
    psa1974



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Maks150988
    Ясное дело, что при объявлении константы типа Array [HDC] of Integer компилятор ругнется что выделяемый под тип разсер памяти больше 2 Гб! Посчитай сам: тип HDC (Longword) имеет минимальное значение 0, максимальное - 4294967295. Т.е. ты говоришь компилятору, что ты хочешь объявить константу типа массив, состоящий из 4294967296 элементов типа Integer. Считаем дальше, итого запрашиваемый размер: 4294967296 * SizeOf(Integer) = 4294967296 * 4 = 17179869184 байт или 16 Гб
     
    А в варианте, подсказанном ValidolX ты выделяешь под тип константы такой размер:3* SizeOf(Integer) = 12 байт - все красиво!
    Вот и думай
    И еще вопрос: ptp.normalDC, ptp.pressDC, ptp.maskDC - это же вроде как дескрипторы контекстов каких-то устройств. Т.к. ты хочешь загнать их в константу, то ты уверен, что знаешь их в момент компиляции. Вопрос: как ты их знаешь?
    Можно сделать так:

    Код:
     
    type
      DCarray = (normalDC, pressDC, maskDC);
    var
      MyArray: array [DCarray] of integer;
    begin
      MyArray[normalDC]:= ptp.normalDC;
      MyArray[pressDC]:= ptp.pressDC;
      MyArray[maskDC]:= ptp.maskDC;
      IntToStr(MyArray[pressDC]);
    end;
     

     
     
    Добавлено:
    ну можно не привязываясь к типу DCarray, заказать такой массив: MyArray: array [Byte] of integer;, в этом случае ты потребуешь у компилятора память 256* SizeOf(Integer) = 256*4 = 1024 байт, или 1 Мбайт. С этим компилятор еще согласится...
    Тут еще подумал, если у тебя ptp.normalDC, ptp.pressDC, ptp.maskDC имеют тип HDC, то надо ж так и массив заказывать: MyArray: array [Byte] of HDC, при чем тут Integer?

    Всего записей: 438 | Зарегистр. 08-11-2005 | Отправлено: 22:36 09-11-2009 | Исправлено: psa1974, 23:00 09-11-2009
    Maks150988



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    psa1974
    Я сначала создаю контексты при инициализации элемента управления, а вот этот массив нужен для функции, то есть к этому моменту дескрипторы контекстов уже есть. Все-таки придется подпроцедурку сделать и значения подсовывать ей чем привязываться к типам тем более что действительно меньше кода писать придется и возни меньше.

    Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 23:00 09-11-2009
    psa1974



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Maks150988

    Цитата:
    сначала создаю контексты при инициализации элемента управления

    т.е. в константу ты дескрипторы ну никак не можешь запихнуть на этапе компиляции Только через переменую типа массив.  
    А привязываться к типам - вообще на самом деле очень даже не плохо - меньше ошибок потом случается - компилятор бдит
    Кстати, цикл для варианта с использованием переменной типа DCarray можно так организовать:

    Код:
    var  i: DCarray;
    for I := Low(MyArray) to High(MyArray) do
      IntToStr(MyArray[i]);
     

    Всего записей: 438 | Зарегистр. 08-11-2005 | Отправлено: 23:15 09-11-2009
    Maks150988



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    psa1974
    А, вот оно что. Я просто не знаю все возможности, стараюсь осваивать. Просто из-за 3 проходов циклом многовато коду как мне кажется, не стоит это всех этих лишних телодвижений, понимаю было бы 10 HDC в массиве на крайняк, тогда другое дело.

    Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 23:22 09-11-2009
    ValidolX

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    MyArray: array [Byte] of integer;, в этом случае ты потребуешь у компилятора память 256* SizeOf(Integer) = 256*4 = 1024 байт, или 1 Мбайт.

     
    На самом деле меньше - 1 К (килобайт)
     

    Цитата:
    for I := Low(MyArray) to High(MyArray) do

    вот ето самый класный варант итерации по масиву - всем так советую
    плюсы - если изменились границы - цикл дальше правильно итерует по массиву!
     
    Количество DC наперед известно или нет?
    если да - делай свой тип, заполняй его екземпляр в коде и передавай куда надо

    Всего записей: 1713 | Зарегистр. 22-07-2001 | Отправлено: 23:36 09-11-2009
    Maks150988



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ValidolX
    Да все известно. Вот код. Получилось вроде неплохо.
     

    Код:
    procedure Trackbar_SetBmpImage(hWnd: THandle; pszFilePath: PWideChar; IsImgThumb: Boolean; hdcIn: HDC; var iWidth, iHeight: Integer);
    var
      dc  : HDC;
      himg: HBITMAP;
     
      procedure GetThumbHbitmap(hdc: HDC; imgCount: Integer);
      var
        himgt: HBITMAP;
      begin
        himgt := GetBitmapFromHbitmap(himg, imgCount, iWidth, iHeight);
        if (himgt <> 0) then
          begin
            SelectObject(hdc, himgt);
            DeleteObject(himgt);
          end;
      end;
     
    begin
      dc := GetDC(hWnd);
      //
      himg := LoadImageW(0, pszFilePath, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
      if (himg <> 0) then
        begin
          //
          case IsImgThumb of
            TRUE:
              begin
              GetBitmapWidthHeightW(himg, iWidth, iHeight);
              iWidth := iWidth div 3;
              //
              GetThumbHbitmap(ptp.normalDC, 1);
              GetThumbHbitmap(ptp.pressDC, 2);
              GetThumbHbitmap(ptp.maskDC, 3);
              end;
            FALSE:
              begin
                GetBitmapWidthHeightW(himg, iWidth, iHeight);
                SelectObject(hdcIn, himg);
              end;
          end;
          //
          DeleteObject(himg);
        end;
      //
      ReleaseDC(hWnd, dc);
    end;

    Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 23:45 09-11-2009
       

    Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101

    Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (до версии 2009) - часть 5
    ShIvADeSt (19-05-2010 05:14): Продолжаем тут http://forum.ru-board.com/topic.cgi?forum=33&topic=11215


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru