Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Delphi


Информационный Канал Subscribe.Ru


RusFAQ.ru: Программирование на C++ Builder / Delphi

Выпуск № 183
от 28.06.2003, 13:50

Администратор:
Имя: Калашников О.А.
URL: Информационный ресурс
ICQ: 68951340
Россия, Москва
О рассылке:
Задано вопросов: 760
Отправлено ответов: 1384
Активность: 182.1 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе][Обсудить на форуме]


 Список экспертов, ответы которых опубликованы в данном выпуске

Артём Шегеда
Статус: Профессиональный
Общий рейтинг: 116.99
URL: Пристанище неодинокого программиста
[Подробней >>]
ART_43
Статус: Начальный
Общий рейтинг: 117.1
[Подробней >>]
Bob Johnson
Статус: Профессиональный
Общий рейтинг: 151.81
URL: Программирование
[Подробней >>]
 
Pin
Статус: Опытный
Общий рейтинг: 115.68
URL: My HOMEPAGE
[Подробней >>]
Gefest
Статус: Начальный
Общий рейтинг: 111.76
[Подробней >>]
vitya
Статус: Профессиональный
Общий рейтинг: 108.11
[Подробней >>]
 
URiS
Статус: Начальный
Общий рейтинг: 135.29
[Подробней >>]
Дима Мусиенко
Статус: Опытный
Общий рейтинг: 109.17
[Подробней >>]
Vdr
Статус: Опытный
Общий рейтинг: 114.75
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 749. Здравствуйте, уважаемые эксперты. У меня проблема с написанием компонентов для Delphi 6. Есть два ко... (ответов: 2)
Вопрос № 750. Hi, это снова я. Еще один вопрос: как в своих компонентах вызывать свои же формы. У меня они почему-... (ответов: 1)
Вопрос № 751. Добрый день! Вопрос у меня такой: Допустим есть у меня файл. А мне не нужны его последние 10 байт. К... (ответов: 5)
Вопрос № 752. Здравствуйте уважаемые эксперты! Расскажите, пожалуйста, как в Delphi программно поместить свою икон... (ответов: 3)
Вопрос № 753. Эксперты, к Вам взываю!!! ;) Не знает ли кто-нибудь, как можно получить из-под Win температуру проце... (ответов: 2)
Вопрос № 754. Ув. эксперты, есть некая структура типа record. В ней есть несколько полей. Необходимо узнать смещен... (ответов: 3)
Вопрос № 755. Здравствуйте, эксперты. 1) Помогите разобраться с ошибкой. Пытаюсь из текстового файла File.txt с на... (ответов: 1)
Вопрос № 756. Здравствуйте, многоуважаемые эксперты, еще раз !!! 1) Есть база по сотрудникам организации. А как мо... (ответов: 5)

Вопросов: 8, ответов: 22


 Вопрос № 749

Здравствуйте, уважаемые эксперты.
У меня проблема с написанием компонентов для Delphi 6. Есть два компонента (см. приложение). Я устанавливаю на форму эти компоненты и с помощью свойства FMain привязываю компонент TDicView к компоненту TMain. После этого все работает. Но если удалить с формы компонент TMain, то Delphi выдает ошибку в какой-то библиотеке RTL60.BPL
Даже доходит до того, что все виснет. Я так понимаю, что в компоненте TDicView где-то остается ссылка на удаленный компонент, но как это убрать я не знаю. Что можете посоветовать?


Приложение:


Вопрос отправлен: 24.06.2003, 07:44
Отправитель: Eugene

[Следующий вопрос >>] [Список вопросов]

Отвечает Артём Шегеда

Доброе время суток, Eugene!

Эта ситуация достаточно подробна рассмотрена в документации (раздел TComponent.Notification). Проще говоря, твой компонент будет уведомлен о каком-либо событии, связанном с другим компонентом, если твой компонент предварительно об этом попросит. Для этого используются метод FreeNotification и переопределяется метод Notification. Пример можешь взять в исходниках VCL (все манипуляции с FPopupMenu класса TControl).
Такие действия ты должен делать всякий раз, когда связываешь два компонента.


Приложение:

Ответ отправлен: 24.06.2003, 15:47
Отправитель: Артём Шегеда


Отвечает ART_43

Здравствуйте, Eugene!
Попробуй убрать "if main <> nil then"

Ответ отправлен: 24.06.2003, 10:18
Отправитель: ART_43


 Вопрос № 750

Hi, это снова я.
Еще один вопрос: как в своих компонентах вызывать свои же формы. У меня они почему-то равны nil.



Вопрос отправлен: 24.06.2003, 08:59
Отправитель: Eugene

[Следующий вопрос >>] [Список вопросов]

Отвечает Bob Johnson

