|
Вопрос # 4 663/ вопрос открыт / |
|
Нужно при клике на кнопку Button ,что бы происходила такая операция записывался из ComboBox тот Item который открыт , и записывался он в Memo1.Подскажите пожалуйста как это сделать?
 |
Вопрос задал: Hakera (статус: Посетитель)
Вопрос отправлен: 17 октября 2010, 00:01
Состояние вопроса: открыт, ответов: 2.
|
Ответ #1. Отвечает эксперт: Шичко Игорь
Здравствуйте, Hakera!
Думаю, примерно так (2 варианта):
Фрагмент кода в приложении.
Удачи.
 |
Ответ отправил: Шичко Игорь (статус: 9-ый класс)
Время отправки: 17 октября 2010, 08:32
|
Ответ #2. Отвечает эксперт: min@y™
Всё-таки, проверка не помешает. Гарантия отсутствия Index out of bounds:
procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Clear();
if ComboBox1.ItemIndex <> -1
then Memo1.Lines.Add(ComboBox1.Items[ComboBox1.ItemIndex]);
end;
 |
Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 17 октября 2010, 10:40
|
Мини-форум вопроса
Всего сообщений: 6; последнее сообщение — 20 октября 2010, 12:51; участников в обсуждении: 3.
17 октября 2010, 14:25: Вопрос перемещён из тематического раздела Delphi » Общие вопросы по программированию в раздел Delphi » Работа с компонентами и библиотеками модератором Ерёмин А.А.
|
Толяныч (статус: 4-ый класс), 17 октября 2010, 23:16 [#1]:
> if ComboBox1.ItemIndex <> -1
Наверно, тут можно и
if ComboBox1.ItemIndex > -1
?
|
|
min@y™ (статус: Доктор наук), 18 октября 2010, 08:16 [#2]:
Цитата (Толяныч):
> if ComboBox1.ItemIndex <> -1
Наверно, тут можно и if ComboBox1.ItemIndex > -1 ?
Операция "не равно" выполняется быстрее.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Толяныч (статус: 4-ый класс), 20 октября 2010, 11:25 [#3]:
Я очень уважаю мнение экспертов, но червяк сомнения поднял голову и заставил провести маленький эксперимент :
; if KS > -1 then
0044DA38 833D140C4500FF cmp dword ptr [KS],-$01
0044DA3F 7E0A jle +$0a
; if KS <> -1 then
0044D974 833D140C4500FF cmp dword ptr [KS],-$01
0044D97B 740A jz +$0a
У меня нет оснований считать, что jle b jz работают разное время, хотя переход по выполнению или невыполнению условия действительно выполняется за разное число тактов - для всех процессоров, с которыми я работал на уровне машинных команд было именно так.
Sorry за буквоедство.
|
|
Вадим К (статус: Академик), 20 октября 2010, 11:47 [#4]:
to Толяныч:
в современных процессорах нельзя говорить, что если одна команда исполняется за один такт, а другая за два, то вместе они исполняться за три. Некоторые команды умеют "спариваться" и в результате они выполняются несколько быстрее. Именно по этой причине часто некрасивый на первый взгляд ассемблерный код можем выполняться существенно быстрее, чем "оптимизированный ручками".
То что сравнение+переход спариваются - это я точно знаю. Но о различии между разными видами перехода по условию - не знаю. Если он и есть, то в данном случае выигрыш будет минимальный.
Но здесь есть более глобальная вещь, которую min@y™ не видит. Многие знают, что индекс в Combobox никак не может быть меньше -1. Но представим себе на минутку, что в новой виндовс, "восьмерке" Microsoft решит, что будет ещё и состояние -2 и -3 (ну для какого то спец состояния) или проще - мы воспользумся сторонним компонентом типа Combobox (ListView, ListBox - не важно) и в коде бага, и индекс может быть "сильно отрицательный".
Если мы напишем условие как index > -1, то ничего плохого не должно произойти, а вот если index<>-1 ... и будет скорее всего исключение, а может бага потянется дальше по коду.
Но если подойти ещё глубже, то оптимальным условием будет index >= 0, так как оно лучше оптимизируется в коде, Толяныч - можете проверить и убедиться.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Толяныч (статус: 4-ый класс), 20 октября 2010, 12:05 [#5]:
>Но если подойти ещё глубже, то оптимальным условием будет index >= 0, так как оно лучше оптимизируется в коде, Толяныч - >можете проверить и убедиться.
Кажется, куда уж оптимальнее - сравнить и перейти. Хотя в новейших 64-разрядных може и научились за один такт? Сейчас во времена многоядерных процессоров я до уровня машинных команд не опускаюсь, мой опыт этого уровня основывается на PDP-11,i286 и подкармливающих меня иногда AVR-AtMega от родного Atmel.
"Ваш приказ, пан атаман, выполнен еще до приказа: они еле вылезли из подвалов еще в монастыре!" (С) Свадьба в Малиновке.
Это - предельный случай оптимизации 
Sorry за немножко оффтоп.
Не научился правильно оформлять квотинг.
|
|
min@y™ (статус: Доктор наук), 20 октября 2010, 12:51 [#6]:
Во, блин, я тролль! Такую полемику заварил...
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|