На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
! user posted image
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.

Соблюдайте общие правила форума

Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как запустить программу/файл? (и дождаться ее завершения)
5. Как перехватить API-функции, поставить hook? (перехват сообщений от мыши, клавиатуры - внедрение в удаленное адресное прстранство)
... (продолжение следует) ...

Внимание:
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки - бан.
Мат в разделе - бан на три месяца...

Полезные ссылки:
user posted image MSDN Library user posted image FAQ раздела user posted image Поиск по разделу user posted image Как правильно задавать вопросы


Выразить свое отношение к модераторам раздела можно здесь: user posted image Rouse_, user posted image Krid

Модераторы: Rouse_, Krid
  
> ComboBox, и его предыдущее значение
    Есть ли нормальный способ получить предыдущее значение ComboBox'а? Удивился, не найдя такого события (onchange и onselect срабатывают после).
    Сообщение отредактировано: shershen -
      Можно перехватывать на родительском элементе ComboBox`а сообщение WM_COMMAND и в случае, когда HIWORD(wParam) = CBN_SELCHANGE, забирать значение из ComboBox.Text.
      Если родительский элемент — форма, то
      ExpandedWrap disabled
        type
          TForm1 = class(TForm)
            ComboBox1: TComboBox;
          private
            { Private declarations }
            procedure WMCommand(var Msg: TMessage); message WM_COMMAND;
         
        .......
         
        procedure TForm1.WMCommand(var Msg: TMessage);
        begin
          if Msg.WParamHi = CBN_SELCHANGE then
            if Msg.LParam = Integer(ComboBox1.Handle) then
              Caption := 'Previous value is ' + ComboBox1.Text;
          inherited;
        end;


      Либо еще можно написать наследника от TCustomCombo и переопределить его метод CNCommand конкретно для случая сообщения CBN_SELCHANGE.
      Какой способ в вашем понимании «нормальный», сами решайте. Возможно, есть лучше.
        Цитата Amphiluke @
        Либо еще можно написать наследника от TCustomCombo и переопределить его метод CNCommand конкретно для случая сообщения CBN_SELCHANGE

        Либо в рантайме (в FormCreate) перепределить св-во WindowProc конкретного комбобокса
          ExpandedWrap disabled
              TForm1 = class(TForm)
                ComboBox1: TComboBox;
                Label1: TLabel;
                procedure ComboBox1Change(Sender: TObject);
              private
                { Private declarations }
              public
                FComboLast: String;
              end;
             
            var
              Form1: TForm1;
             
            implementation
             
            {$R *.dfm}
             
            procedure TForm1.ComboBox1Change(Sender: TObject);
            begin
              Label1.Caption := FComboLast;
              FComboLast := TComboBox(Sender).Text;
            end;
             
            end.
          Все фотографии-обои Виталия Невзорова одним файлом. 3Гб.
          http://www.almar.su/nevzorov/photo.zip
          Если с вопросами все будут посылать в гугль - откуда в нём возьмутся ответы?
            Демо
            Ну, это слишком тривиально ;)
              Спасибо за ответы. Меня бы устроил вариант товарища Amphiluke, но он, к сожалению, не работает для стиля ComboBox'а csDropDownList - а именно такой стиль я и использую...
                Вопрос еще актуален (для combobox со стилем csDropDownList)... Или по крайней мере, подойдет вариант как избежать срабатывания onchange на клик по тому же самому, уже выбраному, элементу.
                  Цитата shershen @
                  Вопрос еще актуален

                  Чем не подошел вариант Демо? :huh:
                  нечто нейтральное, пока что.
                    Цитата Руслан @
                    Цитата shershen @
                    Вопрос еще актуален

                    Чем не подошел вариант Демо? :huh:

                    Сложная программа, не очень грамотно спроектированная) В итоге куча проблем с этим методом.
                      Цитата shershen @
                      В итоге куча проблем с этим методом.

                      Сгораю от любопытства, хотя бы одна сложность какая? :huh:
                      /*практически в чём она заключается?*/
                      Сообщение отредактировано: Руслан -
                      нечто нейтральное, пока что.
                      1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                      0 пользователей:


                      [ Script Execution time: 0,0999 ]   [ 15 queries used ]   [ Generated: 28.05.17, 01:12 GMT ]