Доброе время суток, Eugene!
1. Подключить unit, в котором описан класс формы.
2. Создать переменную данного класса.
3. Сделать с ней все, что нужно.
4. Удалить переменную.
...

Uses UMyForm;
var
f : TMyForm;
...
begin
f := TMyForm.Create (self);
...
f.ShowModal ();
f.Free ();
end;

* EMan1.4: ---===*** Have your friend the way you would like him to have you ***===---


Ответ отправлен: 24.06.2003, 22:22
Отправитель: Bob Johnson


 Вопрос № 751

Добрый день! Вопрос у меня такой:
Допустим есть у меня файл. А мне не нужны его последние 10 байт. Как можно урезать размер этого файла?



Вопрос отправлен: 24.06.2003, 13:36
Отправитель: Silver

[Следующий вопрос >>] [Список вопросов]

Отвечает Pin

Приветствую Вас, Silver!
Создайте новый временный файл, перенесите туда нужные байты, а затем замените им страрый. Функций, позволяющих это сделать напрямую, насколько мне известно, нет!

Ответ отправлен: 24.06.2003, 15:57
Отправитель: Pin


Отвечает Gefest

Добрый день, Silver!
Можно сделать так:
var
f: file of byte;
str: string;
i: integer;
begin
AssignFile(f, 'MyFile.exe');
reset(f);
Seek(f, FileSize(f)-10);
for i:=1 to 10 do
Read(f, str[i]);
Seek(f, 0);
Truncate(f); // Отсекает все что после указателя в файле
for i:=1 to 10 do
Write(f, str[i]);
Close(F);
end;
Еще можно определит f: file; тогда придется описывать динамическую переменную. Получится скорость выше, но это менее интересно.
Больше вроде никак нельзя.

Ответ отправлен: 24.06.2003, 15:26
Отправитель: Gefest


Отвечает vitya

Приветствую Вас, Silver!
Я не знаю под какую ось вы это делате.
Под Виндовс это делается так:
::SetFilePointer()... на то место где должен быть конец файла
::SetEndOfFile()... этим перемещаем маркер конца файла в данную точку.

Ответ отправлен: 24.06.2003, 14:03
Отправитель: vitya


Отвечает URiS

Приветствую Вас, Silver!
Интересный вопрос.
Решения:
1) Если они тебе не нужны, не используй их! :8)
2) Изучай FAT32, затем уменьшишь размер файла на 10 байт напрямую.
3) "Урезать" всё равно не получится.
4) Можно скопировать size-10 байт файла F1 в файл F2. Затем удаляешь F1 и переименовываешь F1 в F2. В итоге у тебя прежний файл без последних 10 байт.

*EMan1.4 © Bob Johnson | Expert: URiS (newff.narod.ru)


Ответ отправлен: 24.06.2003, 20:35
Отправитель: URiS


Отвечает Bob Johnson

Добрый день, Silver!
Можно вначале установить указатель на 10-й байт с конца (SetFilePointer и FILE_END), прочитать из него эти самые 10 байт и перезаписать его.

* EMan1.4: ---===*** Have your friend the way you would like him to have you ***===---


Ответ отправлен: 24.06.2003, 22:22
Отправитель: Bob Johnson


 Вопрос № 752

Здравствуйте уважаемые эксперты!
Расскажите, пожалуйста, как в Delphi программно поместить свою иконку в SystemTray, и создать там для нее меню.
Заранее благодарен.



Вопрос отправлен: 24.06.2003, 15:47
Отправитель: vopros (more-0@rambler.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает ART_43

Приветствую Вас, vopros!
http://sources.codenet.ru/files/delphicp/faq/trayfaq.rar (5k)

Ответ отправлен: 24.06.2003, 16:30
Отправитель: ART_43


Отвечает URiS

Здравствуйте, Vopros!
Есть такой модуль - TRAYICON.PAS. Через него это и делается.
У меня он есть. Если тебя это устраивает, то обращайся: urisff@inbox.ru
Обязательно вышлю.

*EMan1.4 © Bob Johnson | Expert: URiS (newff.narod.ru)


Ответ отправлен: 25.06.2003, 13:34
Отправитель: URiS


Отвечает Bob Johnson

Добрый день, vopros!
Для этого надо использовать API функцию Shell_NotifyIcon (NIM_ADD, ...). Более подробно о том, как заполнять структуру и получать уведомления о действии пользователя см. в Win32 Developer's reference (есть в помощи от Delphi) или в MSDN. Найти раздел можно по функции.
Кстати, System Tray - неправильное название. Правильно будет Taskbar Notification Area!

* EMan1.4: ---===*** Have your friend the way you would like him to have you ***===---


Ответ отправлен: 24.06.2003, 22:22
Отправитель: Bob Johnson


 Вопрос № 753

Эксперты, к Вам взываю!!! ;)
Не знает ли кто-нибудь, как можно получить из-под Win
температуру процессора? Датчик у меня стоит. BIOS отображает температуру проца, матери и скорость кулера в RPM.
Спасибо!


