Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 4 663

/ вопрос открыт /

Нужно при клике на кнопку Button ,что бы происходила такая операция записывался из ComboBox тот Item который открыт , и записывался он в Memo1.Подскажите пожалуйста как это сделать?

Приложение:
  1.  


Hakera Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Hakera (статус: Посетитель)
Вопрос отправлен: 17 октября 2010, 00:01
Состояние вопроса: открыт, ответов: 2.

Ответ #1. Отвечает эксперт: Шичко Игорь

Здравствуйте, Hakera!
Думаю, примерно так (2 варианта):
Фрагмент кода в приложении.
Удачи.

Приложение:
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. begin
  3. Memo1.Clear;
  4.  
  5.  
  6. end;
  7.  
  8.  


Ответ отправил: Шичко Игорь (статус: 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™

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™

min@y™ (статус: Доктор наук), 20 октября 2010, 12:51 [#6]:

Во, блин, я тролль! Такую полемику заварил...
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:56
Выполнено за 0.03 сек.