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

Delphi - проблемы и решения

  Все выпуски  

Проблемы и решения в Delphi #42


Служба Рассылок Subscribe.Ru

5655 подписчиков.

Проблемы и решения в Delphi - выпуск 42 от 10.01.2002.


Пришел и видишь - не туда...


* ВСЕ ВОПРОСЫ * * СПРОСИТЬ * * ПРЕДЛОЖИТЬ * * АРХИВЫ * * СКОЛЬКО НАС *


Доброго Вам времени суток уважаемый читатель.

Поздравляю всех еще раз с новым годом, заодно и со старым новым годом, рождеством и ..... В общем всем побольше денег в новом году и здоровья.

В новый год по новому. Прошу всех подписчиков обратить особое внимание на оформление рассылки, вопросов-ответов и ответов, получаемых лично. Дело в том, что несмотря на небольшие внешние изменения, внутри рассылка(точнее ее организация и управление) претерпела огромные изменения. Поэтому, если кому, чего не понравится прошу сразу писать - обязательно исправлю или нет :-)).


Как обычно в выпуске:

1. Очередные вопросы.
2. Отвеченные вопросы.


* ВСЕ ВОПРОСЫ * * СПРОСИТЬ * * ПРЕДЛОЖИТЬ * * АРХИВЫ * * СКОЛЬКО НАС *

1. Очередные вопросы.

Вопрос 620:
От: Dr.IMP

Подскажите, пожалуйста, как мне из своей программы работать с Outlook
(XP)
Если точнее, то необходимо сохранить письмо на диск в формате HTML.
sa

Ответить.


Попробуй так:


Вопрос 621:
От: Ovtchinnikov Kirill

У меня на компе стоит MS Speech API 3.0. Можно ли мне использовать его в
Delphi 5? Если да, то как?
sa

Ответить.


Попробуй так:


Вопрос 622:
От: Artem Krylov

Подскажите пожалуйста новичку, у меня есть таблица *.db, в формате
PARADOX7, там есть колонка "Date" (TDate) она проиндексирована. При
сортировке она отображается в виде: с начала самое "старое" число и
ниже к более раннему, подскажите, как сделать наоборот?
sa

Ответить.


Попробуй так:


Вопрос 623:
От: Giny

У меня возник вопрос вот какой. Как мне получить серийные номера
различных устройств, нап. процессора, мат. платы, и др.(кроме
винчестера).
sa

Ответить.


Попробуй так:


Вопрос 624:
От: Konstantin Ovsienko

 
в вашей рассылке уже говорилось как работать с СОМ-портом, а у меня
вопрос следующий: как работать с LPT-портом средствами WinAPI, есть у
меня например на нем какое-то устройство? Если можно, то с примером.
sa

Ответить.


Попробуй так:


Вопрос 625:
От: Danil

Как изменить цвет выделения в листбоксе и, может кто-нибудь знает, в
KOLListbox?
sa

Ответить.


Попробуй так:


Вопрос 626:
От: Alexandr Chernjavski

Как загрузить в Pointer - файл?
sa

Ответить.


Попробуй так:


Вопрос 627:
От: Кондратьев Андрей Фёдорович

Подскажите как в Delphi развернуть свернутое окно.
sa

Ответить.


Попробуй так:


Вопрос 628:
От: Sashka_Zel@rambler.ru

Где взять компонент RxTrayIcon?
sa

Ответить.


Попробуй так:


Вопрос 629:
От: xxmail@grsu.grodno.by

У меня есть 16-битная DLL-библиотека, скомпилированная на Delphi 1.0.
Могу ли я подключить ее к своему 32-разрядному приложению для вызова
подпрограмм или способ подключения отличается от обычного? Очень нужна
ваша помощь.
sa

Ответить.


Попробуй так:


Вопрос 630:
От: Andrey Kochetov

Прошу прощения за ламерский вопрос, но с Internet я до сих пор не
работал из программы, а решение очень нужно.
  Вопрос такой: как из программы узнать, есть ли в настоящий момент
соединение с Internet (прямое или черех proxy, работать должны все
варианты), а также проверить, доступен ли адрес, заданный строковым
параметром (например, " http://www.hp.com/") <http://www.hp.com/>
  Желательно решение без использования сторонних (не родных для BCB 5.0)
