Рассылка закрыта
При закрытии подписчики были переданы в рассылку "Delphi - проблемы и решения" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
Delphi для профессионалов - Раздел 'ВОПРОС-ОТВЕТ'
Информационный Канал Subscribe.Ru |
Рассылка: Delphi для профессионалов
Количество подписчиков: 4765

Раздел "Вопрос-ответ"
Результаты
Вопрос №56: Определение активных подключений
к IB-серверу
Каким образом можно определить имена всех пользователей (Username) подключенных
в данный момент к серверу InterBase?
Ответ №1 (Ivan): Получить количество подключений к базе IB можно так:
Memo1.Lines.Assign( IBDatabaseInfo1.UserNames );
Вопрос №69: Список функций
для экспорта из dll
Кто-нибудь знает, как можно получить список имен функций из экспорта в dll?
Ответ №1 (Fozzgen): хм.. ну и вопрос.. вместе с delphi поставляется программа tdump.exe, работает так: tdump.exe opengl32.dll opengl.txt, потом читаешь opengl.txt.. еще можно просто нажать правой кнопкой и выбрать 'быстрый просмотр' - если этот компонент windows не установлен, то его надо установить.. или взять прогу типа exescope - у меня именно она запускается, если нажать enter на *.dll.
Ответ №2 (Привалов Дмитрий): Т.е. получить список экспортируемых функций? Либо установить виндовый "быстрый просмотр", либо воспользоваться утилитой tdump поставляемой вместе с Delphi. В последнем случае, анализируя текстовой файл, можно получать имена функций и динамически в программе.
Вопрос №77: Перехват
сообщений NET SEND
В Win2k есть замечательная команда NET SEND. Спомощью нее можно без каких
либо проблем пересылать сообщения между компьютерами в сети. Так вот, встал
вопрос о том, чтобы перехватывать таким образом переданные сообщения. (Хочется
САМОМУ сделать рульный месенжер). То есть, мне нужно отловить момент, когда
пришло сообщение на мой компьютер, ну и естественно само сообщение.
Ответ №1 (Vadim): Насколько мне известно передача сообщений в Windows сети идет с использованием так называемых mailslot (так по крайней мере было в Windows 9x). Необходимо открыть mailslot со стандартным именем (имя не помню должно быть в Help) GetMailSlotInfo. Она скажет есть ли там сообщения. Читай их функцией ReadFile.
Вопрос №82: Сетевое
приложение
Подскажите пожалуйста как работать в Delphi с локальной сетью. Я тут сделал
игру - морской бой, и хочется сделать её сетевой.
Ответ №1 (Anton): Компоненты ServerSocket, ClientSocket.
Вопрос №84: Отправка
по Socket-у
Я пытался создать программу для отправки
файлов по Socket, но вечно возникали какиета проблемы. То происходило отсоединения
(Disconnet) или файл вообще не передавался. Плиззз. Напишите маленький листинчиг
передачи файлов на основе Client/Server. Заранее благодарен.
Ответ №1 (Anton): Исходники не сохранились, но принцип такой: сервер посылает блок (8192 максимум), клиент принимает и посылает подтверждение, сервер следущий и т.д. Я использовал еще управляющие коды, типа конец файла, блок весь получен и т.д.
Ответ №2 (Denis Simonenko): TestField - это не файл, а поле в таблице, но с файлом то же самое.
{ посылаем тест в сокет } TestField := TBlobStream.Create(TBlobField(qTests.Fields[5]),bmRead); BufStream := TMemoryStream.Create; BufStream.LoadFromStream(TestField); BufStream.Seek(0, soFromBeginning); GetMem(Buf, BufStream.Size + 1); BufStream.ReadBuffer(Buf^, BufStream.Size); Socket.SendBuf(Buf^, BufStream.Size) = BufStream.Size; TestField.Free; BufStream.Free; FreeMem(Buf); { прием из сокета } try BufLength := Socket.ReceiveLength; GetMem(Buf, BufLength + 1); Socket.ReceiveBuf(Buf^, BufLength); BufStream:= TMemoryStream.Create; BufStream.WriteBuffer(Buf^, BufLength); BufStream.Seek(0, soFromBeginning); reEditWindow.Lines.LoadFromStream(BufStream as TStream); {засовываем сразу же в RichEdit} finally BufStream.Free; FreeMem(Buf); end;
Вопрос №85: Stack overflow
Здраствуйте.
Помогите, если знаете что можно сделать. Вкратце проблема.
Ком Р-133 32M RAM. Delphi 3
есть несколько переменных следующих типов:
linedat = array[1..512] of double;
InLineDat = array[1..256] of integer;
KodData = array[1..2] of InLineDat;
oneline = array[1..1024] of linedat;
outdata = array[1..1024,1..16] of linedat;
и т.д.
Вообщем было все нормально, пока не написал дополнительную процедуру обработки
(из одного массива (object зи парачки приведенных типов) в другой outdata).
После этого работать перестало. Т.е. при входе в процедуру, в которой вызывается
только что написанная возникает ошибка "Stack overflow". Может что
в настройках компилятора можно изменить или комп лучше поменять? Очень надо.
Жду с нетерпением. Tolyan.
Ответ №1 (АндрейV): Без кода трудно сказать, стек может переполниться во многих случаях. Комп тут точно не при чём. Т.к. ты скорей всего передаёшь не ссылку, а значение, то стек и переполняется при входе в функция, т.е. при помещении параметров в стек. Хотя ты пишешь, что ошибка происходит при входе во внешнюю процедуру. В общем кидай код(можешь по мылу), разберёмся.
Ответ №2 (Мельников В.В.): Если у тебя написано что-то типа: Procedure ttt(a,b,c:outdata); То ничего удивительного - все параметры процедуры передаются в стеке, а засунуть в стек 3*16K double (480K однако) может и не получиться :-). Используй передачу по ссылке, например: Procedure ttt(Const a,b:outdata;Var c:outdata);
Ответ №3 (Vadim): Проблема в том, что массивы в процедуры передаются копированием. Поставь var при передаче массива в функцию.
Ответ №4 (Yason): Похоже, ты передаёшь параметры по значению, а не по ссылке. Разница заключается в том, что в первом случае содержимое передаваемых массивов копируется в стек и процедура работает с этими копиями. Во втором случае процедуре фактически передаётся указатель на участок памяти, где находятся параметры.
Варианты решения:
1. Поставить перед параметрами "var"
2. Использовать директиву компилятора для увеличения размера стека
{$M minstacksize,maxstacksize} Но это, по-моему, дурной тон...
Вопрос №86: Частота
звука
Как можно по времени определить частоту
звука(например из MediaPlayer'a)? Задаёшь время (5с., 3с.) - выводит результат
(200 Hz, 300 Hz).
Ответ №1 (URiS): По времени невозможно определить частоту звука, т.к. частота - это количество колебаний за одну секунду. Если тебе нужно определить частоту звука WAV-файла из TMediaPlayer, то воспользуйся этой формулой: WavKHz:=WavFileSize/(MediaPlayer1.Length*2); (ответ в килогерцах) Здесь: WavFileSize - размер WAV-файла, MediaPlayer1 - элемент в Delphi с открытым WAV-файлом. Т.к. в WAV-файле одна частота состоит из двух байтов(WORD), то мы уменьшаем всё это ещё в два раза. Конечно, это плохой способ без учёта заголовка(в совсем уж маленьких файлах частота будет неправильная) и на популярных сейчас MP3 он работать не будет, но однако есть и более цивильные способы. Если нужно что-нибудь чисто по Паскалю то у меня на сайте(http://newff.narod.ru) есть кое-что, или обращайтесь на e-mail: urisff@inbox.ru.
Ответ №2 (Yason): Быстрое преобразование Фурье :)
Вопрос №88: rasapi32.dll
необходимо создать учетную запись для
dial-up соединения под w2000/xp. киньте примером, у кого есть... заранее спасибо.
Ответ №1 (Fozzgen): да пример-то зачем.. просто глянь помощь по RasCreatePhonebookEntry - все четко и понятно написано..
Вопрос №89: Открывание
и сохранение файлов .dbf
Есть форма с dbgrid,datasourse,table,opendialog,savedialog.
Как открывать и сохранять файлы .dbf с диска (с одинаковыми полями), чтоб вносить
в них изменения?
Заранее спасибо.
Ответ №1 (Ведущий рассылки Игорь): В данном случае нужно связать DBGrid с DataSource, т.е. DBGrid через данные через DataSource. DataSource нужно связать с Table. В Table нужно указывать Alias (в данном случае полный путь к файлу таблицы) и TableName - имя файла таблицы. Дальше открыть таблицу и работать... :). Уж дальше как - читай хелп, а то выйдет целый урок.
Вопрос №90: Вставка
формул через OLE в Excel из Delphi
Вопрос: Как заставить Excel расчитать значения по формуле введенной из Delphi
Значения из Delphi в лист Excel
вставляются просто: sheet.cells[x,x]:='10'. А вот при попытке вставки строки
типа '=МАХ(E1:F1)', ничего не происходит, Excel воспринимает выражение как строку
(#ИМЯ). Но если открыть Excel и нажать на ячейке Enter, расчет чудесным образом
происходит.
Ответ №1 (Anton): Все проще, никаких enter не нужно. range[a1].formula:=''; и кстати, были у меня проблемы, короче если число посылаешь, то нужно range[a1].value использовать.
Ответ №2 (Привалов Дмитрий): Такой прикол обычно происходит, когда пытаешься использовать русские названия формул, типа '=МАКС(E1:F1)', а так вообще-то набирай лучше Sheet.Cells[x,x].Formula := '=MAX(E1:F1)'.
Ответ №3 (Хлынов Олег Викторович): Это ты пытался присвоить значение свойству Value объекта формула, а для формул у объекта Cells есть свойство свойство Formula, вот этому свойству и надо присваивать текст формулы. То есть вот так: sheet.cells[x,x].Formula := 'МАХ(E1:F1)'.
Ответ №4 (iStat): В свое время подобную проблему я решил вводя координаты ячеек в формате RC. Например, для суммирования 10 вышестоящих ячеек по столбцу формула вводится следующим образом (R - текущая строка, С - текущий столбец): =SUM(R[-10]C:R[-1]C); сумма 10 ячеек слева по строке: =SUM(RC[-10]:RC[-1]). Будут вопросы, пиши.
Ответ №5 (Максим Попов): Я уже сам где-то увидел, что нужно писать вместо sheet.cells[x,x].value:='=max()' -> sheet.cells[x,x].formula:='=max()'. Так что вопрос можно сниамть с повестки дня :-)
Вопрос №93: функция
Delphi 6
Мне нужна функция перевода цифр в прописные
буквы. Пример 123(Сто двадцать три). Помогите пожалуйста.
Ответ №1 (Anton):
unit FullSum; interface uses SysUtils; //----------------- Copyright (c) 1999 by Константин Егоров //----------------- mailto: egor@vladi.elektra.ru function SumNumToFull(Number:real):string; implementation function SumNumToFull(Number:real):string; var PartNum, TruncNum, NumTMP, D: integer; NumStr : string; i, R : byte; Flag11 : boolean; begin D:=1000000; R:=4; TruncNum:=Trunc(Number); //выделяем рубли if TruncNum<>0 then repeat PartNum:=TruncNum div D; Dec(R); D:=D div 1000; until PartNum<>0 else R:=0; // перевод рублей FOR i:=R DOWNTO 1 DO BEGIN Flag11:=False; NumTMP:=PartNum div 100; {выделение цифры сотен} case NumTMP of 1: NumStr:=NumStr+'сто '; 2: NumStr:=NumStr+'двести '; 3: NumStr:=NumStr+'триста '; 4: NumStr:=NumStr+'четыреста '; 5: NumStr:=NumStr+'пятьсот '; 6: NumStr:=NumStr+'шестьсот '; 7: NumStr:=NumStr+'семьсот '; 8: NumStr:=NumStr+'восемьсот '; 9: NumStr:=NumStr+'девятьсот '; end; NumTMP:=(PartNum mod 100) div 10; {выделение цифры десятков } case NumTMP of 1: begin NumTMP:=PartNum mod 100; case NumTMP of 10: NumStr:=NumStr+'десять '; 11: NumStr:=NumStr+'одиннадцать '; 12: NumStr:=NumStr+'двенадцать '; 13: NumStr:=NumStr+'тринадцать '; 14: NumStr:=NumStr+'четырнадцать '; 15: NumStr:=NumStr+'пятнадцать '; 16: NumStr:=NumStr+'шестнадцать '; 17: NumStr:=NumStr+'семнадцать '; 18: NumStr:=NumStr+'восемнадцать '; 19: NumStr:=NumStr+'девятнадцать '; end; case i of 3: NumStr:=NumStr+'миллионов '; 2: NumStr:=NumStr+'тысяч '; 1: NumStr:=NumStr+'рублей '; end; Flag11:=True; end; 2: NumStr:=NumStr+'двадцать '; 3: NumStr:=NumStr+'тридцать '; 4: NumStr:=NumStr+'сорок '; 5: NumStr:=NumStr+'пятьдесят '; 6: NumStr:=NumStr+'шестьдесят '; 7: NumStr:=NumStr+'семьдесят '; 8: NumStr:=NumStr+'восемьдесят '; 9: NumStr:=NumStr+'девяносто '; end; NumTMP:=PartNum mod 10; {выделение цифры единиц} if not Flag11 then begin case NumTMP of 1: if i=2 then NumStr:=NumStr+'одна ' else NumStr:=NumStr+'один '; 2: if i=2 then NumStr:=NumStr+'две ' else NumStr:=NumStr+'два '; 3: NumStr:=NumStr+'три '; 4: NumStr:=NumStr+'четыре '; 5: NumStr:=NumStr+'пять '; 6: NumStr:=NumStr+'шесть '; 7: NumStr:=NumStr+'семь '; 8: NumStr:=NumStr+'восемь '; 9: NumStr:=NumStr+'девять '; end; case i of 3: case NumTMP of 1 : NumStr:=NumStr+'миллион '; 2,3,4: NumStr:=NumStr+'миллиона '; else NumStr:=NumStr+'миллионов '; end; 2: case NumTMP of 1 : NumStr:=NumStr+'тысяча '; 2,3,4: NumStr:=NumStr+'тысячи '; else if PartNum<>0 then NumStr:=NumStr+'тысяч '; end; 1: case NumTMP of 1 : NumStr:=NumStr+'рубль '; 2,3,4: NumStr:=NumStr+'рубля '; else NumStr:=NumStr+'рублей '; end; end; end; if i>1 then begin PartNum:=(TruncNum mod (D*1000)) div D; D:=D div 1000; end; END; //перевод копеек PartNum:=Round(Frac(Number)*100); if PartNum=0 then begin SumNumToFull:=NumStr+'00 копеек'; Exit; end; NumTMP:=PartNum div 10; {выделение цифры десятков } if NumTMP=0 then NumStr:=NumStr+'0'+IntToStr(PartNum)+' ' else NumStr:=NumStr+IntToStr(PartNum)+' '; NumTMP:=PartNum mod 10; {выделение цифры единиц} case NumTMP of 1: if PartNum<>11 then NumStr:=NumStr+'копейка' else NumStr:=NumStr+'копеек'; 2,3,4: if (PartNum<5) or (PartNum>14) then NumStr:=NumStr+'копейки' else NumStr:=NumStr+'копеек'; else NumStr:=NumStr+'копеек'; end; SumNumToFull:=NumStr; end; //---SumNumToFull end.Ответ №2 (URiS): У сеня на сайте http://newff.narod.ru скоро будет куча всяких Sources на паскале, в том числе и эта функция. Заходи и иди в раздел "Паскаль".
Вопрос №94: Спрятать
главную форму
Как сделать, чтобы при закрытии пользователем
главной формы (нажатие крестика в системном меню), форма не закрывалась, а пряталась?
В обработчике формы OnClose поставить Action := caHide - не помогает, форма
закрывается и программа заканчивает свою работу
Предполагаемое
решение: Действительно не работает!!! :(. Нужно писать Action:=caNone;
Hide;
Ответ №1 (Stepanenko): Надо делать так:
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CanClose:=false;
Form1.Hide;
end;Ответ №2 (Alexander S. Fyodorov):
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := caNone; Application.Minimize; end;Ответ №3 (anton): Попробуй событие OnCloseQuery.
Вопрос №96: Interbase
можно ли написать триггер, при записи
в таблицу записывались бы данные в таблицу Paradox, и еще как записать в таблицу
файл?
Предполагаемое
решение: Через поля BLOB.
Ответ №1 (Anton): Запись в BLOB. Чтение аналогично.
ms:=TMemoryStream.Create;
ms.LoadFromFile('~temp.doc');
ms.Seek(0, soFromBeginning);
TBlobField(sqInsert.FieldByName('worddoc')).loadfromstream(mS);
Как узнать размеры формы после нажатия кнопки restore (в правом верхним углу окна), до того как она нажата? Форма максимизирована или минимизирована
Предполагаемое решение: Через свойство формы WindowState.
Ответ №1 (АндрейV): Сомневаюсь, что это можно узнать. Все сообщения(WM_GETMINMAXINFO, WM_SYSCOMMAND), так или иначе связанные с разворачиванием(восстановлением) окна, изменяют размеры ПОСЛЕ того, как восстановление произойдёт(может я ошибся, поэкспериментируй). События WM_SIZING, WM_WINDOWPOSCHANGING и WM_WINDOWPOSCHANGED тоже посылаются при восстановлении, но они посылаются также и просто при изменении размеров, и узнать, развернул пользователь окно или просто изменил размеры, нельзя. Но есть простой выход: при любом изменении размеров(событие OnResize) сохранять эти размеры во внешних переменных, и при разворачивании (WM_GETMINMAXINFO, WM_SYSCOMMAND) ДО того, как окно развернётся, использовать их для своих нужд. Вот и всё! :) Как говорится: "Только без паники!" :)
Ответ №2 (Yason): GetWindowPlacement.
Сабж, т.е. как удалить .exe-файл самой программы? Говорят, API CreateFile с флагом удаления после закрытия, у меня не получается.
Ответ №1 (АндрейV): Самое простое: создать в программе .bat-файл или, если знаком с ассемблером и опкодами команд(в принципе можно выцепить из отладчика - это для ассемблера), .com-файл. Сама винда не даст так просто удалить запущенный файл, необходимо другое приложение(hInstance). Эти файлы досовские, полностью грузятся в память, поэтому могут удалить себя, но сначала безжалостно удаляют того, кто их породил :) т.е. того, кого нам и нужно удалить - наш exe-шник, а заодно и всё, что связано с программой - нормальные герои не оставляют следов ;) Если что, пиши...
P.S. А CreateFile сначала всё-таки должен СОЗДАТЬ файл, у тебя же exe-шник уже СОЗДАН, раз ты его запускаешь ;)Ответ №2 (Стародуб Игорь): Не усложняй. При закрытии запускаешь програмку, основное назначение которой - удалить файл.
Ответ №3 (iStat): Не знаю как через API, я бы вставил в реестр HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce строковый параметр 'del my_file.exe' и перезагрузился. Будут вопросы, пиши.
Ответ №4 (Yason): Microsoft Systems Journal - How can we write a program that can delete itself http://microsoft.com/msj/archive/SF9C.htm.
Как в Delphi поменять разрешение экрана? Через ddraw.dll (DirectX) или ещё как?
Предполагаемое решение: Сообщение Windows WM_DISPLAYCHANGE.
Ответ №1 (АндрейV): Неа :) MSDN: The WM_DISPLAYCHANGE message is sent to all windows when the display resolution has changed. То бишь это сообщение посылается всем окнам, когда разрешение экрана сменилось. А сменить разрешение можно функцией ChangeDisplaySettings(до кучи: получить разрешение экрана можно функцией EnumDisplaySettings).
Ответ №2 (Fozzgen): первый вариант (win32 API) - ChangeDisplaySettings, второй (ddraw):
.... var DD1:IDirectDraw; //само собой надо иметь //что-то вроде directx.pas..:-).. .... try if DirectDrawCreate(nil, DD1, nil) <> DD_OK then raise Exception.Create('Ошибка - DirectDrawCreate()'); DD1._AddRef; if DD1.QueryInterface(IID_IDirectDraw2, DD) <> DD_OK then raise Exception.Create('Ошибка - QueryInterface()'); DD1._Release; if DD.SetCooperativeLevel(Handle, DDSCL_FULLSCREEN or DDSCL_EXCLUSIVE or DDSCL_NOWINDOWCHANGES) <> DD_OK then raise Exception.Create('Ошибка - SetCooperativeLevel()'); if DD.SetDisplayMode(640, 480, 16, 0, 0) <> DD_OK then //<-вот... raise Exception.Create('Ошибка - SetDisplayMode()'); except on E:Exception do begin ShowMessage (E.Message); Close; //в смысле форма закрывается, если она была..:-).. end; ....Ответ №3 (АндрейV): Так выставляется новое разрешение:
procedure TForm1.FormCreate(Sender: TObject); var td : tdevmode; begin with td do begin dmsize:= sizeof(td); dmbitsperpel := 16; dmpelswidth:=1024; dmpelsheight:=768; dmfields:= dm_bitsperpel or dm_pelswidth or dm_pelsheight or dm_DisplayFrequency; changedisplaysettings (td,cds_fullscreen); end; end;А так возвращается предыдущее разрешение:
procedure TForm1.FormDestroy(Sender: TObject); var td : tdevmode absolute 0; begin changedisplaysettings (td,cds_fullscreen); end;
Новые вопросы
Вопрос №61: Как
сграбить кусочек "чужой" DLL
Кстати, в одной из последних статей в рассылках, я кажется нашел идею решения
проблемы, но т.к. в С++ (как и во всем остальном не очень силен), не знаю как
этим воспользоваться... Речь идет о библиотеках для MASM
Предложить свой вариант решения можно здесь
или воспользовавшись формой обратной связи (для HTML-формата).
Вопрос №72: ShellListView
Как ShellListView "заставить" отображать содержимое локальной папки
(картинки) в режиме "Эскизы страниц"
Предложить свой вариант решения можно здесь
или воспользовавшись формой обратной связи (для HTML-формата).
Вопрос №74: Список служб
Win2000
как получить список запущенных сервисов в Win2000 & XP
Предложить свой вариант решения можно здесь
или воспользовавшись формой обратной связи (для HTML-формата).
Вопрос №81:
Перехват вывода строки из консольн. приложения
1) Имеется консольное приложение, которое выводит текстовые сообщения в
своём окне (написана на Fortran'е).
2) А также имеется моё приложение написанное на Delphi
Вопрос:
Как и с помощью чего можно осуществить перехват сообщения вывода строки (текста)
из консольного приложения, и последующей передачей этой строки в приложение,
написанное в Delphi.
Я примерно знаю, что это делается через CreateProcess() -> lpStartupInfo
-> hStdOutput, hInOutput. Но вот что делать дальше, я, увы, не знаю... Я
новичок в API поэтому, если вас не затруднит, покажите или пришлите, пожалуйста,
маленький примерчик на мой e-mail.
Предложить свой вариант решения можно
здесь или воспользовавшись
формой обратной связи (для HTML-формата).
Вопрос №83: Как сделать
Decision Cube на прямом доступе к IB (FIBC и т.п.)
Кто знает как используя прямой доступ к InterBase реализовать работу с Decision
Cube?
Предложить свой вариант решения можно
здесь или воспользовавшись
формой обратной связи (для HTML-формата).
Вопрос №87: Компонент Pervasive.SQL
2000i
Помогите пожалуйста найти компонент для Pervasive.SQL 2000i Service Pack
3 General Release - March 2001 и для Btrieve Version 7.90.000 Build 230.
Предложить свой вариант решения можно
здесь или воспользовавшись
формой обратной связи (для HTML-формата).
Вопрос №91: вопросы
по БД
1. есть dbf
файл записаный 1С.Бухгалтерией. его char set - ascii в кодировке DOS. Установка
драйвера db866ru0 для Dbase в программе не помогает - все равно в DBGrid видны
закорлючки. Если загрузить его в Excel и записать"как...", то все
смотриться нормально, или зайти в DataBase Explorer и лапками поменять Table
Lenguages. Как можно программно установить свойства таблицы на нужную кодовою
страницу.
2. Прога работает с Paradox и Dbase. Что нужно чтобы она работала
на компе, где не установлен Delphi и BDE.
Предложить свой вариант решения можно здесь
или воспользовавшись формой обратной связи (для HTML-формата).
Вопрос №92: Связывание
таблиц PARADOX
Cвязываю несколько таблиц в Paradox7
по одному полю (используя вторичные индексы),все работает великолепно но при
редактировании любой из таблиц возникает ошибка INDEX IS READ ONLY . Помогите!!!
Предложить свой вариант решения можно здесь
или воспользовавшись формой обратной связи (для HTML-формата).
Вопрос №95: Проблемы
с печатью графики
В моей программе (Delphi5, Win98)
строится диаграмма (график)с помощью компонента TChart (первоначально на форме)на
основании введенных пользователем данных, после этого пользователь может распечатать
на принтере результаты: сначала идет некоторый текст, затем диаграмма и затем
снова некоторый текст. Я пробовал программу на целом наборе принтеров в разных
местах (всюду под Win98) и полученные результаты сильно различались: на матричных
и струйных принтерах все работает как задумано, а вот на лазерных - большие
странности: на старом HP Laserjet II все работает, на HP 1200 при попытке печати
- "недопустимая операция", на некоторых других (тоже HP) текст печатается
нормально, графические примитивы рисуются нормально, а вот битмэп, в который
я копирую диаграмму - не печатается. (Должен заметить, что попытки печати "напрямую"
- с помощью методов самого компонента TChart - привели к неудовлетворительным
результатам). Не могли бы ли Вы что-нибудь посоветовать в такой ситуации? В
общих чертах процедура печати выглядит следующим образом:
procedure TForm1.BtnPrintClick(Sender: TObject); var bm :tbitmap; r :trect; s :string; PX,PY, y,x,j : Integer; y1 :integer; begin // Рисование диагр. на "виртуальной" канве with chart1 do begin bm:=tbitmap.create; bm.width:=chart1.width; bm.height:=chart1.height; PrintPartialCanvas(bm.Canvas, Rect(0,0,chart1.width,chart1.height)); end; with printer, printer.canvas do begin orientation:=poPortrait; pen.style:=styles[1]; begindoc; //Прямоугольник по периметру страницы with r do begin left:=round(0.1*Printer.PageWidth); right:=round(0.9*Printer.PageWidth); top:=round(0.1*Printer.Pageheight); bottom:=round(0.9*Printer.Pageheight); end; pen.width:=1; Rectangle(r); { Вывод на печать нескольких строк текста с помощью процедуры textout(x,y,'Некоторый текст'); } //ОПРЕДЕЛЕНИЕ ПРЯМОУГОЛЬНИКЯ ДЛЯ ПЕЧАТИ ДИАГРАММЫ С СОБЛЮДЕНИЕМ ПРОПОРЦИЙ ДИАГРАММЫ x:=round(0.15*Printer.PageWidth); R.Left:=x; R.Right:=Printer.PageWidth-x; y:=y+120; R.Top:=y; R.Bottom:=y+(r.right-r.left)*chart1.Height div chart1.Width* GetDeviceCaps(Printer.Handle,LOGPIXELSY) div GetDeviceCaps(Printer.Handle,LOGPIXELSX); //ВЫВОД ДИАГРАММЫ НА БУМАГУ StretchDraw(r,bm); //ПЕЧАТЬ РАМКИ ВОКРУГ ДИАГРАММЫ polyline([point(r.left,r.top),point(r.right,r.top), point(r.right,r.bottom),point(r.left,r.bottom),point(r.left,r.top)]); { СНОВА вывод на печать нескольких строк текста с помощью процедуры textout(x,y,'Некоторый текст'); } enddoc; end; bm.free; end;
Предложить свой вариант решения можно здесь или воспользовавшись формой обратной связи (для HTML-формата).
Вопрос №101: Доступ
к MySQL
Как мне организовать доступ к MySQL-серверу
из локалки (для D7). Дайте методу в общем виде или скажите, где скачать тексты.
Если кто-нибудь занимался подобными вещами, дайте пожалуйста E-Mail для обращения
за помощью.
Предложить
свой вариант решения можно здесь
или воспользовавшись формой обратной связи (для HTML-формата).
Вопрос №102: Форма окна
Как сделать окно формы любой формы,
не обязательно прямоугольной?
Предложить свой вариант решения можно здесь
или воспользовавшись формой обратной связи (для HTML-формата).
Вопрос №103: Оцифровка
Очень нужна программа на Delphi
делающая оцифровку ч/б изображения в BMP-файле, т.е. допустим есть изображение
синусоиды сохраненной в BMP-файле, необходимо получить массив координат точек
этой синусоиды.
Предложить свой вариант решения можно здесь
или воспользовавшись формой обратной связи (для HTML-формата).
Вопрос №104: Курсор ожидания
Как заставить мышь отображать курсор
ожидания на всём экране, причём если окно приложения небольшое (100*100), а
функция ScreenCursor отображает нужный курсор только на области формы приложения?
Предложить свой вариант решения можно здесь
или воспользовавшись формой обратной связи (для HTML-формата).
Вопрос №105: Загрузка раньше Explorer
Как можно загрузить программу на
Delphi6 раньше всего под Windows 98(эта программка спрашивает логин и пароль
пользователя, вроде как Login в Windows NT)?
Предполагаемое решение: грузись сервисом - будет работать как
на 9x, так и на NT.
Предложить свой вариант решения можно здесь
или воспользовавшись формой обратной связи (для HTML-формата).
Вопрос №106: Как отображать форму
при долгом соединении с большой БД?
При соединении с сервером с установленной
БД MySQL при количестве ~ 100 000 записей в таблице долго отрисовывается основная
форма. Затем работа и перемещение по БД идут быстро. Как лучше отобразить (заретушировать)
процесс загрузки базы данных ? Думаю с аналогичными проблемами рано или поздно
столкнуться все разработчики в области баз данных.
Предполагаемое решение: Отобразить модальное окошко для поргресса и в
процессе выполнения запросов вызывать Application.ProcessMessages;
(обработка сообщений программой) или форму перерисовывать (Redraw).
Предложить свой вариант решения можно здесь
или воспользовавшись формой обратной связи (для HTML-формата).
Вопрос №107: Подключение *.CHM
Подскожите, как подключить *.CHM
(HTML Help) к приложению, как стандвртный хелп. и чтобы работала контекстная
справка!
Предложить свой вариант решения можно здесь
или воспользовавшись формой обратной связи (для HTML-формата).
Вопрос №108: Динамические меню
Знает ли кто-нибудь, как создавать и удалять элименты мень-TMenuItem(не важно
TPopup или TMainMenu), т.е. динамически создавать их при инициализации программы.
Предполагаемое решение: При установке Delphi пример на эту тему капируется
в папку примеров. Смотри там.
Предложить свой вариант решения можно здесь
или воспользовавшись формой обратной связи (для HTML-формата).
Вопрос №109: Базы данных на Дельфи
Можно ли создать локальную базу
данных их имеющихся компонент Дельфи,не испольпользуя Интерфейс: Table, DBView...http://на
подобные библиотеки.
Предполагаемое решение: А почему бы и нет? Главное - найти нужные компоненты.
Предложить свой вариант решения можно здесь
или воспользовавшись формой обратной связи (для HTML-формата).
Вопрос №110: Чтение wav-файла
как получить данные информационной части wav-файла т.е. цифры в текстовый файл?
Предложить свой вариант решения можно здесь
или воспользовавшись формой обратной связи (для HTML-формата).
Вопрос №111: Dag&Drop "Программа
<---> Explorer (Total commander, etc.)"
Видел много вариантов получения в FAQ,
но при первом обращении к DragQueryFile вылетала ошибка. Все варианты обрабатывали
WMDropFiles. Пришлите мне, пожалуйста, рабочий код этой схемы. Как можно самому
создать очередь вля D&D в другие приложения?
Предложить свой вариант решения можно здесь
или воспользовавшись формой обратной связи (для HTML-формата).
Вопрос №112: Порты...
Хотельсь узнать, где можно найти
обьяснение к обращению к портам в Delphi...
Предложить свой вариант решения можно здесь
или воспользовавшись формой обратной связи (для HTML-формата).
Вопрос №113: Выделенные строки TDBGrid
как параметр запроса
Подскажите, пожалуйста, красивое решение. Как можно использовать значения
одного из столбцов выделенных строк TDBGrid как параметр SQL-запроса вида:
Select .... Where 'поле БД' in ['значения
одного из столбцов выделенных строк']
Заранее огромное спасибо.
Предложить свой вариант решения можно здесь
или воспользовавшись формой обратной связи (для HTML-формата).
Вопрос №114: Контекстное меню как
в эксплорере
Мне необходимо сделать вызов контекстного
меню как в эксплорере. Т е я задаю имя файла а мне в ответ это меню. Как это
сделать? Прошу пример кода:). Пробовал откопать в модуле ShellControls - уже
очень всё запутано:-(. Или может знаете нормальный компонент типа ShellControls(ShellListView&ShellTreeView)
с исходниками, быстродействующий и не глючный :)
Предложить свой вариант решения можно здесь
или воспользовавшись формой обратной связи (для HTML-формата).
Вопрос №115: Предварительный просмотр
печати
В книге по Delphi6 нашел пример построения
предварительного просмотра печати на TPrintPrevPanel = class(TPanel) путем открытия
Canvas для рисования. Также пришлось переписать метод Paint у TPanel, так как
ее собственный содержит метод FillRect, заливающий канву после каждой перерисовки.
Но тут возникла новая проблема: содержимое части канвы, уведенной за пределы
экрана, теряется бесследно. Что сделать для предотвращения этого? Может у кого-то
есть примеры других способов предв. просмотра? Прошу ответ присылать по почте
на real@krw.ru , выхода в интернет не имею.
Заранее благодарен за ответ.
Предложить свой вариант решения можно здесь
или воспользовавшись формой обратной связи (для HTML-формата).
Вопрос №116: Верхний
и нижний индексы
TRichEdit позволяет работать с многими
параметрами текста, но не дает одного: верхний и нижний индексы. Во всяком случае,
я не нашел, как это сделать. Подскажите, есть ли способ не затрачивая много
сил работать с верхним/нижним индексами? Или есть более продвинутый компонент?
Предложить свой вариант решения можно здесь
или воспользовавшись формой обратной связи (для HTML-формата).
Вопрос №117: TPanel
Добрый день! У меня возникла проблема
с заливкой текстурой Панели. Подскажите как организовать заливку панели текстурой
наподобие заливки формы.
Предложить свой вариант решения можно здесь
или воспользовавшись формой обратной связи (для HTML-формата).
Вопрос №118: Передача переменной
с Клиента на Сервер
Что нужно для того чтобы передать значения
переменной с компютора Клиента на комп Сервер (какой код)
Предложить свой вариант решения можно здесь
или воспользовавшись формой обратной связи (для HTML-формата).
Вопрос №119: Перехват обращений к
диску
стоит задача защиты своих файлов от
несанкционированного использования. Для этого я кодирую файлы а раскодировка
происходит в моей программе на лету при обращение к моим файлам. Как перехватить
обращения системы к файловой системе?
Предложить свой вариант решения можно здесь
или воспользовавшись формой обратной связи (для HTML-формата).
Вопрос №120: Локальные таблицы FoxPro
2.5
Как создаются фокспрошные индексы .cdx?
BDE, похоже, их очень не любит. Какая технология Delphi6 оптимальна для сосуществования
с FoxPro 2.5 при субже на файл-сервере? Подозреваю, что ADO.
Предложить свой вариант решения можно здесь
или воспользовавшись формой обратной связи (для HTML-формата).
Все ответы присылайте по адресу: delphi-reply@igp.org.ua
Все подсказки присылайте по адресу: delphi-hint@igp.org.ua
Со всем списком советов можно познакомиться по адресу: http://igp.org.ua/delphine/.
Наш проект Delphine можно найти по следующей ссылке: http://igp.org.ua/products/delphine/.
Заходите в наш форум: Форум Delphi-профессионалов. Адрес: http://forum.igp.org.ua/.
Здесь Вы найдете ответы на все Ваши вопросы!
http://subscribe.ru/
E-mail: ask@subscribe.ru |
Отписаться
Убрать рекламу |
В избранное | ||