Приложение:


Вопрос отправлен: 25.06.2003, 03:47
Отправитель: =FeanaR=

[Следующий вопрос >>] [Список вопросов]

Отвечает URiS

Привет, =FeanaR=! :)
Как делишки? Проблемы с охлаждением?
Сделать универсальную(работающую на всех компьютерах) программу всё равно не получится. Я так понимаю, тебе это только для себя.
1. Обработка(получение/реакция) температуры - это задача системной платы. К современным СП прилагаются специальные программы для слежения за температурой, а также для разгона прямо из под Windows(R).
Можно попытаться найти такую программу для своей системной платы на сайте её производителя.
2. Есть ещё один выход. Недавно скачал статью Tirgan'а о работе с портами. Там было что-то вроде термометра и как с ним работать через порт:
http://kalaidjian.narod.ru/proekt.rar

*EMan1.4 © Bob Johnson | Expert: URiS (newff.narod.ru)


Ответ отправлен: 25.06.2003, 13:34
Отправитель: URiS


Отвечает Bob Johnson

Здравствуйте, =FeanaR=!
Запустить специальную программу, которая это показывает.
Или тебе надо внутри своей программы? Ну тогда ищи описание, как программировать микросхему контроллера PC Health на твоей плате.

* EMan1.4: ---===*** Have your friend the way you would like him to have you ***===---


Ответ отправлен: 26.06.2003, 17:38
Отправитель: Bob Johnson


 Вопрос № 754

Ув. эксперты, есть некая структура типа record. В ней есть несколько полей. Необходимо узнать смещение каждого из полей относительно начала структуры и представить его в виде integer. При это нельзя обьявлять экземпляр структуры в виде var-переменной, а необходимо ссылаться только на описание структуры. Нельзя также просчитывать смещение вручную. Delphi5. Спасибо.



Вопрос отправлен: 25.06.2003, 05:07
Отправитель: s17 (s17@mail.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает URiS

Приветствую Вас, S17!
Может тогда просто повеситься? :)

*EMan1.4 © Bob Johnson | Expert: URiS (newff.narod.ru)


Ответ отправлен: 25.06.2003, 13:34
Отправитель: URiS


Отвечает Дима Мусиенко

Добрый день, s17!
Страноватый вопрос.
Вообще рекомендую поиграться с отладчиком, объяви экземпляр записи, узнай её адрес и посмотри по-этому адресу дамп памяти. Или что тебе мешает программно вычислить адреса полей записи.
< Нельзя также просчитывать смещение вручную
Это как понять, вручную. (в уме или программно)
Не знаю, как Дельфи располагает в памяти записи. Но в C++, по-моему, размещение линейное, т.е.
r = record
a: integer; адрес = адрес r (может быть я ошибаюсь)
b: byte; адрес = адрес r + 4
end;

Приложение:

Ответ отправлен: 26.06.2003, 10:37
Отправитель: Дима Мусиенко


Отвечает Bob Johnson

Доброе время суток, s17!

* EMan1.4: ---===*** Have your friend the way you would like him to have you ***===---


Ответ отправлен: 26.06.2003, 17:37
Отправитель: Bob Johnson


 Вопрос № 755

Здравствуйте, эксперты.
1) Помогите разобраться с ошибкой. Пытаюсь из
текстового файла File.txt с названиями городов
(примерно 200 городов) занести эти названия в
базу данных, но выдается ошибка "Key Violation"
и все тут (см. приложение).
2) Вот начинаю изучать SQL, но проблема в том,
что моя книга посвящена только TTable, а про
ТQuery упоминается только иногда. Я хотел только
узнать - ТQuery используется как и TTable по
"одиночке" или же совместно ???
Помогите ПОЖАЛЙСТА, ну о-о-очень нужно! Всем
заранее спасибо. С уважением SATAN aka NAPALM.


Приложение:


Вопрос отправлен: 25.06.2003, 13:19
Отправитель: SATAN aka NAPALM

[Следующий вопрос >>] [Список вопросов]

Отвечает Bob Johnson

Доброе время суток, SATAN aka NAPALM!
1. Эта ошибка может означать попытку занесения недопустимого значения в ключевое поле таблицы или что-то похожее. Я всегда пользовался SQL-вариантом, см. ниже.
2. TQuery используется вместо TTable. Трудности могут возникнуть только при попытке изменения записей или добавления новых, если ты делаешь это обычным DBGrid. А вообще с TQuery надо работать так:
q.SQL.Text = 'select * from table1';
q.Open;
= q.FieldByName ('...').AsInteger;
...

