| 
| 
 | Вопрос # 4 835/ вопрос решён / | 
 |  Здравствуйте! Уважаемые эксперты! это опять я.
 в StringGrid нужно проверить содержимое ячейки и выполнить действие(изменение шрифта и цвета ячейки).
 выполняю проверку (код описан).
 
 собственно вопрос, можно ли заменить это огромное перечисление
 каким-нибудь набором? пробовал Set of компилятор выдаёт ошибку про несовместимость данных.
 
|  |   Вопрос задал: Ham_ele_on (статус: Посетитель)Вопрос отправлен: 18 декабря 2010, 19:51
 Состояние вопроса: решён, ответов: 1.
 |  Ответ #1. Отвечает эксперт: Вадим К Здравствуйте, Ham_ele_on!Да, можно! И что интересно, оно будет даже несколько быстрее вашего кода, заметно легче модифицироваться, иметь пару плюшек и выглядеть красивее.
 Для начала объявим себе где то глобально или как свойство формы TStringList, который будет хранить слова, которые нужно будет сравнивать.
 
 private
  sl:TStringList;В конструкторе формы (FormCreate) создадим и заполним его 
 sl := TStringList.create;
sl.add('Привет');
sl.add('пока');
sl.add('Да');
sl.add('нет');
sl.add('возможно');
// отсортируем его.
sl.sorted := true;
// это очень хорошо, так как теперь поиск будет не ленейный, а логарифмический.
// к примеру, на 1024 элемента, при линейном поиске нужно сделать в среднем 512 шагов, а в линейном - 10теперь при удалении формы (FormDestroy)добавим освобождение ресурсов
 sl.free; А теперь самое интересное. Условие для сравнения.
 
 if (sl.find(SG.Cells[ACol,ARow]) <> -1) then begin
// строка найдена.
end; Преимущества - теперь массив строк можно менять на лету - все будет работать.
 Преимущество второе, скрытое. у TStringList есть свойство object, куда можно добавлять свой объект. Можно создать свои объекты, которые хранят параметры ячейки для данного слова и получать все что угодно:) Но это уже для домашнего задания.
 
|  | Ответ отправил: Вадим К (статус: Академик)Время отправки: 18 декабря 2010, 21:25
 Оценка за ответ: 5
 |  
 Мини-форум вопросаВсего сообщений: 58; последнее сообщение — 24 февраля 2011, 11:23; участников в обсуждении: 3. Страницы: [1] [2] [3] [Следующая »]  
