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

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

  Все выпуски  

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


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

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

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



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


Доброго Вам времени суток уважаемый читатель.
Специально для земляков!Появилась новая рассылка: 'Комсомольск на Амуре OFFLine', ее код - country.fareast.kmsoffl . Для наших краев это... ну... очень неплохо :-)) . Подпишитесь - не пожалеете!





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

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


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

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

Вопрос 655:
От: Олег Е. Гончаренко

Вывожу данные из БД в документ ворд,
строка с разделителями. Потом этот абзац
конвертирую в таблицу, но таблица без линий
сетки, без обрамлений. Пробовал использовать
wdTableFormatList, но сетка не нарисовалась...
КАК обрамлять таблицу? Поиск в хелпах и факах
не помог.....
вот кусок кода, который я использую:
 .........................
Separator:='@';
NumColumns:=3;
formas := wdTableFormatList7;
Bordur := 2;
MyRange.ConvertToTable(Separator,EmptyParam,NumColumns,EmptyParam,
Formas,Bordur,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam);
Tabl:=Form2.WordDocument1.Range.Tables.Item(1);
Tabl.Columns.Item(1).SetWidth(25,wdAdjustNone);
Tabl.Columns.Item(2).SetWidth(200,wdAdjustNone);
Tabl.Columns.Item(3).SetWidth(200,wdAdjustNone);
 ..........................


Ответить.


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


Вопрос 656:
От: Talis

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


Ответить.


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


Вопрос 657:
От: Yan

Можно ли программно изменить langdriver в парадоксовской базе данных,
написанной еще под MS-DOS? Искал среди API-шных функций для BDE, но
ничего путного не накопал.


Ответить.


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


Вопрос 658:
От: Жулий Андрей Владимирович

Народ у кого нибудь есть зарегистрированный CryptLib 2.4 ?


Ответить.


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


Вопрос 659:
От: MainStream

Вопрос: как получить строку описания программы/файла (то, которое
отображается в свойствах файла и которое мы, по сути, назначаем в
Version
Info)


Ответить.


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


Вопрос 660:
От: Hidden

Можно ли каким-либо образом скрыть программу, написанную на Delphi, от
диспетчера задач в NT. Либо сделать так, чтобы она хотя бы не убивалась
им.


Ответить.


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


Вопрос 661:
От: Kir

Есть две таблицы в Paradox-е, связанные полем просмотра. Как упорядочить
главную таблицу по значению Lookup поля?


Ответить.


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


Вопрос 662:
От: Karen

Каким образом осуществляется ввод\вывод через последовательные порты в
Windows98 ?
Если не трудно, укажите, пожалуйста, пример какой-нть программы по
теме(для COM2, предположим)...


Ответить.


Попробуй так:
Многократно задаваемый уже вопрос. Закажите все вопросы и най <br> дете исчерпывающую информацию. Например есть такая вещь как Async Pro .


Вопрос 663:
От: VJ

Может кто-то встречал алгоритм принудительного высвобождения данных
из оперативной памяти в файл подкачки? Конечно, можно, воспользоваться
наподобие
var
  size: cardinal;
  temp: pchar;
begin
  size:=2000000 {объем для освобождения}
  temp:=AllocMem(size);
  FreeMem(temp);
end;
но такой метод достаточно грубый.


Ответить.


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


Вопрос 664:
От: moslit@mail.kz

Помогите не могу настроить компоненту FastReport для Delphi6. В пятой
версии все нормально. Если возможно дайте рекомендации или
какие-нибудь ссылки:


Ответить.


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


Вопрос 665:
От: Alexander Prishchepa

У меня вот какой вопрос:
Как сделать, чтобы форма программы была все время поверх ТОЛЬКО главного
окна программы. Что-то типа плавающих панелей, только форма.


Ответить.


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


Вопрос 666:
От: Dmitriy Kuryshev

Есть таблица с полями 1..31, где 1..31 - числа ммесяца, в этих полях
записано по одномy
символy: А,Б,В,... Как посчитать, сколько каждого символа?
Пpобовал так:
procedure TForm1.Button2Click(Sender: TObject);
var n,a,b,o:integer;
begin
a:=0;b:=0;o:=0;
while not(ApolloTable1.Eof) do
 begin
   for n:=5 to ApolloTable1.FieldCount-1 do
    begin
     case ApolloTable1.Fields[n].AsString of
     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Здесь ошибка Ordinal type