* EMan1.4: ---===*** Have your friend the way you would like him to have you ***===---


Ответ отправлен: 27.06.2003, 02:04
Отправитель: Bob Johnson


 Вопрос № 756

Здравствуйте, многоуважаемые эксперты, еще раз !!!
1) Есть база по сотрудникам организации. А как
можно узнать сколько сотрудников с профессией
например плотник, слесарь и т.д. Если бы мне
были известны все эти профессии, то проблем бы
не было, но мне же не известно какие именно
профессии будут заноситься в базу ???
2) А что такое манифест ? Я видел файл с таким
расширением, а там xml-текст, для чего он нужен
я так и не разобрался :(. Подскажите плз.
Всем заранее спасибо. С уважением SATAN aka NAPALM.



Вопрос отправлен: 25.06.2003, 13:19
Отправитель: SATAN aka NAPALM

[Следующий вопрос >>] [Список вопросов]

Отвечает Дима Мусиенко

Добрый день, SATAN aka NAPALM!
1) Тебе и не нужно знать, какие профессии будут в базе.
Просто нужно например, занести в список все профессии, юзер выбирает нужную, дальше вычисляется сколько записей с такой-то профессией. Примерно так.

Ответ отправлен: 26.06.2003, 10:17
Отправитель: Дима Мусиенко


Отвечает Vdr

Добрый день, SATAN aka NAPALM!
У тебя проблема с запросом? Если так, то надо знать какие поля есть в таблице... Тогда можно и запрос составить.
Расширь вопрос.
Удачи!

Ответ отправлен: 25.06.2003, 19:01
Отправитель: Vdr


Отвечает URiS

Приветствую Вас, SATAN aka NAPALM!
1) Следующий алгоритм:
- Имеем (число профессий не больше сотни):
A: array[1..100] of string;
b: array[1..100] of word;
index, procount: word = 0;
- Поочерёдно считываем профессии:
Проверяем, есть ли эта профессия в массиве A.
Если нет, то увеличиваем PROCOUNT, заносим её в A[procount] и увеличиваем b[procount] на 1 (b[procount]:=b[procount]+1;).
Если есть, то ищем индекс ячейки (index), в которой она находится, и делаем b[index]:=b[index]+1;
Теперь в procount мы имеем количество уникальных профессий и можем вывести профессии и их количество на экран:
for i:=1 to procount do
Writeln(a[i],' = ',b[i]);

*EMan1.4 © Bob Johnson | Expert: URiS (newff.narod.ru)


Ответ отправлен: 26.06.2003, 11:09
Отправитель: URiS


Отвечает Артём Шегеда

Добрый день, SATAN aka NAPALM!

Это чистый SQL.
select distinct count(prof),prof from workers_table group by prof

В этом запросе выбирается число профессий и названия профессий из таблицы workers_table.

Ответ отправлен: 25.06.2003, 14:01
Отправитель: Артём Шегеда


Отвечает Bob Johnson

Здравствуйте, SATAN aka NAPALM!
1. Вначале получи из базы все различные варианты профессий (если не будет отдельной таблицы для этого, можно воспользоваться select distinct), а тогда уже формируй требуемый запрос.
2. Это файл, где указаны некоторые требования программы к ОС. В ХР такой файл позволяет использоваться common controls версии 6 и получить таким образом внешний вид в стиле "ХР".

* EMan1.4: ---===*** Have your friend the way you would like him to have you ***===---


Ответ отправлен: 27.06.2003, 02:04
Отправитель: Bob Johnson



Форма отправки вопроса

Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

(C) 2002-2003 Команда RusFAQ.ru.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


Приложение (если необходимо):


Получить ответов:


 Выбор рассылки

Программисту
Assembler (36)
C / C++ (23)
Perl (4)
Builder / Delphi (18)
Pascal (26)
Basic / VBA (10)
Java / JavaScript (12)
PHP (4)
MySQL / MSSQL (5)
Пользователю
Windows 95/98/Me (30)
Windows NT/2000/XP (27)
"Железо" (21)
Поиск информации (15)
Администратору
Windows NT/2000/XP (13)
Linux / Unix (5)
Юристу
Гражданское право (7)
Семейное право (3)
Трудовое право (5)
КоАП (4)

Отправить вопрос всем экспертам выбранной рассылки.




Задать вопрос | Регистрация эксперта | Поиск в базе | Чат | Форумы | Новости
Проект экспертов RusFAQ.ru | Фотоальбом | Virus.RusFAQ.ru | Администрирование
Профессиональная WEB-Студия B.I.T.


Яндекс цитирования
© 2001-2003 Россия, Москва. Авторское право: Калашников О.А.

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное