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

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

  Все выпуски  

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


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

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

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


Не все то золото, что блестит...


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


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






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

1. Очередные вопросы.
2. Отвеченные вопросы.
3. Наша база OFFLine взаимопомощи.


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

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

Вопрос 734:
От: Андрей Верещагин

1. При попытке провести запись в базу данных FOXPRO, запись проходит,
   но происходит ошибка при работе с индексным файлом. В чем может быть
   проблема?
2. И как можно провести реиндексацию базы данных FOXPRO из DELPHI 5?
   Сразу хочу отметить Table.IndexDefs.Update не подходит.


Ответить.


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


Вопрос 735:
От: Alex Zhuravlev

Спасибо, но я немного не то имел ввиду - мне надо печатать графику, а
разбираться с ESC-кодами не хочется, да и неправильный это подход, на то и
драйвера пишут. Поэтому хотелось бы рисовать на Canvas, но не всё сразу, а
по частям, т.к. конец неизвестен и печать отключается интерактивно.
Наверное, есть способ установить длину страницы на 8 (24) пиксела, но
что-то криво как-то :-(
> Вы спрашивали:
> ****************************************
> Кто знает, как печатать на матричном принтере на бесконечной бумаге,
> когда длина заранее не известна -
> как я понимаю, надо что-то типа EndDoc без прокручивания страницы или
> что-то умнее?
>
> ****************************************
> Появились ответы:
> Ответ:
> Да нет, просто можешь посылать текст на устройство prn (AssignPrn(Var
F:TextFile)),
> в таком случае он будет печататься бесконечно пока не
> кончится, потому что для перевода страницы нужно посылать особый
символ.
>


Ответить.


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


Вопрос 736:
От: Глебов Станислав

Есть под Win 9x функция, звать её WNetEnumCachedPasswords, но проблема в
том,
что она недокументирована. По идее она находится в библиотеке
winmgmtr.dll(вероятно), однако я не знаю
как её вызвать и использовать, а также есть ли эта функция под NT/2000.


Ответить.


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


Вопрос 737:
От: Андрей

В програмном коде создаю RadioGroup -ы и  ComboBox -ы на форме, потом
задаю
размер и расположение, но во врема исполнения при их появлении в верхнем
углу формы видно неприятное моргание. Помогите избавиться от этого.


Ответить.


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


Вопрос 738:
От: Андрей

Пишу в 6 Delphi из-за ADO . Помогите найти рабочий исходник для
вычисления строки с формулой. (тот что здесь в рассылке не хочет работать).


Ответить.


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


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

Как открыть с помощью Delphi dbf файл, созданный в системе FoxPro ?
Данный файл имеет мемо поле (*.fpt). Все базы могу открыть и
прочитать. А эту нет. DBD говорит "Unable to open table" И далее
"Corrup table/index header".
СистемоЙ FoxPro файл открывается.


Ответить.


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


Вопрос 740:
От: Alex

СУБД - ORACLE 8.0.5
Помогите составить SQL-запрос
Есть 2 таблицы: А(Ѓпоезда, название_маршрута)
                В(Ѓпоезда, название_станции, время_приб_на_станцию) -
 где название_станции - ВСЕ станции на маршруте данного поезда(FK
Ѓпоезда)
т.е. для А.Ѓпоезда есть несколько В.название_станции.
ЗАДАНИЕ
Дано 3 города Г1,Г2,Г3.
Нужно вывести все поезда (А.Ѓпоезда) ,
проходящие через первые 2 станции Г1 и Г2 ( Г1 и Г2 -
В.название_станции)
и все поезда (А.Ѓпоезда),
проходящие через вторые 2 станции Г2 и Г3 (Г2 и Г3 - В.название_станции)
в одном наборе данных,
причем вывести надо все в 6 столбцов :
-------------------------------------------------------------------------------------------------------------
                Г1 - Г2                                            |Г2 - Г3
---------------------------------------------------+----------------------------------------------------
Ѓпоезда | назв_марш | время_приб_на_ст | Ѓпоезда |назв_марш |время_приб_на_ст
и отсортировать по время_приб_на_ст,
причем если в данный момент времени поезд Г1-Г2 есть, а поезда Г2-Г3 нет
то в правой части НД нужно оставить пустую строку и наоборот.


Ответить.


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


Вопрос 741:
От: Ig Li

Как при изменении состояния входов (CTS, DSR, DCD, RI) COM-порта можно
заставить программу произвести какие-либо действия.(Не используя Таймер
для опроса).


Ответить.


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


Вопрос 742:
От: Глебов Станислав

Я пишу на Delphi уже 3 года, но сегодня столкнулся с довольно серьезной
для меня проблемой: как зная дескриптор окна обратиться  к нему и
использовать данные этого окна. К примеру текст из редактора Edit.
Если Вы знаете ответ, опубликуйте его в ближайшем выпуске Вашей
рассылки.


Ответить.


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


Вопрос 743:
От: Alexandr

После установки Delphi 5.0 (build 6.18 Enterprise edition,
Update pack 1) появилась проблема. При работе некоторые программы
начали вылетать с ошибкой вида:
Инструкция по адресу "0x77fcbcbe" обратилась к памяти по адресу
"fffffff8". Память не может быть "read".
"ОК" - завершение приложения
"Отмена" - отладка приложения
При нажатии на "Отмена" запускается отладчик Delphi.


Ответить.


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


Вопрос 744:
От: Андрей Севко

Зная ID (идентификатор) процесса, драйвера или модуля, как я могу
получить информацию о том, какой объем памяти он занимает?


Ответить.


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


Вопрос 745:
От: banov

У меня такая проблема: ставлю глобальный хук на клаву,
который каждые 20 символов дополняет в файл, и у меня
на 10-ом клике кнопки(на клаве) в активном окне появляется ошибка
"Программа выполнила недопустимую операцию...".
И программа, которая в момент нажатия клавиш была активна закрывается.
Посмотрите, кто-нибудь, в чём проблема.
<code>
library HookDll;
uses Windows, SysUtils;
var CurrentHook: HHook;
    KeyArray: array[0..19] of char;
    KeyArrayPtr: integer;
    CurFile:text;
function GlobalKeyBoardHook(code: integer; wParam: word; lParam:
longword): longword; stdcall;
var
i:integer;
begin
    if code<0 then begin
GlobalKeyBoardHook:=CallNextHookEx(CurrentHook,code,wParam,lparam);
       Exit;
    end;
    if ((lParam and KF_UP)=0) and (wParam>=65) and (wParam<=90) then
begin
         KeyArray[KeyArrayPtr]:=char(wParam);
         KeyArrayPtr:=KeyArrayPtr+1;
         if KeyArrayPtr>19 then begin
             for i:=0 to 19 do write(Curfile, KeyArray[i]);
             KeyArrayPtr:=0;
         end;
    end;
    CallNextHookEx(CurrentHook,code,wParam,lparam);
    GlobalKeyBoardHook:=0;
    Exit;
end;
procedure SetupGlobalKeyBoardHook;
begin
CurrentHook:=SetWindowsHookEx(WH_KEYBOARD, @GlobalKeyBoardHook,
HInstance, 0);
KeyArrayptr:=0;
Assignfile(CurFile,'C:\Windows\System\log.txt');
if fileexists('C:\Windows\System\log.txt')=false then rewrite(CurFile)
else Append(CurFile);
end;
procedure unhook;
begin
UnhookWindowshookEx(CurrentHook);
Closefile(CurFile);
end;
exports SetupGlobalKeyBoardHook index 1,
        UnHook index 2;
begin
end.
</code>


Ответить.


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


Вопрос 746:
От: AlexandeR

1. Как загрузить иконку из dll-библиотеки (Например shell32.dll) и
поместить ее изображение, например, в TImage или перевести в TBitmap?
Если можно - и о других ресурсах ( меню, диалоги, курсоры и
т.д.)
2. Как, поместив в файл ресурса проекта ( Project.res ) изображение
(Bitmap) с помощью программы из пакета Delphi5 "Image Editor", достать
ее програмно?


Ответить.


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


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

Я тут решил написать на делфи че-то вроди голосовой говорилки по сети и
в связи с этим у меня возникло пару вопросов:
1. Где бы прочесть о работе со звуком в виндах и желательно хоть с
какими то примерчиками (в хелпах по делфи этих  примерчиков не нашел)?
2. Как вывести звук (например wav-file или какое-то сообщение от другого
компа) если у меня на компе играет музыка (mp3-file к примеру). Нужно
чтоб было слышно и то и другое. Желательно пример.
3. Посоветуйте, где скачать библиотеку для кодирования-декодирования
wav-потоков в mp3 формат+ описание ее функций?
4. Подскажите, как узнать информацию об mp3 файле, тоесть всю, которая
есть у него внутри (ID3v1 tag, ID3v2 tag, их структура и т.д.)


Ответить.


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


Вопрос 748:
От: Anton

Имеется компонент ValuListEditor и таблица.
Ключи в ValuListEditor: день, месяц, год, фамилия студента.
Необходимо при попытке ввода данных в поле "Значение" для ключей "Месяц"
и "Фамилия"
чтобы появлялся выпадающий список со значениями для подстановки в
выбранное поле "Значение".
Эти выбранные данные затем будут использоваться как фильтр поиска в
таблице.
Как это осуществить не могу найти ни в справке, ни в примерах.


Ответить.


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



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

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

Вопрос 726:
От: TEC

У меня вопрос по поводу упаковки таблиц.
Все делаю как написано в примерах:
T1.Exclusive:=true;
PackTable(T1);
А Оно говорит. что мол не могу работать при открытых данных.
Ну хорошо, делаю : T1.Active:=False;
А теперь ругается, что не могу работать на закрытых данных.
Где грабли?


Ответить.

Попробуй так:
Скорее всего, что таблица открыта в IDE B IDE T1.Active:=fa
lse В runtime T1.Exclusive:=true; T1.Active:=true; PackTable(T1); и т.д. Попробуй так:
DataSource1.Enabled:=False; PackTable(T1); DataSource1.Enabled:=True; где DataSource1 источник соединённый с твоей таблицей.


Вопрос 727:
От: kto to

Проблема с ListBox'ом в delphi4.
Если в 4-ой дэльфе в непустом ListBox указать ItemIndex:=0, то эта
нулевая(первая строка)не выделяется. Этот глюк глючавит только если до этого в ListBox'e не
была
выбрана ни одна строка. В delphi3 усё типа-топ.
Это может и мелочи, но чтоб программно выделить нулевую строку,
приходится сначало проверить больше ли 1-го количество строк в ListBox'e и выделить не нулевую и
сразу потом нулевую строку.
А если в листбоксе будет всего одна строка.........((( .....
Чо за х....я???
И еще - если в ListBox'e не выделена ни одна строка то ItemIndex равен
0, а не минус 1.
Эти глюки присущи тока delphi4 (в пятой и шестой не проверял). Delphi3 -
лучшая версия!
Высокие версии дэльфов предназанчены для пользователей, а не для
программистов.
А то расслабились... скоро вобще голосом будете говорить компилятору -
"Состряпай мне крестики нолики" и кмопилятор скомпилит код в 4 Гб......


Ответить.

Попробуй так:
Это вопрос или крик души? Ответ будет: "Раз оно так ест
ь, значит так надо" Если не нравится - программируй на другом языке. Попробуй так:


Вопрос 728:
От: Виталий Джангл

Помогите решить задачу с обращением к ячейкам памяти
системной области BIOS. Дело в том, что, например, под Windows 9x просмотреть
содержимое ячейки памяти с адресом $000F08C0 можно при помощи строки
str:=string(PChar(Ptr($000F08C0))); Однако такая "штука" не работает
на платформах класса NT. Существует способ организации доступа к DMI
информации, работающий под любыми платформами. Но как организовать
такой доступ? Вопрос действительно сложный!


Ответить.

Попробуй так:
Где-то я видел драйверок для прямого доступа к БИОС (NT/200/X
P) туда никого не пускают. Называется, кажется, winflash.sys, идет в комплекте с прошивалкой BIOS. В принципе, NT и выше вообще никого к железу не подпускают, только через драйвера, которые могут быть установлены/снесены только администратором. Даже если хакер попытается тебе что-нить сунуть под NT..XP, каким-то образом он должен получить права админа. Но это к вопросу не относится…:' Попробуй так:


Вопрос 729:
От: Vadim Pristavko

хочется узнать Owner'а файла из программы. Раздел NTFS... как? Я
пытался,
нашел пару API функций, да только так состыковать и не смог :(


Ответить.

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


Вопрос 730:
От: Vadim Pristavko

Имею соединение через ADO с MSSQL7
хранимая процедура возвращает 3 набора данных (Recordset'a), как их
получить и вывести в Мемо?
Как то Query Analayzer это делает, причем данные получает и медленно
выводит - по мере получения заполняет memo... И если в середине запроса
вышла ошибка (например деление на 0) он заканчивает,  выкидывает
значение
ошибки, а потом продолжает получать данные  из следующего RecordSet!


Ответить.

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


Вопрос 731:
От: Изотко Сергей

Как вырубить клаву и мышку, а потом аккуратно их включить.
Видел много процедур,
но мне нужна 100% рабочая. Может есть какой компонент для
такого рода действий.


Ответить.

Попробуй так:
В Windows 9x для Delphi существует следующая штука: Напри
мер, выход из Windows без любых сообщений/вопросов: ShellExecute(Application.Handle, Pchar('Open'),Pchar('C:\Windows\Rundll32.exe'), Pchar('krnl386.exe,exitkernel'), Pchar('C:\Windows'),SW_SHOWNORMAL); "rundll32 shell32,Control_RunDLL" - Выводит "Панель управления" "rundll32 shell32,OpenAs_RunDLL" - Выводит окошко - "Открыть с помощью.." "rundll32 shell32,ShellAboutA Info-Box" - Покозать окно "About Windows" "rundll32 shell32,Control_RunDLL desk.cpl" - Открыть "Свойства Экрана" "rundll32 user,cascadechildwindows" - Сортировка окон "Каскадом" (Как в Win 3.x) "rundll32 user,tilechildwindows" - Сместить Окна в низ "rundll32 user,repaintscreen" - Обновить рабочий стол "rundll32 shell,shellexecute Explorer" - Запустить проводник Windows. "rundll32 keyboard,disable" - Вырубить Клавиатуру! (Вот Это я понимаю Заподло!) "rundll32 mouse,disable" - Вырубить Мышь! (У Шефа Будет припадок:))) "rundll32 user,swapmousebutton" - Поменять Местами клавиши Мыша! (Во мля! и этого Дядя Билли не забыл!) "rundll32 user,setcursorpos" - Сместить курсор крысы в левый верхний угол "rundll32 user,wnetconnectdialog" - Вызвать окно "Подключение сетевого диска" "rundll32 user,wnetdisconnectdialog" - Вызвать окно "Отключение сетевого диска" "rundll32 user,disableoemlayer" - Спровоцировать сбой!!! (Знаю, сам сразу не поверил, но это FUсKт...) "rundll32 diskcopy,DiskCopyRunDll" - Показать окно "Copy Disk" "rundll32 rnaui.dll,RnaWizard" - Вывод окна "Установка Связи", с ключем "/1" - без окна "rundll32 shell32,SHFormatDrive" - Окно "Форматирование: Диск3,5(А)" вызвать "rundll32 shell32,SHExitWindowsEx -1" - Перегрузить Explorer"rundll32 shell32,SHExitWindowsEx 1" - Выключение Компутера. "rundll32 shell32,SHExitWindowsEx 0" - Завершить Работу Текущего Пользователя "rundll32 shell32,SHExitWindowsEx 2" Windows-98-PC boot "rundll32 krnl386.exe,exitkernel" - выход из Windows без любых сообщений/вопросов "rundll rnaui.dll,RnaDial "MyConnect" - Вызвать окошко "Установка связи" с соединением "MyConnect" "rundll32 msprint2.dll,RUNDLL_PrintTestPage" - выбрать в появившемся меню принтер и послать, а него тест "rundll32 user,setcaretblinktime" - установить новую частоту мигания курсора "rundll32 user,setdoubleclicktime" - установить новую скорость двойного нажатия "rundll32 sysdm.cpl,InstallDevice_Rundll" - установить non-Plugamp&Play оборудование Из рассылки "Мастера Delphi" Попробуй так:
:'Вырубает клаву и мышь. 100% рабочая: procedure BlockInput(ABlockInput:boolean); stdcall; external 'USER32.DLL';


Вопрос 732:
От: Anton

В Word есть в CoolBar кнопочка "Цвет шрифта", которая позволяет раз
выбрав цвет использовать его потом неоднократно для изменения
выделенного текста, не вызывая для этого всякий раз окно диалога цвета.
Вопрос: как организовать это в Дельфи (делаю свой редактор текстовый)?
пожалуйста поподробнее.


Ответить.

Попробуй так:
Возможно так var Form1: TForm1; CurrentFon
t: TFont; implementation {$R *.DFM} procedure TForm1.Button1Click(Sender: TObject); begin if FontDialog1.Execute then CurrentFont:=FontDialog1.Font; end; procedure TForm1.Button2Click(Sender: TObject); begin with RichEdit1.SelAttributes do begin CharSet:= FontDialog1.Font.Charset; Color := FontDialog1.Font.Color; Height := FontDialog1.Font.Height; Name := FontDialog1.Font.Name; Pitch := FontDialog1.Font.Pitch; Size := FontDialog1.Font.Size; Style := FontDialog1.Font.Style; end; end; Попробуй так:
Очевидно, для создания хорошего текстового редактора и в то же время достаточно простого в написании следует построить его на базе компонента TRichEdit. Так вот, у этого компонента есть свойство RichEdit.SelAttributes, поля которого определяют атрибуты выделенного текста: цвет, шрифтовой набор, стиль, размер и т.д. Потому, в Вашем случае нужно в обработчике нажатия кнопки нужно написать if RichEdit.SelLength > 0 then RichEdit.SelAttributes.Сolor := clRed


Вопрос 733:
От: от Виллера Александра

Меня интересует информация как пересылать информацию из приложения в
Word(в том числе и в таблицу),в Excel.


Ответить.

Попробуй так:
Есть неплохая компонента - ExelOut - можно переделывать под с
ебя исходники с комментариями! Попробуй так:
Делал под 5 Delphi. Компоненты ExcelApplication и ExcelWorkbook procedure TForm1.BitBtn1Click(Sender: TObject); var rangee,rangee2,rangee3,rangee4,rangee5:excel97.range; sheete:excel97.excelworksheet; workbooke:excel97.excelWorkbook; begin excelApplication1.visible[0]:=true; //Задаем параметры странички workbooke:=excelApplication1.WorkBooks.Add(null,0); sheete:=workbooke.activesheet as excel97.excelWorksheet; sheete.PageSetup.LeftMargin:=25.4; sheete.PageSetup.RightMargin:=25.4; sheete.PageSetup.TopMargin:=25.4; sheete.PageSetup.BottomMargin:=25.4; sheete.PageSetup.Orientation:=xlLandscape; //Задаем ячейки и обединяем rangee:=excelapplication1.Range['a7','a8']; rangee.MergeCells:=true; //Пишем в выделеную ячейку rangee.Value:='Наименование ТМЦ'; rangee.Font.Bold:=true; //расширяем столбец по написанному в ячейке rangee.Columns.EntireColumn.AutoFit; //Границу делаем, а потом написанное в середину ячейки rangee.Borders.LineStyle:=xlContinuous; rangee.HorizontalAlignment:=xlLeft;rangee.VerticalAlignment:=xlCenter; //выделяем ячейку и ложим данные из базы данных rangee:=excelapplication1.Range['a8','a8']; while not query2.Eof do begin rangee:=excelapplication1.Range['a'+inttostr(rangee.Row+1),'a'+inttostr(rangee.Row+1)]; ... excelApplication1.Disconnect; end; Пример из работающей программы. Я не привожу здесь полностью, поскольку код большой (данные беруться из 7 таблиц со сложными связями). Переход по столбцам в пределах одной строки - rangee:=rangee.Next. Если есть желание и вопросы пиши на k_olta@mail.ru Попробуй так:
Зайди на мой сайт ( http://pks.mari-el.ru ). В разделе документации возми "Доступ к COM серверам Microsoft Office из Delphi 5" и почитай



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



3. Наша база OFFLine взаимопомощи.
Что на сегодня у нас имеется :
Документы Компоненты Программы Проекты
1. От Валентина Озерова
2. Непрямоугольные формы
3. CGI на Делфи
4. Справочник по Делфи5
5. От Олега Малышева
6. Перекодировки
7. WinApi
8. От Алексея Малинина
9. 32 урока по Делфи4
10. МИДАС

1. Выполнение Матем Выражений
2. Управление DOS окнами
3. Rx6_Lib
4. Rx6_Help(rus)
5. Delphi_X
6. Delphi_X_Help(eng)
7. TTable в памяти(без BDE)
8. Банк Клиент
9. Отправить таблицу в Exel
10. ABF-Набор невиз_комп


1. Текст под Углом
2. Управляем WinAmp
3. Печать Графики
4. Заменить Строки
5. Планировщик

Если Вам есть что послать в базу OFFLine то просто в теме письма укажите 'baseoffl' приложите аттач и отправьте письмо. В связи с ограничением размера письма не делайте аттачи более 1500кб.
А ты уже поделился с товарищами чем-нибудь интересным?
Если хотите что-то заказать то пошлите по почте этот запрос , а после двоеточия поставьте две цифры разделенныe запятой, например : ':2,1' - это значит, что вы хотите заказать из второй колонки(Компоненты) первый элемент.
Есть небольшое ограничение - в одном письме можно запросить только что-то одно (обрабатывается только первая строка тела письма)!

Помните! Структура каталогов поддерживается только до очередного выпуска рассылки! Поэтому при запросе всегда берите данные из последнего выпуска!

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

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

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

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

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



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

В избранное