required
      'Б': b:=b+1;
      'О': o:=o+1;
      'А': a:=a+1;
      ^^^^^^^ Hа все 3 действия ошибка Incompatible types: 'Integer' and
'Char'
     end;
    end;
  ApolloTable1['counta']:=a;
  ApolloTable1['countb']:=b;
  ApolloTable1['counto']:=o;
  ApolloTable1.Next;
 end;
end;
Подскажите, что не веpно?


Ответить.


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



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

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

Вопрос 644:
От: Dmitriy Kuryshev

Работаю с базами при помощи компонетов Apollo VCL 5.2 (для базы не
нужен BDE).
С ApolloTable все понятно, все работает. А в ApolloQuery никак не
удается выполнить SQL запрос (он нужен для показа двух связанных
таблиц в Grid'e). Не выходит выполнить запрос даже при использовании
одной таблицы. Постоянно выскакивает ошибка, причем, неизвестная -
ничего не написанно, цитирую: Project Project2.exe raised exception
class EApolloQueryError with messaqe ". Process stoped. Use step or Run
continue. .
procedure TForm1.Button1Click(Sender: TObject);
begin
GetDir(0,s);
ApolloQuery1.DatabaseName:=s;
ApolloQuery1.TableNames[0].Alias:='rab';
ApolloQuery1.TableNames[0].TableName:='testnew.dbf';
ApolloQuery1.sql.Text:='select * from "testnew.dbf" rab';
ApolloQuery1.Active:=true;
end;

Ответить.

Попробуй так:
procedure TForm1.Button1Click(Sender: TObject); begin Get
Dir(0,s); Где объявление "s"? Разберись, КАКОЕ значение поступает в "s". Явно не то, какое ты думаешь. ApolloQuery1.DatabaseName:=s; Уверен, что НЕ ВЕРНО. ApolloQuery1.TableNames[0].Alias:='rab'; ApolloQuery1.TableNames[0].TableName:='testnew.dbf'; ApolloQuery1.sql.Text:='select * from "testnew.dbf" rab'; ApolloQuery1.Active:=true; end; Попробуй так:


Вопрос 645:
От: Vadim Kataev

Как в Дельфях написать простейший браузер аштимээлок (из урл и из
филесов)?

Ответить.

Попробуй так:
Есть стандартный компанент WebBrouser Попробуй так:


Вопрос 646:
От: Vladimir Milukov

В Delphi 3 я пользовался весьма удобной компонентой DBScroll.
Не могу найти этой компоненты для Delphi 4.... 6. Если есть полезные
ссылки, прошу поделится.

Ответить.

Попробуй так:
Попробуй EhLib - отличные компоненты для работы с БД(грид и т
.д.) и для русских бесплатно.


Вопрос 647:
От: Horreap

Я пишу программу, которая перехватывает нажатие всех клавиш в системе
и при нажатие на определённую клавишу выполняет некоторое действие.
У меня такой вопрос: как сделать, чтобы программа реагировала на
клавиши нажатые с alt-ом или ctrl-ом?

Ответить.

Попробуй так:
В обработчике события FormKeyDown формы: procedure TForm
1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if ((Shift = [ssAlt]) and (Key = VK_F10)) then ShowMessage('Нажата комбинация клавиш ALT+F10'); if ((Shift = [ssCtrl]) and (Key = VK_F10)) then ShowMessage('Нажата комбинация клавиш CTRL+F10'); end; Попробуй так:


Вопрос 648:
От: Nikolay K

Хочется, аналогично Explorer-у, вызывать приложения для обработки
файлов, в
зависимости от расширения и пользуясь данными Explorer-а из реестра.
Вопрос:
Как обращаться к приложениям, использующим DDE, а именно как применять в
компонентах Delphi данные из полей Explorer-а: "Сообщение DDE",
"Приложение DDE
не выполняется" и "Документ"?

Ответить.

Попробуй так:
Ну, если отвлечся от WinExec и CreateProcess, и использоват
ь ShellExecute (из модуля ShellApi) то эта процедура практически 100% делает именно то что эксплорер, запускает и выполняемые файлы, и загружает файлы в приложения по умолчанию, и реагирует на интернет линки, причем самому в реестре ничего искать не надо. Попробуй так:


Вопрос 649:
От: Wasya Krasyk

 
Очень бы хотелось узнать ответы на два ВОПРОСА.
 
1.Как сохранить Canvas форми в BMP файл?
2.Как конвертнуть програмно BMP в GIF или JPG?

Ответить.

Попробуй так:
Допустим, Image1 - компонент TImage, содержащий растровое изо
бражение. var MyJpeg: TJpegImage; Image1: TImage; begin Image1:= TImage.Create; MyJpeg:= TJpegImage.Create; Image1.LoadFromFile('TestImage.BMP'); // Чтение изображения из файла MyJpeg.Assign(Image1.Picture.Bitmap); // Назначание изображения объекту MyJpeg MyJpeg.SaveToFile('MyJPEGImage.JPG'); // Сохранение на диске изображения в формате JPEG end; Попробуй так:
1. BitMap:=TBitMap.Create; try Rect:=Bounds(0,0,Form1.Width,Form1.Height); BitMap.Width:=Forn1.Width; BitMap.HeightL=Form1.Height; BitMap.Canvas.CopyRect(Rect,Form1.Canvas,Rect); BitMap.SaveToFile('bitmap.bmp'); finally BitMap.Free; end; Попробуй так:


Вопрос 650:
От: Dabadabiabo

 
Подскажите, можно ли открыть файл через HTTP
и работать с ним также как при открытии с диска?
Например, читать построчно с помощью Readln.
Если можно, то как?

Ответить.

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


Вопрос 651:
От: Yan

Можно ли программно изменить langdriver в парадоксовской базе данных,
написанной еще под MS-DOS? Искал среди API-шных функций для BDE, но
ничего путного не накопал.

Ответить.

Попробуй так:
var List: TStringList; begin List := TStringList.Cr
eate; with List do begin Clear; Add('LANGDRIVER='''xxx''); end; Session.ModifyDriver('CATS', List); List.Free; Попробуй так:
Если хочешь программно, можешь воспользоваться следующей процедурой: uses DbiTypes, DbiProcs, DbiErrs, DB, WinProcs, SysUtils; ...................... procedure ChangeLangDriver( DatabaseName, TableName, LDName: string ); var TblExt: string; Database: TDatabase; TblDesc: CRTblDesc; OptDesc: FLDDesc; OptData: array [0..250] of Char; Cur: hDBICur; Rec: CFGDesc; begin if ( TableName='' ) or ( LDName='' ) then raise Exception.Create( 'Unknown TableName or LDName' ); Database:=Session.OpenDatabase( DatabaseName ); try if Database.IsSQLBased then raise Exception.Create( 'Function ChangeLangDriver working only with dBase or Paradox tables' ); FillChar( OptDesc, SizeOf( OptDesc ), #0 ); FillChar( TblDesc, SizeOf( TblDesc ), #0 ); StrCopy( OptDesc.szName, 'LANGDRIVER' ); OptDesc.iLen := Length( LDName ) + 1; with TblDesc do begin StrPCopy( szTblName, TableName ); TblExt := UpperCase( ExtractFileExt( TableName ) ); if TblExt = 'DBF' then StrCopy( szTblType, szDbase ) else if TblExt = '.DB' then StrCopy( szTblType, szParadox ) else begin AnsiToOEM( StrPCopy( OptData, DatabaseName ), OptData ); if DbiOpenCfgInfoList( nil, dbiREADONLY, cfgPersistent, StrPCopy( OptData, '\DATABASES\' + StrPas( OptData ) + '\DB INFO\' ) Cur ) <> DBIERR_NONE then raise Exception.Create( 'Unknown table type'); try while DbiGetNextRecord( Cur, dbiNOLOCK, @Rec, nil ) <> DBIERR_EOF do if StrComp( Rec.szNodeName, 'DEFAULT DRIVER' ) = 0 then begin StrCopy( szTblType, Rec.szValue ); Break; end; finally Check( DbiCloseCursor( Cur ) ); end; end; iOptParams := 1; pfldOptParams := @OptDesc; pOptData := @OptData; end; StrPCopy( OptData, LDName ); Check( DbiDoRestructure( Database.Handle, 1, @TblDesc, nil, nil, nil, False ) ); finally Session.CloseDatabase( Database ); end; end; Примеры использования: ChangeLangDriver( 'DBDEMOS', 'EMPLOYEE', 'ancyrr' ); ChangeLangDriver( 'DBDEMOS', 'EMPLOYEE.DB', 'ancyrr' ); ChangeLangDriver( 'C:\DELPHI\DEMOS\DATA', 'CLIENTS.DBF', 'db866ru0' ); Попробуй так:
В случае с Dbase мне подсказали хороший способ исправить Языковый драйвер - нужно было лишь посмотреть описание формата базы данных - dbase, найти бит данных, отвечающий за драйвер и потом я экспериментальным путем определила (поменяв драйвер в десктопе, на какое число его надо менять (мне этот способ понравился больше из-за его простоты. А вообще можно еще поменять при помощи компонентов из RxLib) Может это и в случае с твоими базами пройдет? А вот юнит, пример, который я использую, да простит меня тот человек, что прислал мне его - не запомнила его имя, но я благодарю его еще раз за подсказку. Может и вы чего поймете :) Здесь DriverName это полное имя драйвера, как он обозначен в Десктопе. unit UnLD; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Db, StdCtrls, Grids, DBGrids, DBLists, DBTables, BDE; procedure SetLanguageDriver(Table : TTable; const DriverName : string); implementation procedure SetLanguageDriver(Table : TTable; const DriverName : string); const TableTypeNames : array [TTableType] of PChar = (szPARADOX, szPARADOX, szDBASE, szFoxpro, szASCII); var TblDesc : CRTblDesc; LDFieldDesc : FLDDesc; LDName : DBINAME; Database : TDatabase; function GetLanguageDriverName: string; var Buffer: array[0..DBIMAXNAMELEN - 1] of char; begin Result := ''; with TBDEItems.Create(Application) do try ItemType := bdLangDrivers; Active := True; if Locate('DESCRIPTION', DriverName, []) then StrPCopy(Buffer, FieldByName('NAME').AsString) else if DbiGetLdName(PChar(TableTypeNames[Table.TableType]), nil, Buffer) <> 0 then Exit; Result := Buffer; finally Free; end; end; begin Table.DisableControls; Table.Close; // Операция должна производиться над закрытой таблицей Database := Table.OpenDatabase; // Создаем временное соединение if Database.IsSQLBased then //Обрабатываем только PARADOX, DBase, FoxPro, ASCII таблицы и только via NATIVE raise Exception.Create('Невозможно изменение структуры SQL таблиц.'); with TblDesc do try FillChar(TblDesc, SizeOf(CRTblDesc), 0); FillChar(LDFieldDesc, SizeOf(FLDDesc), 0); {заносим имя таблицы в поле szTblName структуры. Если имя таблицы англоязычное, можно обойтись банальным StrCopy. Но в данном варианте должо проходить изменение и для русскоязычных имен таблиц (правда, я этого никогда не проверял) } AnsiToNative(Table.DBSession.Locale, Table.TableName, szTblName, SizeOf(szTblName) - 1); { Все основные поля структуры TblDesc оставляем незаполненными (мы ведь меняем лишь языковый драйвер) и переходим к инициализации дополнительных параметров структуры: iOptParams, pOptData и pFldOptParams. } iOptParams := 1; //Количество передаваемых параметров StrCopy(@LDName, PChar(GetLanguageDriverName)); pOptData := @LDName; //Передаваемое значение - системное имя нового языкового драйвера. StrCopy(LDFieldDesc.szName, 'LANGDRIVER'); LDFieldDesc.iFldNum := 1; //Последовательный номер поля. Не уверен, что его вообще надо заполнять. LDFieldDesc.iLen := StrLen(LDName); //Длина данных в массиве pOptData, соответствующих этому параметру LDFieldDesc.IOffset := 0; //Начальное смещение данных параметра в массиве pOptData pfldOptParams := @LDFieldDesc; //заносим описание структуры данных параметров в структуру описания таблицы Check(DbiDoRestructure(Database.Handle, 1, @TblDesc, nil, nil, nil, False)); finally Table.CloseDatabase(Database); Table.Open; Table.EnableControls; end; end; end. Попробуй так:


Вопрос 652:
От: Андрей Андреевич Пономарев

У меня следующий вопрос:
как читать и писать в порты (com, lpt, и любые др.) в Дельфи?
Может кто-нибудь знает, как обратиться к шине ISA, чтобы попроще и по
функциональней? :)

Ответить.

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


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

Как создать в системе свой виртуальный диск.
А так же потом отключить его.
На подобии того как получается при использовании команды SUBST.

Ответить.

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


Вопрос 654:
От: Калашников Артур

Кто знает где в Internete можна скачать бесплатно
в электронном виде книгу:
Хендерсон Кен. Delphi 3 и системы клиент-сервер. Руководство
разработчика.: Пер. с англ. - К.: Диалектика, 1997. - 786 с. .

Ответить.

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





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

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

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

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

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



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

В избранное