|   | min@y™ (статус: Доктор наук), 19 декабря 2010, 07:17 [#1]:Не find(), а IndexOf(). В остальном согласен. Могу от себя только добавить, что хранение инфы в TStringGrid сразу выдаёт новичка.
 Инфу надо хранить отдельно и отрисовывать только по мере необходимости в TDrawGrid.
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | Ham_ele_on (статус: Посетитель), 19 декабря 2010, 08:21 [#2]:эта таблица которая выдаёт набор данных, с последующим переносом в Excel, некоторые слова должны быть выделены, т.к. они определяют группы товаров. Ну , а то, что я новичок, я и не скрываю
  
 Спасибо большое, очень помогли.
 
 P\S. объясните плиз (sl.find(SG.Cells[ACol,ARow]) <> -1) , почему здесь -1??
 |  19 декабря 2010, 08:23: Статус вопроса изменён на решённый (изменил автор вопроса — Ham_ele_on) 
|   | min@y™ (статус: Доктор наук), 19 декабря 2010, 10:01 [#3]:Эта функция (indexof) врозвращает индекс найденного элемента или -1, если элемент не найден. Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | Вадим К (статус: Академик), 19 декабря 2010, 20:55 [#4]:to min@y™: там как раз нужно find - список то сортированный.  Более того, он только для сортированных списков. Indexof проверяет тип списка, и если он сортированный, то может вызвать find.
 Галочка "подтверждения прочтения" - вселенское зло. |  
|   | min@y™ (статус: Доктор наук), 20 декабря 2010, 08:25 [#5]: Цитата (Вадим К): там как раз нужно find - список то сортированный. Более того, он только для сортированных списков. Indexof проверяет тип списка, и если он сортированный, то может вызвать find.  Да я и не возражаю. Тогда исправь свой ответ: в методе Find() два параметра.
 
 function Find(const S: string; var Index: Integer): Boolean; virtual;Именно поэтому я подумал, что ты имел в виду IndexOf(). Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  20 декабря 2010, 10:03: Вопрос перемещён из тематического раздела Delphi » Работа с файловой системой в раздел Delphi » Работа с компонентами и библиотеками модератором Ерёмин А.А. 
|   | Вадим К (статус: Академик), 20 декабря 2010, 10:44 [#6]:смотрел в своих сорцах. по моему, это определение менялось. А сейчас оно уже такое. Нет проблем - пишем так 
 var k:integer;
if (sl.find(SG.Cells[ACol,ARow], k)) then begin
// строка найдена. k - ее позиция
end; Галочка "подтверждения прочтения" - вселенское зло. |  
|   | Ham_ele_on (статус: Посетитель), 25 декабря 2010, 22:07 [#7]:<quote> у TStringList есть свойство object, куда можно добавлять свой объект.</quote> а где про это прочитать, в и-нете полазил, все пишут про это свойство, а как с ним работать никто не говорит.
 |  
|   | min@y™ (статус: Доктор наук), 26 декабря 2010, 09:38 [#8]: Цитата (Ham_ele_on): а где про это прочитать, в и-нете полазил, все пишут про это свойство, а как с ним работать никто не говорит.  А что тут непонятно-то? Спрашивай, мы объясним. Я регулярно привязываю объекты к таким свойствам, как:
 
 
 TStrings.Objects;
TListItem.Data;
TTreeNode.Data.
 Очень удобно.
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
 |  
|   | Ham_ele_on (статус: Посетитель), 6 января 2011, 17:22 [#9]:наверное нужно начать с того, Что такое "Objects"? является ли record объектом?
 
 ещё такой вопрос(если можно то я не буду оформлять новый вопрос). как сделать, что бы кнопка или пункт меню, были неактивными, до тех пор, пока не произойдёт изменение на форме.пример, кнопка сохранения в программах.?
 |  
|   | Вадим К (статус: Академик), 6 января 2011, 17:26 [#10]:>>наверное нужно начать с того, Что такое "Objects"?\ просто свойство, не более.
 >>является ли record объектом?
 вообще то нет. Но в некоторых случаях можно считать, что да.
 >>пока не произойдёт изменение на форме.пример, кнопка сохранения в программах
 а в чем проблема - просто делаем вначале button.enable := false;
 а потом. когда нужно button.enable := true;
 Галочка "подтверждения прочтения" - вселенское зло. |  
|   | Ham_ele_on (статус: Посетитель), 6 января 2011, 17:41 [#11]:а как отследить изменения??? компонентов то много или для каждого компонента писать??? |  
|   | Вадим К (статус: Академик), 6 января 2011, 17:44 [#12]:а их не нужно отслеживать. если это кнопка сохранения, то кто напишет код сохранения? вот рядом и приписываем блокировку. а в memo.onchange делаем разблокировку. и всех то делов. Галочка "подтверждения прочтения" - вселенское зло. |  
|   | Ham_ele_on (статус: Посетитель), 16 февраля 2011, 22:33 [#13]:доброго времени суток. добрался я до "вкусненького" и опять в тупике.
 в StringList есть возможность загрузки из файла(это я освоил),
 но вот вопрос, а можно ли создать список списков, загружаемый из файла и как должен выглядеть файл?
 пример: ABC=1,2,3,5,4. dce=0,9,8,7,6 и т.д.
 
 если я верно мыслю, то нужно создать дополнительные StringList
 и пркрепить их к основному по средством AddObjects.
 помогите разобраться пожалуйста.
 |  
|   | Вадим К (статус: Академик), 16 февраля 2011, 22:45 [#14]:создать то никто не мешает, но загружать придется вручную. Галочка "подтверждения прочтения" - вселенское зло. |  
|   | Ham_ele_on (статус: Посетитель), 16 февраля 2011, 23:06 [#15]:ну это я понимаю, можно немного подробнее?? в целом меня устроят и отдельные StringList но как их из одного файла прочитать?? как файл должен выглядеть?
 и ещё вопрос возник, можно ли влиять на процесс сортировки, а то получается, что 8 стоит после 12.
 |  
|   | Вадим К (статус: Академик), 17 февраля 2011, 00:03 [#16]:как должен выглядеть файл? а это как Вам в голову взбредет. Может сейчас подбежит min@y™ и посоветует xml (он тут может быть уместным). 
 Почему 8 стоит после 12? потому что StringList не знает, что у Вас там цифры. Он сортирует строки (неожиданно, правда?
  ) А поэтому сортировка логична.
 
 В принципе StringList можно обучить "правильной сортировке" - нужно только определить свою функцию сравнения элементов, а дальше он сам уже.
 Галочка "подтверждения прочтения" - вселенское зло. |  
|   | Ham_ele_on (статус: Посетитель), 17 февраля 2011, 07:53 [#17]:файл проще, наверное, текстовый. вопрос был "можно ли влиять на процесс сортировки?".если можно то как?
 |  
|   | min@y™ (статус: Доктор наук), 17 февраля 2011, 08:18 [#18]: Цитата (Ham_ele_on): вопрос был "можно ли влиять на процесс сортировки?".если можно то как?  Да, можно. У TStringList есть метод CustomSort. Вот его-то и надо юзать.
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | Ham_ele_on (статус: Посетитель), 17 февраля 2011, 09:46 [#19]:>У TStringList есть метод CustomSort. много чего прочитал но чёт так и не понял, как это работает.
 можете своими словами или примером?
 |  
|   | min@y™ (статус: Доктор наук), 17 февраля 2011, 10:02 [#20]: Цитата (Ham_ele_on): много чего прочитал но чёт так и не понял, как это работает. можете своими словами или примером?  Неужели трудно погуглить? Вот тебе БОЛЬШАЯ ССЫЛКА.
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  Страницы: [1] [2] [3] [Следующая »]  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |