Здравствуйте! Был такой вопрос: ----------------- Вопрос № 344. Сказите плиз, как в списке TListBox узнать сколько все тама элементов внесли?... на которую я ответил так: ----------------- ListBox.Count Ответил и Отвечает Idle Sign ----------------- Доброе время суток, Ландграф Павел! ===== Pro bono publico, no bloody panico! ===== MEMOAK правда немного лажанулся... В торопях, наверное. Короче, эксперты совершенно правы: TListBox.Items.Count. ПиС: Ты себе что справку не установил? Зря. Смешно! Особенно вот этот: ----------------- ПиС: Ты себе что справку не установил? Зря. Установить мало, надо и прочитать. У ListBoxa есть такой property Count. В отличие от ListBox.Items.Count, ListBox.Count не Read-Only!!!!!!! Правда ListBox.Count наполовины ссылается на ListBox.Items.Count, но это уже другой
вопрос. Я не отрицаю ответы других, но верно и мой ответ. Можно и ListBox.Items.Count и ListBox.Count. Мне больше нравится ListBox.Count, так как он дает возможность оперировать Count-ом. P.S. Взамен моральный ущерб, я требую от Idle Sign прочитать Help! :)
Добрый день, MEMOAK! ===== Pro bono publico, no bloody panico! ===== Ну, раз уж ты вывесил этот вопрос на всеобщее обозрение, то... Приношу свои глубочайшие извинения, если задел тебя за живое, хотя, совершенно не обязан Поясню почему. Действительно, при работе с VCL можно обращаться к этому свойству (маленький секрет приоткрою: я изначально, ответил также как и ты, потом прочитал твой ответ и задумался). Задумался я над тем что есть такая вешь как CLX, которая становится все актуальнее и актуальнее из года в год. Не зря же Borland внедрил в Delphi пресловутую кроссплатформенность. Я посчитал нужным повернуть читателя "лицом к будущему" :) и не позабыть о старом-добром прошлом, в котором помниться и в VCL не было такого свойства. Кстати, ПиС был написан не в твой адрес, а в адрес читателя... ПиС: пойду запасусь чайком
и под Motorhead проштудирую хэлп. Так, на всякий случай, для повышения жизненного тонуса. Ответ отправлен: 17.12.2002, 17:34 Отправитель: Idle Sign Отвечает Артём Шегеда
Приветствую Вас, MEMOAK!
Прежде чем возмущаться, советую посмотреть в исходники модулей VCL! Там даже намёка на TListBox.Count не существует. А что касается обсуждения ответов экспертов, так Вам на форум
Приложение: Ответ отправлен: 17.12.2002, 11:28 Отправитель: Артём Шегеда Отвечает baldr
Доброе время суток, MEMOAK! Странно... Может, у меня какой другой TListBox? Но в справке я не обнаружил у него такого свойства, как Count... :(
Ответ отправлен: 17.12.2002, 00:15 Отправитель: baldr Отвечает Jadd
Здравствуйте, MEMOAK! Это все, конечно же, флейм. Может в новых версиях и появилось такое свойство, но в версии 5 такого нет(я проверил это в BCB 5, а там, как известно компоненты паскалевские) и я не думаю, что что-то изменилось с тех пор. Потом, какая логика в не read only поле с таким назначением? Оперировать Count'ом нет смысла, т.к. это поле заполняется методами самого TListBoxa. Не вижу смысла писать что-то экстра. Так баги и рождаются. Так что, это скорее ошибка (я не спорю. исходя из глючности этих продуктов). Ответ отправлен: 17.12.2002, 03:10 Отправитель: Jadd
Вопрос № 362
Здравствуйте ув. Эксперты!!! Я сделал программу типа телефонной книги в ValueListEditor1 под Key-Имя, под Values-телефон. Но при поиске по телефону(byTel) выдаёт сообщение: List index out of bounds(-2) Заранее Big Thank’s!!!
Доброе время суток, elvis! 1) возможность/необходимость завершения работы приложения лучше обрабатывать в событии OnCloseQuery 2) FindRow ищет по ключу, чтобы искать по значению можно изловчиться так (с расчетом на то, что ищем только по второй колонке aka телефон): for int:=0 to ValueListEditor1.RowCount-1 do begin if Edit3.Text = ValueListEditor1.Cells[2, i] then ShowMessage(ValueListEditor1.Keys[int]); end; Ответ отправлен: 17.12.2002, 17:34 Отправитель: Idle Sign Отвечает Jadd
Добрый день, elvis! Вероятнее всего, что нужный элемент не найден по какой-то причине(читай внимательно про метод поиска в этом классе) и передает в int значение выходит за диапазон значений индексов в этом ValueListEditor(видимо это класс из версий Дельфи 6+, я слез с дельфей после 5-й версии). Сделай проверку на значение int. Читай внимательно в хэлпе про этот класс и методы доступа к элементам класса. Ответ отправлен: 17.12.2002, 03:00 Отправитель: Jadd
Вопрос № 363
Здравствуйте ув. Эксперты!!! Помогите пожалуйста программа не хочет работать, Delphi выдаёт ‘Incompitable Tipes: ‘string’ and ‘PAnsiChar’’
Доброе время суток, Elvis! Занешь, у меня такое подозрение, что если заменить string на PChar или PAnsiChar, то твоя программа откомпилируется! Ответ отправлен: 17.12.2002, 15:15 Отправитель: vitya Отвечает Idle Sign
Добрый день, Elvis! ===== Pro bono publico, no bloody panico! ===== WinExec требует pchar, а не строку. Тебе нужно преобразовать строку так: pchar(text). Вообще все виндовые функции обожают работать с pchar, да и не только виндовые... Ответ отправлен: 17.12.2002, 17:35 Отправитель: Idle Sign Отвечает Melkor
Здравствуйте, Elvis! 1 - Попробуй преобразование типов, напр Text := String(RegIni.ReadString('Razd', '1', 'Default') или переключи опции компилятора в Project Options. 2 - если не сработает, см. пример.
Приложение: Ответ отправлен: 19.12.2002, 03:03 Отправитель: Melkor Отвечает Jadd
Добрый день, Elvis! Судя по нотации, PAnsiChar - указатель на строку символов, которая представляется в памяти как массив типа Char(в данном случае AnsiChar). Стало быть, дело сводится к приведению типов. Если явного приведения не получается, сделай неявное или ищи функции, которые конвертируют из одного типа в другой. Такие точно есть. Просто однозначно. Ищите. Ответ отправлен: 17.12.2002, 02:49 Отправитель: Jadd Отвечает toshka
Приветствую Вас, Elvis! Почитай хелп к WinExec. Там первый параметр - PChar. Поэтому писать надо так: WinExec(PChar(text),Sw_Normal);
Ответ отправлен: 17.12.2002, 09:36 Отправитель: toshka
Вопрос № 364
Всем здрасте... В общем, опять я с БД. Есть таблица с memo-полем и картинкой. Оба они, естественно, BLOB-поля. Я работаю с таблицей исключительно через несколько TQuery и для вывода из специальных визуальных компонентов для работы с БД использую только TDBGrid. И теперь вопрос. Как с помощью запроса получить из базы и вывести в стандартный TImage эту картинку? Если делать через API BDE, то, в принципе, можно получить эту картинку в виде просто набора байт. Скорее всего, как-то еще можно - попроще. Но как? И еще вопрос. При изменении такой записи (с Memo-полем и картинкой), как их (эти поля) изменить? А как добавить такую новую запись? Где и каким образом нужно будет указать ссылки на текст и картинку?
Открой справку по VCL на статье "TStream.CopyFrom" и посмотри пример. Там идёт работа с потоками (Streams). Чтобы сохранить картинку в BLOB, создай MemoryStream, сохрани в него картинку, создай BLOBStream, примени для него CopyFrom. Если же картинка находится в файле, то создай FileStream и скопируй из него в BLOBStream. А твоя проблема с BLOB в запросах мне не понятна - там всё работает средствами VCL также, как и в таблицах. Ответ отправлен: 17.12.2002, 12:04 Отправитель: Артём Шегеда Отвечает Jadd
Здравствуйте, baldr! 1)Есть TDBImage и его использование, на мой взгляд, целесообразно в твоей случае. Можно использовать гриды с отображением картинок в ячейках, таких много. Соответственно загружать и изменять картинки там будет легче легкого. 2)Если п.1 не подходит, юзай TStream для загрузки BLOB'ов в базу. Есть такие методы, как SaveToStream и LoadFromStream. Так что тут простор широк. Дерзай. Ответ отправлен: 17.12.2002, 02:45 Отправитель: Jadd Отвечает toshka
Доброе время суток, baldr! Во первых: зачем использовать TImage, если есть TDBImage. Во вторых: для чтения и записи картинки в BLOB-поле у этого поля (объект TBlobField) существуют методы LoadFromFile и LoadFromStream (см. пример.)
Приложение: Ответ отправлен: 17.12.2002, 10:00 Отправитель: toshka
Вопрос № 365
Приветствую вас эксперты. Last: Такое дело, необходимо из программы запустить свойства "Мой компьютер", закладка "Оборудование"(WinXP) New: Так что, неужели нельзя, не поверю. Скажите хоть где можно посмотреть, только просьба без ответов типа, рамблер......
Приветствую Вас, Iv! Не знаю как в ХР, но в win98 можно применить такую команду: control.exe sysdm.cpl,,1 иными словами, запускается апплет "Свойства: система", закладка 1 (закладки начинаются с 0). В ХР наверно тоже будет работать, только подобрать номер закладки. Ответ отправлен: 18.12.2002, 07:40 Отправитель: Vadim Отвечает Артём Шегеда
Здравствуйте, Iv!
Не ожидал я от наших экспертов такого... Не ответил лишь потому, что вопрос очень прост - наши должны были справиться.
Чтобы открыть свойства "Моего компьютера" нужно запустить приложение C:\windows\control.exe с параметром C:\windows\system\sysdm.cpl. Надеюсь, запускать приложение вопрошающий умеет? А какие примбамбасы имелись ввиду? Ответ отправлен: 18.12.2002, 12:06 Отправитель: Артём Шегеда
Вопрос № 366
Здраствуйте уважаемые эксперты! вот незадача немогу решить проблему..... Необходимо получить список запущенных процессов затем получить "сомандные строки" с которых они были запущенны(имя и путь к исполнимому файлу) Затем получить дескрипторы всех окон каждого процесса? пытаясь решить эту задачу получил список хенделов окон и путь к модулю окна ,но у программ написанных на VB млдуль окна находится в папке windows а не там от кель запущенна программа :(!!! Я совсем запутался и уже не знаю с какой стороны подходить к етой задачи, то ли искать окна а от них процессы, толи найти процесс а потом все остальное :-/ ??? вобщем помогите хто чем может конечно лучще кусок кода ;-). Зарание благодарен! З.Ы. и ограменное спасибо экспертам за ответы на предыдущии вопросы!
Добрый день, Nikolay! Может быть тебе это поможет? См. приложение. Кстати, окна могут запускаться не только из экзешников, но и из DLL, а VB свои библиотеки стандартных функций запихивает именно в %WINDIR%SYSTEM.
Приложение: Ответ отправлен: 19.12.2002, 12:50 Отправитель: Vadim Отвечает Idle Sign
Доброе время суток, Nikolay! ===== Pro bono publico, no bloody panico! ===== Могу теорией. Принимай. Про ВБ все логично - приложения, написанные на нем не являются самостоятельными исполняемыми файлами, а лишь набором команд (утрирую, конечно, но что поделать), обращающимся к системным библиотекам. На счет того, что вначале: начинать, конечно, нужно с головы - с процесса, а потом искать принадлежащие ему окна (на сколько я понимаю именно так действует WinSight32). Ответ отправлен: 18.12.2002, 18:21 Отправитель: Idle Sign Отвечает toshka
Доброе время суток, Nikolay! Для сканирования списка процессов нужно использовать методы ToolHelp (модуль TlHelp32.pas) Получаешь список все процессов, затем сканируешь все окна, для кажного окна получаешь ID процесса и сопоставляешь. Для работы примера создай TreeView на форме. (см. пример)
Приложение: Ответ отправлен: 19.12.2002, 10:05 Отправитель: toshka
Форма отправки вопроса
Внимание!
Форма может работать некорректно в почтовых программах "Microsoft Outlook"
и "Microsoft Outlook Express". В программе The Bat!
подобные формы не работают вообще!
После нажатия на кнопку "Отправить", будет открыто второе окно. Заметьте,
что в некоторых браузерах могут стоять запреты на открытие других
окон, а также "чрезмерное" кэширование данных,
при этом факт отправки Вашего вопроса стоит под сомнением.
Мы рекомендуем открывать рассылку в программе Internet
Explorer 5.0+ или отправлять вопросы с сайта по адресу:
http://rusfaq.ru/cgi-bin/Message.cgi.