компонент, так как никакой другой функциональности не требуется.
  Буду крайне признателен за совет с исходным текстом.
sa

Ответить.


Попробуй так:



* ВСЕ ВОПРОСЫ * * СПРОСИТЬ * * ПРЕДЛОЖИТЬ * * АРХИВЫ * * СКОЛЬКО НАС *

2. Отвеченные вопросы.

Вопрос 611:
От: Vilgelm Sergey

Значит у меня есть несколько канв на которых я рисую,
 а так же я создал объект, который рисует на этих канвах. Так вот, как
 мне  запомнить  в  свойстве  объекта  на  какой  канве  он  рисовал в
 последний  раз,  а  потом  при  обращении  к  этому объекту, например
 перерисовать  с  другими  координатами,  он  автоматически  обращался
 именно  к  той  канве, где он последний раз рисовал. Объект создан от
 TObject.  Пока  что  я  выхожу  из  положения  передавая  в  качестве
 параметров  в объект всю канву и принимаю назад уже изменённую канву.
 А мне нужно прямой доступ к канве.sa

Ответить.

Попробуй так:
А в чем проблема? TFoo = class private FCanvas: TCanvas; procedure SetCanvas(Value: TCanvas); public property Canvas: TCanvas read FCanvas write SetCanvas; end; implementation procedure SetCanvas(Value: TCanvas); begin if FCanvas <> Value then FCanvas := Value; end; Устанавливаешь канву через проперть. Внутри объекта рисуешь на FCanvas. Нужно изменить канву - меняешь через проперть. Попробуй так:
В Дельфи все объекты виртуальные. Это означает, что любой объект, или иначе говоря - экземпляр класса - это просто указатель на область памяти, где находится этот экземпляр. Поэтому здесь нет никаких сложностей - при передаче канвы в процедуру в качестве переменной вся работа внутри процедуры будет вестись именно с исходной канвой. Скорее все у Вас так и происходит - новая независимая канва простым присваиванием не возникает, передается только указатель, указывающий на ту же область памяти. Для подтверждения кусочек кода - не гарантирую его безошибочность- хотя и проверял на работоспособность, а так же не претендую на классическую манеру программирования. //---------------- Unit такой то TCanvasPainter=class private fCanvas:TCanvas; fPosition:TPoint; procedure PaintOnCanvas(Value:TCanvas); procedure SetPosition(Value:TPoint); public property Canvas:TCanvas read fCanvas write PaintOnCanvas; property Position:TPoint read fPosition Write SetPosition; procedure RePaint; end; implementation procedure TCanvasPainter.PaintOnCanvas; begin //запомним в нашем объекте ссылку на канву fCanvas:=Value; //рисуем на новой канве RePaint; end; procedure TCanvasPainter.RePaint; begin //рисуем используя fCanvas и fPosition if fCanvas<> nil then With fCanvas do begin очищаем канву.... {а затем рисуем что надо} Ellipse(fPosition.x-50, fPosition.y-50, fPosition.x+50, fPosition.y+50); end; end; procedure TCanvasPainter.SetPosition; begin if fCanvas<>nil then if (Value.x<>fPosition.x) or (Value.y<>fPosition.y) then begin fPosition:=Value; RePaint; end; end; Один раз присвоив свойству Canvas ссылку на нужную канву, далее можно либо просто присваивать новое значение свойству Position, и канва перерисуется, либо вызвать метод RePaint. Например procedure TForm1.Button1Click(Sender: TObject); begin { после этого будем рисовать на канве формы1 } CanvasPainter.Canvas:=Form1.Canvas; end; procedure TForm1.Button2Click(Sender: TObject); begin { после этого будем рисовать на канве формы2 } CanvasPainter.Canvas:=Form2.Canvas; end; {изображение будет перемещаться при каждом изменении значения спинэдитов} procedure TForm1.SpinEdit1Change(Sender: TObject); begin CanvasPainter.Position:=Point(SpinEdit1.Value, SpinEdit2.Value); end; procedure TForm1.SpinEdit2Change(Sender: TObject); begin CanvasPainter.Position:=Point(SpinEdit1.Value, SpinEdit2.Value); end; Попробуй так:


Вопрос 612:
От: Эдуард Филимонов

Подскажите, как сделать Drag&Drop строки из DBGrid на
другой   компонент  (например  в  другой  DBGrid).  Если  можно  сразу
несколько  строк  -  еще  лучше.
Проблема  в том, что если в свойстве DragMode  поставить  Automatic,
то  тогда  невозможно  с помощью мыши получить  фокус в сетке
для редактирования записи. А если стоит Manual,
то при событии onMouseDown реагирует все только не сетка.
Внутри сетки появляется фокус ввода. Как быть?sa

Ответить.

Попробуй так:
Попробуй компоненты типа DBGridEh... Там вроде есть такое Попробуй так:


Вопрос 613:
От: vas

Как   мне узнать имя, под которым зарегистрировался пользователь а
системе Win98 ?sa

Ответить.

Попробуй так:
В uses добавить модуль Registry. процедура из работающей программы procedure TFirst.FormCreate(Sender: TObject); var Reg: TRegistry; begin Reg := TRegistry.Create; try Reg.RootKey := HKEY_LOCAL_MACHINE; Reg.OpenKey('\System\CurrentControlSet\Control\ComputerName\ComputerName',False); showmessage('Компьютер имеет имя: '+Reg.ReadString('ComputerName')); Reg.OpenKey('\Network\logon',False); showmessage('Вы вошли под именем: '+Reg.ReadString('UserName')); finally Reg.Free; inherited; end; end; Попробуй так:
Procedure GetUserInfo(var CompName, UserName: String); Var Tmp: array[1..MAX_PATH] of Char; i: Cardinal; Begin i:=sizeof(Tmp); GetComputerName(@Tmp, i); i:=1; while Tmp[i]<>#0 do Inc(i); CompName:=String(Tmp); SetLength(CompName,i-1); i:=sizeof(Tmp); GetUserName(@Tmp, i); i:=1; while Tmp[i]<>#0 do Inc(i); UserName:=String(Tmp); SetLength(UserName,i-1); End; Попробуй так:


Вопрос 614:
От: Alexander Baronin

Подскажите пожалуйста,
 - как набрать номер модемом (можно несколько вариантов) из программы?
 - как поймать Busy
 - как ...
 - как положить трубкуsa

Ответить.

Попробуй так:
Есть для этого очень хороший компонентик Async Pro он делает все вышеперчисленное, и еще мульйон других полезных вещей. Для работы с модемом, он, просто, незаменим Попробуй так:


Вопрос 615:
От: Денис

Не поделятся ли уважаемые компонентами или примерами связанными с
графиками математических функций, а именно дисперсный анализ, но можно
любые другие, главное чтобы можно было строить логарифмические функции
и потом их распечать.sa

Ответить.

Попробуй так:
Есть такой компонент TChart он рисует графики, диаграммы итп.. также может все это дело выводить на печать. Единственное, что придется тебе сделать так это затолкать данные в TChart... Естесственно дисперсионный анализ придеться писать самому :) Попробуй так:
Пиши на alex@autograph.com.ua намылю хорошую софтулину, с универсальной рисовалкой графиков, и поясню, если что. Попробуй так:


Вопрос 616:
От: Andy

Господа! Подскажите пожалуйста где можно взять ADO компоненты
 под Delphi3? В cети их много, но сплошные "Demo" или "Shareware"sa

Ответить.

Попробуй так:


Вопрос 617:
От: Alexey Shubin

:Не подскажет ли кто, где найти исправление багов в FIB Plus 4.42.
Может кто сам исправлял.
Например, при попытке FIBDataSet.Refresh возникает exception если
DataSet пустой.
Пустой DataSet освежать воще отказывается, а ведь другой пользователь
мог добавить строки.
Есть и другие баги.sa

Ответить.

Попробуй так:
Вообще-то это компоненты 3-ей фирмы, а не родные борладнские, так что зайди на сайти и скачай последнюю версию! ----- Попробуй так:


Вопрос 618:
От: Tsatur

У меня имеются картинки. Мне надо их сжать в один файл и затем из своей
программы вытаскивать определенную картику из  созданного файла.sa

Ответить.

Попробуй так:
Ну так напиший свой архиватор или юзай готовый! А посмотреть все что доступно на www.torry.net Попробуй так:
я писал такую прогу, но она недоработанная и корявая слегка;). Если интересно, пиши на comrust@com.osu.ru , вышлю исходник. Попробуй так:
Вам поможет файл ресурсов. См. http://delphi.vitpc.com/asp/answer.asp?IDAnswer=174 Попробуй так:


Вопрос 619:
От: Andriy

Подскажите, пожалуйста, где найти инфу по созданию драйвуров *.VxD и др.
для Windows95/98/NT, а также- как писать *.inf файлы и желательно
поподробнее.sa

Ответить.

Попробуй так:
читай MSDN Попробуй так:
Как писать *.inf файлы? Нашел такой пример: Ниже приведённый INF-файл копирует файл-шаблон в папку ShellNew и регистрирует новый шаблон в разделе HKEY_CLASSES_ROOT\.bat\ShellNew. ; File: Batfile.INF ; ; ; ; Добавление шаблона BAT в подменю "Создать" ; ; Этот файл также содержит возможность удаления ; новых установок и восстановления старых. [version] signature="$CHICAGO$" SetupClass=BASE ; В процессе установки: копируем шаблон ; batfile.bat в подкаталоге ShellNew каталога Windows, ; копируем INF-файл в целях восстановления старых установок, ; добавляем подраздел ShellNew в раздел \.bat и восстанавливаем ; возможность восстановления. [DefaultInstall] CopyFiles = Bat.CopyFiles.Bat, Inf.CopyFiles.Inf AddReg = Bat.AddReg ; В процессе восстановления: удаляем INF-файл и ; файл шаблона, а также удаляем установки в реестре. [DefaultUninstall] DelReg = Bat.DelReg DelFiles = Inf.DelFiles.Inf, Bat.CopyFiles.bat ; Добавляем подраздел ShellNew в раздел .bat [Bat.AddReg] HKCR,.bat\ShellNew,,, HKCR,.bat\ShellNew,FileName,,"Batfile.bat" ; Установка возможности восстановления. HKLM,%UnKey%,DisplayName,,"%REMOVE_DESC%" HKLM,%UnKey%,UninstallString,,"RunDll32 setupApi.dll, InstallHinfSection DefaultUninstall 132 Batfile.inf" ; Не забывайте этот раздел для восстановления удаления. HKLM,SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\battempl,,, [Bat.DelReg] HKCR,.bat\ShellNew ; Не забывайте этот раздел для возможности удаления. HKLM,SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\battempl ; INF-файл копирует в подкаталог INF каталога Windows [Inf.CopyFiles.Inf] Batfile.Inf ; INF-файл удаляется из подкаталога INF [Inf.DelFiles.Inf] Batfile.Inf Batfile.PNF ; Шаблон BAT копируется в подкаталог ShellNew каталога Windows [Bat.CopyFiles.Bat] Batfile.bat [DestinationDirs] Bat.CopyFiles.Bat = 10,ShellNew Inf.CopyFiles.Inf = 17 Inf.DelFiles.Inf = 17 [SourceDisksNames] 55="Batfile Template","",1 [SourceDisksFiles] Batfile.inf=55 Batfile.bat=55 [Strings] REMOVE_DESC = "Удалить шаблон BAT " UnKey="SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\battempl" ; End *** После установки данного INF-файла, которого можно произвести, щёлкнув этот файл правой кнопкой мыши и выбрав команду Установить контекстного меню, пункт Пакетный файл MS-DOS должен появиться в подменю команды Создать. Это пример из подписки citycat.ru по реестру Форточек.





Если Вы хотите как можно скорее получить ответ на свой вопрос, то
укажите в теме письма - delphiV,иначе письмо будет прочитано значительно
позже, если же у вас есть предложения то в теме письма укажите delphiP.

Для интересующихся - немного о себе. Работаю на
железнодорожном транспорте ведущим программистом.
Основные мои разработки - это сбор и доставка клиентам
информации о вагонах и поездах: где находится(по России),
куда едет. В связи с этим программировал для e-mail,Socket,БД,ISAPI.

За сим прощаюсь - скорых Вам и качественных программ.

Автор рассылки - Дмитрий.
ICQ - 89533941.

* ВСЕ ВОПРОСЫ * * СПРОСИТЬ * * ПРЕДЛОЖИТЬ * * АРХИВЫ * * СКОЛЬКО НАС *



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

В избранное