← Апрель 2001 → | ||||||
1
|
||||||
---|---|---|---|---|---|---|
2
|
3
|
4
|
5
|
7
|
8
|
|
9
|
10
|
11
|
12
|
14
|
15
|
|
16
|
17
|
18
|
19
|
20
|
21
|
|
23
|
24
|
25
|
26
|
28
|
29
|
|
30
|
За последние 60 дней 2 выпусков (1-2 раза в 2 месяца)
Сайт рассылки:
http://www.interface.ru, www.itshop.ru
Открыта:
16-01-2001
Адрес
автора: comp.soft.win.mydelphi-owner@subscribe.ru
Статистика
-3 за неделю
Проблемы и решения в Delphi #13
Проблемы и решения в Delphi - выпуск 13 от 13.04.2001.
Пятница...Тринадцатое...
Выпуск...Тринадцатый....
ВСЕ ВОПРОСЫ СПРОСИТЬ ПРЕДЛОЖИТЬ АРХИВЫ СКОЛЬКО НАС
Доброго Вам времени суток уважаемый читатель.
Настоятельно рекомендую прежде, чем спрашивать, заказать
себе список всех вопросов с ответами, указав в теме письма 'VSEVOPR'
(если только Вы на 100% не уверены в иcключительности своего вопроса).
Немного расслабимся чтобы дать побольше отвеченных вопросов.
Сегодня в выпуске :
~~~~~~~~~~~~~~~~~~~
1. Отвеченные вопросы.
2. Очередные вопросы.
3. Ищу подельника.
~~~~~~~~~~~~~~~~~~~
1. Отвеченные вопросы.
----------------------
Вопрос 21:
От: Сергиенко Максим
Здравствуйте.
Как, не используя компоненты вкладки Servers ExcelApplication, получить
доступ к встроенным свойствам экселевского документа (т.к. "Организация" или
"Автор").
Какие именно функции WinAPI нужно использовать?
Ответить.
Ответ 1:
WinAPI здесь ни причем совсем. Надо создать COM обект
того интерфейса что Вам нужен. Объяснять слишком долго
- надо знать COM технологии, но это весьма просто.
Читните книгу Калверта по дельфи, создайте интерфейс
файл к нужному объекту (Меню Дельфи/Project/Import
Type Library) - там список всех обектов, можно
импортировать в Unit и просмотреть все интерфейсы и
функции с параметрами, а описывать так это займет
листа 3-4...
Ответ 2:
Работа с MSExcel смотрите
http://programming.dax.ru/lessons/delphi/les3/les3.shtml
Вопрос 22:
От: fedorenkov
>Для того, чтобы окошко закрылось, достаточно поставить галочку в
>свойствах *.pif файла этого пакетного файла - MY_PROG.pif : закрывать окно
>после завершения работы.
> ICQ : 89533941
> mailto:Dtarasov@kms.dvgd.ru (МПС-*.mps)
Добрый день Дмитрий .
Спасибо за совет, но хотелось бы , если есть такая возможность,
использовать сообщения Windows или возможно какие-нибудь
другие методы , но командой из управляющей программы.
Программа устанавливается у пользователей с неопределенными
заранее путями и нет желания на каждой машине настраивать *.pif,
да и заботиться о его наличии при работе тоже не ах как охота.
Ответить.
Ответ 1:
Для рачала определимся
var
wnd : hWND; // где wnd - указатель (handle) окна
Если Вы знаете этот указатель то закрыть окно очень просто
postmesasage(wnd, WM_Close, 0, 0);
Получить указатель окна несложно. Для этого необходимо знать его класс (class) и заголовок (caption).
Заголовок окна указывается всегда в верхней части окна (на синей полоске).
С классом дело обстоит несколько сложнее.
Для своих программ, написанных на DELPHI Вы класс знаете. Помните?
TForm1 = clfss(TForm);
TForm1 - это и есть класс Вашего окна. А как быть если класс неизвестен?
В комплект Delphi входит утилита WinSight32. Она Вам поможет.
Закройте все лишнее, включая Delphi. Запустите Ваше приложение и из него вызовите другое приложение (в
Вашем случае - приложение DOS) и обратите внимание на заголовок окна (скорее всего это будет просто
название Вашего приложения DOS).
Теперь запустите WinSight32. Найдите строку, которая содержит этот заголовок. В этой строке помимо
цифровой информации имеется две текстовки в фигурных скобках. Первая - это класс окна, вторая - его
заголовок. Для примера я запустил в оконном режиме Нортон коммандер. Заголовок этого окна - NC, а
класс- tty.
Завершите приложение DOS, но не закрывайте окно. Обратите внимание, что заголовок окна
изменился (в моем примере заголовок стал (Сеанс завершен) - NC).
Вот и все. Теперь у Вас есть вся необходимая информация для программного закрытия окна.
var
wnd : hWND;
begin
wnd := findwindow('tty', '(Сеанс завершен) - NC'); // для примера
if wnd > 0
then postmessage(wnd, WM_Close, 0, 0);
Окно закрыто. Учтите только, что в вызове findwindow истользуются параметры типа PCHAR, а не string.
Дерзайте !!!
Ответ 2:
неважно где сделан PIF к EXE если он есть,
то параметры подцепятся.
так что при инсталляции просто копируй его тоже и все.
Вопрос 23:
От: YDB
Почему EXE-шник на Delphi имеет такой большой размер (>200KB) ?
Можно ли сделать программу размером 10-80 KB?
Дима.
Ответить.
Ответ 1:
> Почему EXE-шник на Delphi имеет такой большой размер (>200KB) ?
Все очень просто, когда Вы пользуетесь комонентами, формами,
то это все определенный код. Т.е. этот код зашивается в *.exe
всегда. Например в библиотеке QQQ1 хранится код кнопки, окошка
редактирования и чего-то еще. Как только Вы используете кнопку
вся библиотека добавляется к *.exe - и окошко, и что-то еще.
Таких библиотек в Delphi много.
> Можно ли сделать программу размером 10-80 KB?
Можно, но тогда вместе с *.exe Вам придется распространять и
библиотеки. Для этого поставьте в опциях проекта галочку
на Packages\Build with runtime packages.
Ответ 2:
Для создания небольших программ была например написана библиотека KOL.
Искать на http://xcl.cjb.net Там же куча доков по ней, в том числе и
на русском. В итоге, написанные программы имеют фантастически маленькие
размеры, так как большая часть библиотеки написана на ассемблере.
Да, программировать на KOL трудно, но результат превосходит все
ожидания. Пример программы (мною написанной) на KOL в аттаче.
Ответ 3:
Есть такой упаковщик файлов ASPack: exe сжимает до 30-40%
<http://www.aspack.com)> Адресок - http://www.aspack.com
Ответ 4:
Можно сделать и поменьше ( приблизительно 30% от исходника). Для этого надо
использовать упаковщик исполняемых файлов. НО... при запуске программы
исполняемый модуль будет "разворачиваться" в памяти, что замедлит запуск (
но не существенно).
Вопрос 24:
От: "Литвак Лёва"
Как сделать скриншот и поместить его в Image?
Ответить.
Ответ 1:
var
Dwh : HWND;
DRect: TRect;
DescDC : HDC;
Canv : TCanvas;
image.Width:=screen.width;
image.height:=screen.height;
DWH := GetDesktopWindow;
GetWindowRect(DWH,DRect);
DescDC := GetDeviceContext(DWH);
Canv.Handle := DescDC;
DRect.Left:=0;
DRect.Top:=0;
DRect.Right:=screen.Width;
DRect.Bottom:=screen.Height;
Image.Canvas.CopyRect(DRect, Canv, DRect);
Ответ 2:
Я применил перевод в JPG так он занимает меньше места ..
этот метот описывался в советах по Дельфи..
uses
ShellAPI, jpeg;
procedure TMain.Button1(Sender: TObject);
var
bmp: TBitmap;
DC: HDC;
Jpg: TJpegImage;
begin
try
bmp:= TBitmap.Create;
Jpg:= TJpegImage.Create;
bmp.Height:=Screen.Height;
bmp.Width:=Screen.Width;
DC:=GetDC(0); // Дескpиптоp экpана
bitblt(bmp.Canvas.Handle, 0, 0, Screen.Width, Screen.Height,
DC, 0, 0, SRCCOPY);
Jpg.Assign(Bmp); // Назначание изображения объекту MyJpeg
Jpg.SaveToFile('c:\test.jpg'); // Сохранение
ReleaseDC(0, DC);
finally
Bmp.Free;
jpg.Free;
end;
end;
end;
procedure TMain.FormCreate(Sender: TObject);
begin
Application.OnException := MyExcept;
end;
Ответ 3:
Совет взят из статьи "Удаленное администрирование компьютеров в сетях
Windows", опубликованной в журнале "Программист" N1'01.
(http://www.programme.ru)
Используй функцию BitBlt. Например:
B := TImage.Create;
ScreenDC := GetDC (0);
BitBlt (B.Canvas.Handle, 0, 0, Screen.Width, Screen.Height, ScreenDC, 0, 0,
SCRCOPY);
ReleaseDC (0, ScreenDC);
Вопрос 25:
От: Andrey Romanchenko
Hello ,
есть сервер который раздает вопросы клиентам.
клиентские программы показывают вопрос пользователю и ждут от него
ответа.
за сервером сидит оператор который нажимает Start (пошло
тестирование) и всем клиентам показался первый вопрос. как только
клиент ответил на вопрос оператор за сервера видит ответ и может
дать разрешение на следующий вопрос. (тут может быть 2 режима что
следующий вопрос выдается автоматом или по команде оператора)
должно замеряться время которое думал клиент над вопросом.
таким образом хочется иметь систему когда пользователи сидят и
отвечают на вопросы, а оператор в реальном времени видит ситуацию и
может воздействовать на клиентов (например после нескольких
неправильных ответов вообще выкинуть клиента из теста с сообщением
что он больше может не напрягаться.)
подобная система мне нужна совсем не для ГАИ (а кстати вот там бы
она тоже пргодилась.)
Ответить.
Ответ 1:
Ну и что ты предлагаешь ???
Написать за тебя программу ???
Это очень просто пишется но надо сидеть и писать ....
За день можно эту программку вылизать так что она будет работать как
часы ....
Это не вопрос а просьба типа напишите А?? И мне киньте !!!!
Ответ 2:
Существует несколько наборов компонент для обмена сообщениями между приложениями (в том числе и
функционирующими на разных машинах в локальной сети) в реальном времени. Я использую для этих целей компонент
mdMailSlot. Где именно он был скачан, сейчас не помню. Думаю, что найти в сети можно без особого труда.
Ответ 3:
В качестве основы для решения данной проблемы
предлагаю использовать технологию DCOM.
Создаются 2 типа приложений:
1. Серверное. Включает в себя COM - сервер и клиента,
т.е. может работать с аналогичным сервером (исполь-
зуется компонент DCOMConnection из вкладки MIDAS
панели компонентов Delphi).
2. Клиентское. Построено аналогично.
Оба приложения отличаются только по функциональности.
Между приложениями организовывается связь с помощью процедур,
описанных в Type Library каждого приложения (т.е. регистра-
ция клиентов, посылка вопросов и т.д.). Далее все наращивается
просто - по таймеру на серверном приложении определяется время
между посылкой вопроса и приходом ответа и т.д.
Самый простой пример использования этой технологии -
Delphi5\Demos\Midas\Login. Там есть пример сервера и клиента
с регистрацией. В каталоге Midas помимо этого еще куча примеров.
Как писать приложения с использованием DCOM описано в Delhpi Help.
Вопрос 26:
От: GPE
Здравствуйте!У меня такой вопрос: как на форме отобразить array[1..10,1..10]
of TImage, я недавно начал изучать Delphi и хочу
написать "Морской бой".
Ответить.
Ответ 1:
Использовать Array, далеко не лучший путь.
А его простота ограничит твои возможности в улучшении программы.
Лучший вариант - написать обьект, можно сделать его и потомком от
TImage. У него будет несколько свойств, например, положение его на
экране, логическое значение - занято-ли поле кораблем и т.д.
В числе остальных будет и метод Paint, который на основании текущих
свойств нарисует эту ячейку.
Конечно тебе придется попотеть, чтобы понять, как работает ООП.
Но это основа Delphi и любого другого современного языка
програмирования. Только так ты сможеш создавать серьезные программы.
Ответ 2:
Попробуйте использовать DrawGrid.
Ответ 3:
Если только начал, то возьми TGrid - будет проще, а
если надо все-таки с TImage - то прийдется в ручную
через Canvas рисовать
Ответ 4:
Товарисчь шутник?
А ктож за тебя будет беречь и охранять системные ресурсы пользователя? 100 Imageов на одной форме, это ж надо
додуматься! Не, так не пойдёт!
Достаточно использовать один TImage. А сделай лучше так:
создаешь один TImage, рисуешь горизонтальные и вертикальные линии (чтоб клеточка получилась).
Рисуем клеточки (TImage 200x200, размер клеточки 20x20) :
var
x,y:integer;
begin
for x:=1 to 10 do
begin
form1.Image1.Canvas.MoveTo(x*20,0);
form1.Image1.Canvas.LineTo(x*20,Form1.Image1.height);
end;
for y:=1 to 10 do
begin
form1.Image1.Canvas.MoveTo(0,y*20);
form1.Image1.Canvas.LineTo(Form1.Image1.width,y*20);
end;
end;
Ну и допустим нужно тебе определить в какую из клеточек пользователь мышой тыкнул, это можно так сделать:
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
const
clw=20;//ширина клеточки. Ты её знаешь так как сам рисовал клеточки
clh=20;//высота клеточки.
var
xc,yc:integer;
begin
xc:=(x div 20)+1;
yc:=(y div 20)+1;
form1.Caption:=format('%dx%d',[xc,yc]);
end;
Вопрос 27:
От: Igor Nagirnyak
Здравствуйте.
Меня интересует возможность передачи звука через локальную сеть. То есть
то что говориться в микрофон на одной машине параллельно слышно из
колонок другой.
Ответить.
Ответ 1:
Это конечно же можно сделать и самому, но без специальных знаний в
области кодирования-декодирования звука работать все будет только
в локальной сети, да и то с задержками.
Вопрос 28:
От: Murky
... Появилось что нибудь новее чеи Delphi 5?
Ответить.
Ответ 1:
Да пишут, что есть уже Delphi 6. Там много нового
в плане работы с интернет. Я еще не видел.
Вопрос 29:
От: Dizzer
Как в консольном приложении можно задать цвет текста, вывести текст в
указанном месте экана?
Ответить.
Ответ 1:
В консольном приложении Delphi, как и в приложениях ДОС вывод на экран,как и позиционирование,
отчистка, задание шрифтов, цвета фона и текста осуществляетс теми же процедурами что и в Borland/Turbo
Pascal.
Ответ 2:
Цвет Текста задается командой SetTextColor(Color), параметр Color - целое число от 0 до 15.
Вывод текста в указанном месте экрана задается командой GotoXY(X,Y,Text).
X,Y-координаты экрана.
Text - переменная типа String.
Ответ 3:
Вот текст модуля, напоминающего про наш любимый ДОС (CRT-like):
unit UffCRT;
// written by Michael Uskoff, Apr 2001, St.Petersburg, RUSSIA
interface
procedure ClrScr;
procedure SetAttr(attr: word);
function GetAttr: word;
procedure GotoXY(aX,aY: integer); // zero-based coords
function WhereX: integer;
function WhereY: integer;
implementation
uses Windows;
var
UpperLeft: TCoord = (X:0; Y:0);
hCon: integer;
procedure GotoXY(aX,aY: integer);
var aCoord: TCoord;
begin
aCoord.x:=aX;
aCoord.y:=aY;
SetConsoleCursorPosition(hCon,aCoord);
end;
procedure SetAttr(attr: word);
begin
SetConsoleTextAttribute(hCon,attr);
end;
function WhereX: integer;
var ScrBufInfo: TConsoleScreenBufferInfo;
begin
GetConsoleScreenBufferInfo(hCon,ScrBufInfo);
Result:=ScrBufInfo.dwCursorPosition.x;
end;
function WhereY: integer;
var ScrBufInfo: TConsoleScreenBufferInfo;
begin
GetConsoleScreenBufferInfo(hCon,ScrBufInfo);
Result:=ScrBufInfo.dwCursorPosition.y;
end;
function GetAttr: word;
var ScrBufInfo: TConsoleScreenBufferInfo;
begin
GetConsoleScreenBufferInfo(hCon,ScrBufInfo);
Result:=ScrBufInfo.wAttributes;
end;
procedure ClrScr;
var fill: integer;
ScrBufInfo: TConsoleScreenBufferInfo;
begin
GetConsoleScreenBufferInfo(hCon,ScrBufInfo);
fill:=ScrBufInfo.dwSize.x*ScrBufInfo.dwSize.y;
FillConsoleOutputCharacter(hCon,' ',fill,UpperLeft,fill);
FillConsoleOutputAttribute(hCon,ScrBufInfo.wAttributes,fill,UpperLeft,fill);
GotoXY(0,0);
end;
initialization
hCon:=GetStdHandle(STD_OUTPUT_HANDLE);
end.
Теперь можно творить такое:
uses UffCRT;
....
ClrScr;
SetAttr($1E);
GotoXY(32,12);
Write('Hello, master !');
ReadLn;
...
Вопрос 30:
От: ION
Как в программе запустить DLL собственного производства, а то программа
огромная?
Ответить.
Ответ 1:
В принципе, при использовании DLL достаточно просто описать
ф-ю которую будешь использовать. А создать проект нужно как Dll.
Попробуйте - и появятся более конкретные вопросы.
Вопрос 31:
От: Andrew G.
как работать с файлми *.xls (например, запись результатов расчетов в него)?
С уважением Гриько Андрей.
Ответить.
Ответ 1:
Используй библиотеку XL Report от Afalina Soft...
Ответ 2:
Приведу пример кода из проги которую когда-то делал
Для начала получим доступ к EXCEL
function TSetupReports.CreateExcel: variant;
begin
try
Result := CreateOLEObject('Excel.Application.8');
Result.Visible := true;
except
try
Result := CreateOLEObject('Excel.Application.5');
Result.Visible := true;
except
ShowMessage('Невозможно открыть Microsoft Excel.');
end;
end;
end;
затем в том месте где хотим в EXCEL запихать что-либо
try
V := CreateExcel;
V.WorkBooks.Add;
V.ActiveSheet.Cells[1, 1].Value := 'Подразделение';
V.ActiveSheet.Cells[1, 2].Value := 'Товарная группа';
V.ActiveSheet.Cells[1, 3].Value := 'Сумма на начало';
V.ActiveSheet.Cells[1, 4].Value := 'Сумма на конец';
qrStock.quFirst.First;
I := 2;
while not qrStock.quFirst.EOF do begin
V.ActiveSheet.Cells[I, 1].Value := qrStock.quFirstOtdel.Value;
V.ActiveSheet.Cells[I, 2].Value := qrStock.quFirstTGName.Value;
V.ActiveSheet.Cells[I, 3].Value := qrStock.quFirstSumB.Value;
V.ActiveSheet.Cells[I, 4].Value := qrStock.quFirstSumE.Value;
I := I+1;
qrStock.quFirst.Next;
end;
V := UnAssigned;
except
exit;
end;
если есть желание записывать данные в определенный файл EXCEL
и на определенный лист
то необходимо посмотреть команды VISUAL BASIC FOR APPLICATION
для EXCEL типа OPEN FILE, SET ACTIVESHEET и т.п.
названия команд условные я их не знаю,
но что-то должно быть в этом духе
Ответ 3:
Создать ODBC Alias на этот файл, после этого открыть
его через BDE используя стандартные TTable, TQuery и
работать как с базой данных
Ответ 4:
Я такую проблему решил таким образом:
На форму кинул 3 кнопки (можно и через одну всё сделать - зависит от
требований):
1-ая кнопка - выделение всей таблицы (или конкретного столбца)
2-ая кнопка - копирование выделенного фрагмента в буфер
3-яя кнопка - открытие MS Excel через ShellExecute
Ну а в MS Excel-ле просто жмешь ctrl+v и сэйвишь как тебе надо.
Ответ 5:
Создай сервер автоматизации и вперед....
К примеру:
procedure TForm5.Button1Click(Sender: TObject);
var
i,r,q : Integer;
ExBase : Variant;
begin
Form1.Query6.Close;
Form1.Query6.Open;
Form1.Query6.First;
i :=0;
r :=11;
q :=1;
// Вот здесь вся петрушка, начинаем создавать сервер автоматизации.....
ExBase := CreateOleObject('Excel.Sheet');
ExBase.Application.Visible:= True;
ExBase.Application.ActiveWindow.Close;
ExBase.Application.Workbooks.Open('C:\Bti\Налоги.xls');
ExBase.Application.ActiveWindow.WindowState := wsMaximized;
ExBase.Application.Worksheets['Налоговая'].Activate;
ExBase.Application.Worksheets['Налоговая'].Range['D2'].Value
:=Form3.Table1Adres.Value;
While not Form1.Query6.EOF do
begin
ExBase.Application.Worksheets['Налоговая'].Range['F'+IntToStr(r)].WrapText :=True;
ExBase.Application.Worksheets['Налоговая'].Range['A'+IntToStr(r)].Value :=q;
ExBase.Application.Worksheets['Налоговая'].Range['B'+IntToStr(r)].Value :=Form1.Query6Plase.Value;
ExBase.Application.Worksheets['Налоговая'].Range['C'+IntToStr(r)].Value :=Form1.Query6Streets.Value;
ExBase.Application.Worksheets['Налоговая'].Range['D'+IntToStr(r)].Value :=Form1.Query6N_haus.Value;
ExBase.Application.Worksheets['Налоговая'].Range['E'+IntToStr(r)].Value :=Form1.Query6N_kv.Value;
ExBase.Application.Worksheets['Налоговая'].Range['F'+IntToStr(r)].Value :=Form1.Query6.FieldByName('Ob_pl').AsString+' м.кв.';
ExBase.Application.Worksheets['Налоговая'].Range['G'+IntToStr(r)].Value :=Form1.Query6Vlad.Value;
ExBase.Application.Worksheets['Налоговая'].Range['H'+IntToStr(r)].Value :=Form1.Query6N_st.Value;
Form1.Query6.Next;
r :=r+1;
q :=q+1;
end;
end
Вопрос 32:
От: Vladiator
Доброго времени суток!
Delphi я изучаю вторую неделю. В принципе, до этого много лет писал на
паскале, так что не совсем чайник. Сейчас я пишу программу несколко не
по своей специальности. Части моей программы представляют собой
различные приложения: текстовый редактор, построитель графиков и т.д.
Все это (набранный текст, построенные графики и т.д.) рано или поздно
выдается на принтер. Вопрос в следующем: Как организовать
предварительный просмотр страницы? Может быть, существуют какие-то
стандартные объекты? Или нужно все писать "вручную".
Литературы у меня крайне мало, а сроки поджимают. Поиски в сети ни к
чему не привели.
Ответить.
Ответ 1:
Используйте генератор отчетов QuickRep, а в нем метод
QuickRep1.Preview; .
Ответ 2:
Если уж ты выводишь на принтер свои данные, то на экран-то какие проблемы?
Напиши, как ты выводишь на принтер, ответим как выводить на экран.
Прим.: На принтер обычно выводится ч/з Printer.Canvas, а на экран
какой_то_компонент_может_быть_Image1.Canvas, т.е просто решить проблему с
масштабированием по X и по Y (у принтеров часто бывает, что разрешение по x
и по y не совпадает, напр. матричный)
Ответ 3:
А лучше использовать FastReport. Гораздо удобнее, проще и сильнее.
См. www.fastreport.ru. Все описания - на русском!
Вопрос 33:
От: vfeoktistov
Добрый день!
У меня такой вопрос: Как при помощи Dephi можно запустить любую
программу находящуюся на одном из логических дисков?
С уважением Владимир
Ответить.
Ответ 1:
ShellExecute(h,'open','my.exe',nil,nil,SW_RESTORE).
Вопрос 34:
От: Остапенко Евгений
Здравствуйте!
Как получить хэндл активного "чужого" окна (созданного не моей
программой)?
Ответить.
Ответ 1:
function FindWindow(ClassName, WindowName: PChar): HWnd;
Находит pодительское окно веpхнего уpовня с совпадающими ClassName и WindowName.
Не осуществляет поиск дочеpних окон.
Паpаметpы:
ClassName: Имя класса окна (заканчивающееся пустым символом, nil - если все классы).
WindowName: Текстовый заголовок окна или 0, если все окна.
Возвpащаемое значение:
Описатель окна; 0 - если такого окна нет.
Ответ 2:
var
h:HWND;
h:=GetActiveWindow;
или
h:=GetTopWindow;
А вобще не вредно иногда и самому в справку заглянуть.
Вопрос 35:
От: Dizzer
Как можно сделать ссылку на почтовый адресс?
Т.е. при нажатии скажем на myemail@mail.ru
запускается почтовая программа, где в поле То: уже стоит указанный адрес.
Ответить.
Ответ 1:
ShellExecute(h,'open','mailto:myemail@mail.ru',nil,NIL,SW_RESTORE).
Ответ 2:
ShellExecute(Form1.handle,'open','mailto:myemail@mail.ru',nil,nil,SW_SHOWNORMAL);
И не забудь влючить в uses модуль ShellAPI.
"mailto:' это вобще стандартное в HTML
если тебе нужно, чтоб и тема письма сразу стояла, то делай
'mailto:myemail@mail.ru?Subject=tema'
а если нужно чтоб и часть текста письма вставлялся автоматически, то
'mailto:myemail@mail.ru?Subject=temaamp&Body=text'
Вопрос 36:
От: Константин Михайлович Воротов
Здраствуйте Дмитрий.
Пишу прогу по определению конфигурации PC.
Столкнулся с проблемой определения объема больших жестких дисков.
Как это можно сделать. Подскажите плз.???
Ответить.
Ответ 1:
Можно так:
Total := DiskSize(0);
AmtFree := DiskFree(0);
где total и AmtFree:int64;
Ответ 2:
Не забудьте что функции возвращают результат типа
Int64 а не Integer
Вопрос 37:
От: Alexander Polenov
Добрый день!
Каким образом, используя Дельфи, сделать html-страничку? Хотелось бы простой
примерчик. Можно на Дельфи создать чат, форум, магазин?
Ответить.
Ответ 1:
Сделать это просто в любом языке программирования, ведь HTML cтраничка
это текстовый файл заполненный по определенным правилам.
В Delphi ecть специальные компоненты, которые находятся на вкладочке
Internet. В любом случае необходимо знание HTML.
Пример готового чата есть в стандартных примерах Delphi. Для
Delphi5 - Delphi5\demos\internet\chat.
Пробуйте, и появятся более конкретные вопросы.
Вопрос 38:
От: Подгорный Дмитрий Александрович
Здравствуйте.
хочется написать прогу которая работает с Excelем.
Но имеет место один глюк: создаю переменные wrksheet/book и все такое,
присваиваю им объекты. в конце после всего вызываю destroy переменных по
иерархии с конца. вроде все верно, НО... эта прожка работает ТОЛЬКО ОДИН
РАЗ. превый раз пускаю - все ОК. открывается excel. есть связь tip-top.
запускаю второй - упс, открывается только одна панель инструментов.
следующий раз можно запустить ТОЛЬКО создав новый проект и перенеся туда
модуль. (тестировалась :) на разных версиях ОС и MSoffice).
что делать?
Ответить.
Ответ 1:
Я эти переменные уничтожал вот так
var EXCEL: variant;
EXCEL :=CreateOLEObject('Excel.Application.8');
EXCEL.WorkBooks.Add;
EXCEL.ActiveSheet.Cells[1, 1].Value := 'Hello';
EXCEL := UnAssigned;
Ответ 2:
Попробуйте вызывать Free а не Destroy
А вобщем так можно сказать : У меня тут прога на пару мегов , ЛЮДИ
ПОМОГИТЕ заочно найти ошибку...... Ну кто вам поможет?!
Вопрос 39:
От: Alexandr M. Kolomiets
Привет
Каким образом из приложения, написанного в Delphi, можно зайти в
Интернет по определенному адресу (например, http://subscribe.ru
<http://subscribe.ru> ), т.е. как эмулировать ссылку, подобную HTML тегу
<A>?
Ответить.
Ответ 1:
Если использовать стандартный броузер, то так -
ShellExecute(h,'open','http://subscribe.ru',nil,nil,SW_RESTORE);
Вопрос 40:
От: Vilicinskii, Alexei
Здравствуйте все ....
Вопрос такого характера:
как бы организовать лог(когда зашли, что трогали, как трогали(RW), когда
вышли) посетителей моей машыны(W9X) в локалке, и желательно чтоб грамотно
....
чтоб не так тормозило ...... :)
Понимаю что вопрос сложный но хотяб идею и где искать
Заранее благодарен,
Lolik
Ответить.
Ответ 1:
Ответ на вопрос "Проблемы и решения в Delphi ": Есть готовая программа
которая пишет лог, называется StatWin. Посмотри, может чем поможет.
Андрей.
Вопрос 41:
От: Anna
Hello Dtarasov,
Привет. Как осуществить поиск работая с базой данных '*.dbf',
програмным путем, не используя Database Desktop. Спасибо.
Ответить.
Ответ 1:
Если вы используете BDE, то независимо от типа базы пользуйтесь
компонентом TTable и его методами -
Table.Locate - последовательный поиск c перемещением указателя на
запись;
Table.Lookup - поиск без позиционирования;
Table.FindKey - поиск по индексу.
Вопрос 42:
От: Sam Savinov
Добрый день!
Каким образом можно сделать, чтобы на экране (в какой нить форме,
может memo, может ещё чего) можно сделать вывод форматированного
текста с изображением, и чтоб со скролом ;-).
Sam
Ответить.
Ответ 1:
Нужен RichEdit, поддерживающий спецификацию RTF-2
Возьмите RxRichEdit из Rx Lib
Вопрос 43:
От: Sam Savinov
Добрый день!
Каким образом в Делфях задать приоритет выполнения программы?
SAM
Ответить.
Ответ 1:
Может так.
SetThreadPriority(GetCurrentThread,THREAD_PRIORITY_TIME_CRITICAL);
Ответ 2:
Если коротко:
uses Windows;
...
SetPriorityClass(GetCurrentProcess,REALTIME_PRIORITY_CLASS);
// устанавливает максимальный приоритет текущему приложению
...
Существует два несколько различающихся понятия: приоритет процесса
(приложения) и приоритет потока. Приоритет потока задаётся
относительно приоритета процесса (т.е. приоритеты складываются).
Вот пример приложения (без форм, WinAPI). Выставляет приоритет
приложения в REALTIME_PRIORITY_CLASS, создаёт поток с приоритетом
THREAD_PRIORITY_TIME_CRITICAL. Этот поток не передаёт управление
никаким (!!!) другим приложениям, если не обрабатывать сообщения
внутри потока, т.е. он имеет высочайший приоритет (численно равный 39).
program Project1;
uses Unit1 in 'Unit1.pas';
begin
DoIt;
end.
unit Unit1;
interface
procedure DoIt;
implementation
uses Windows;
function MyThread(p: pointer): integer; far;
var t: integer;
begin
t:=GetTickCount;
repeat
// в этом цикле мы висим, если не обрабатывать сообщения !
until GetTickCount-t > 10000; // висеть не более 10 секунд
MyThread:=0; // результат, возвращаемый завершенным потоком
end;
procedure DoIt;
var b: bool;
myThrID: integer;
begin
SetPriorityClass(GetCurrentProcess,REALTIME_PRIORITY_CLASS);
// устанавливаем приоритет приложения
myThrID:=CreateThread(nil,0,@MyThread,nil,CREATE_SUSPENDED,myThrID);
// создайм "спящий" поток MyThread
b:=SetThreadPriority(myThrID,THREAD_PRIORITY_TIME_CRITICAL); // 39 !
// устанавливаем приоритет созданного потока
if b then MessageBox(0,'Press OK to run the thread','Confirm',MB_OK)
else MessageBox(0,'Cannot set priority','Confirm',MB_OK);
ResumeThread(myThrID);
// активизируем поток
MessageBox(0,'Thread is active','Success',MB_OK);
// данное диалоговое окно не получит управления до завершения
// потока, т.к. в потоке нет обработки сообщений
SetThreadPriority(myThrID,THREAD_PRIORITY_NORMAL);
// возвращаем нормальный приоритет
TerminateThread(myThrID,0);
// "насильно" завершаем поток
SetPriorityClass(GetCurrentProcess,NORMAL_PRIORITY_CLASS);
// возвращаем приоритет процесса
MessageBox(0,'Press OK to exit','Stop it',MB_OK);
end;
end.
Ответ 3:
Есть функция API
BOOL SetPriorityClass(
HANDLE hProcess, // handle to the process
DWORD dwPriorityClass // priority class value
);
В HELP'е MS SDK о ней рассказано подробней
Вопрос 44:
От: Igor Tolstik
Приветик!
Это то, что я говорил:
1).
procedure TForm1.Label1Click(Sender: TObject);
begin
ShellExecute(h,'open','http://www.irop.de/',nil,nil,SW_RESTORE);
end;
[Error] Unit1.pas(28): Undefinierter Bezeichner: 'ShellExecute'
[Error] Unit1.pas(28): Undefinierter Bezeichner: 'h'
Такая помощь для начинающих не подходит (не работает).
2).
RX у меня нет. Что это такое и где его взять - нет пояснений!
3).
Элементарные знания HTML уже есть. Так как есть страничка,
но что такое ASAPI никогда не слышал и не представляю себе,
т.е. как заносить данные в файл (таблицу) я ответа не получил.
4).
Табл. Excel как *.dbf сохранил, но как в BDE открыть... не понимаю.
Кто это умеет, тот не нуждается. Кто нет - тому не поможет!
С ув. Игорь
Ответить.
Ответ 1:
> [Error] Unit1.pas(28): Undefinierter Bezeichner: 'ShellExecute'
В разделе 'uses' добавьте ShellApi.
В разделе 'var' добавьте h : HWND.
> RX у меня нет. Что это такое и где его взять - нет пояснений!
RX - это набор бесплатных компонент.
Взять можно по адресу - http://www.rxlib.com/ .
Ответ 2:
Для того, чтобы открыть файл базы данных (в частности *.dbf) надо в создать
компонент TTable, в инспекторе объектов свойствам Database Name и Table Name
компонента TTable указать соответствующие значения т.е. путь к файлу (или
псевдоним (alias)) и има файла (это можно делать и в ходе работы программы),
а далее работать с компонентом TTable.
Ответ 3:
Если не думать, то действительно не поможет.
Попробуйте поставить курсор за последней буквой названия процедуры и жмите
ctrl-f1. Если хоть немного дружите с английским, то не сложно понять что нужно подключить
уже описанный выше модуль и определить переменную (это же не бейсик!!!)
про БДЕ
на вкладке Databases нажимаете правую кнопку, находите New.
оставляете стандартный драйвер. параметр Path заменяете на путь к файлу.
сохраняем. пытаемся открыть. получилось - хорошо. не получилось - придется думать.
могут быть проблемы с русскими буквами - но это другая песня.
а если есть желание читать/писать со/на лист екселя, то для этого есть компоненты с вкладки
Servers, правда для этого опять придется читать и думать, так как никто ведь не сказал КАК ЭТО настраивать.
Ответ 4:
По нормальному ввобщето это делается так:
в uses прописываем ShellAPI
Потом в событии в котором требуется открыть урлу, или написать по мылу
пишем:
Const
URL : String = 'http://www.myportal.ru;
begin
...
ShellExecute(0,'open',pChar(URL),NIL,NIL,SW_SHOWNORMAL);
Вопрос 45:
От: sanglier
Hello, !
Здравствуйте, Дмитрий!
У меня к Вам два вопроса.
Первый. Каким образом можно организовать многострочные заголовки
столбцов в компоненте SnringGrid?
Второй. Не могли бы Вы помочь ссылкой или как-либо иначе, чтобы найти
методику создания Help-файлов с помощью продукта Билла Гейтса MS Help
Workshop (конечно на русском языке)?
Ответить.
Ответ 1:
Здесь лежит HTML Help ... это файлы которые имеют расширение chm ... вся
справка теперь дедается именно так.
http://msdn.microsoft.com/library/tools/htmlhelp/wkshp/htmlhelp.EXE
Ответ 2:
В Инете есть более удобные средства для создания MS Help.
Вот этот мне понравился: Helpamp&Manual http://www.ec-software.com/hmpage.htm
Он может создавать HELP в формате WinHelp и в HTML.
Вопрос 46:
От: Алексей Москаленко
Привет. Если можешь ответь пожалуста-----очень надо.
1. Как программно отключить мышь (BlockInput в программе почему-то не
работает на W95)
2.Как программно эмулировать зажатую мышь
3.Как закрыть окно приложения (*.chm) вызванное ShellExecute
4.Как в chm перейти через командную строку к нужной странице
Ответить.
Ответ 1:
1.
Отключить мышь?
ShowCursor(false); Устроит так?
2.
//непроверено - просимулировать нажатие клавиши мыши
procedure SendMouseClick(x,y:integer;wHandle:THandle);
begin
sendmessage(wHandle,WM_LBUTTONDOWN,MK_LBUTTON,x+(y shl 16));
sendmessage(wHandle,WM_LBUTTONUP,MK_LBUTTON,x+(y shl 16));
application.processMessages;
end;
Ответ 2:
1. Это может выглядеть смешно, но попробуйте
Screen.Cursor:=crNone;
Вопрос 47:
От: anton
Вопрос простой. Есть ли аналог Дельфи - среды программирования
интерфейсов БД - на Си. Правильно ли я понимаю назначение Дельфи?
Ответить.
Ответ 1:
Строго говоря Delphi не является СУБД, но в настоящее время разработка
хоть сколько - нибудь серьезных приложений практически не возможна
без использования БД. Поэтому в Delphi(и не только) предусмотрен некий
транслятор для подключения к базам данных различного типа. Для Delphi
это - BDE.
Почти полным аналогом Delphi является СиБилдер. Существует масса
компонент, которые разрабатываются для них обоих, так как
оба используют одну VCL.
Ответ 2:
Для дельфи это не только БДЕ.
А еще АДО и куча вариантов прямого доступа.
не считая случаев использования технологий КОМ, МИДАС, КОРБА
естественно для билдера все тоже.
Вопрос 48:
От: Yuriy Gonchar
Уже больше месяца пытаюсь разыскать DDG компоненты для Delphi 5.
Когда-то давно попадалась такая штука для 4-х.
Но к сожалению у меня не сохранилась.
И старые программки, использующие эти компоненты доработать не
получается :-((
Может кто знает где можно взять?
Ответить.
Ответ 1:
Могу прислать по почте 3.6 Mb.
Admin@optima-farm.if.ua
Вопрос 49:
От: Dizzer
Здравствуйте.
> > Как можно сделать ссылку на почтовый адресс?
> > Т.е. при нажатии скажем на myemail@mail.ru
> > запускается почтовая программа, где в поле То: уже стоит указанный
адрес.
>
> ShellExecute(h,'open','mailto:myemail@mail.ru',nil,nil,SW_RESTORE).
>
Почемуто он ругается на ShellExecute :undeclared identifier
Может что то в разделе uses нужно указать?
Ответить.
Ответ 1:
Совершенно верно - ShellApi.
Вопрос 50:
От: Irinka
Здравствуйте!
Не подскажете, с помощью чего посылать и считывать данные с COM
порта, а также менять параметры (биты данны, четность...).
Ответить.
Ответ 1:
КомПорт!!!
http://www.softlist.ru/cgi-bin/program.cgi?id=3537
Ответ 2:
Я использую для этого следующие команды:
var dcb : Tdcb;
Com : THandle;
Com:=CreateFile('Com2',Generic_Read+Generic_Write,0,nil,Open_Existing,FILE_ATTRIBUTE_NORMAL,0);
для открытия,
GetCommState(Com,dcb);
dcb.BaudRate := CBR_9600;
dcb.ByteSize := 8;
dcb.Parity := 2;
SetCommState(Com,dcb);
для инициализации,
WriteFile(Com,buffer,Count,Respond,nil);
ReadFile(Com,buffer,Count,Respond,nil);
для работы.
Ответ 3:
Ниже представлен класс для работы
с COM-портом. Протестирован в Windows 95.
Класс выдернут из контекста, так что не ручаюсь
в компиляции с первого раза, однако все функции
работы с COM очевидны.
Iouri
unit Unit1;
interface
uses
Windows;
type
TComPort = class
private
hFile: THandle;
public
constructor Create;
destructor Destroy; override;
function InitCom(BaudRate, PortNo: Integer; Parity: Char;
CommTimeOuts: TCommTimeouts): Boolean;
procedure CloseCom;
function ReceiveCom(var Buffer; Size: DWORD): Integer;
function SendCom(var Buffer; Size: DWORD): Integer;
function ClearInputCom: Boolean;
end;
implementation
uses
SysUtils;
constructor TComPort.Create;
begin
inherited;
CloseCom;
end;
destructor TComPort.Destroy;
begin
CloseCom;
inherited;
end;
function TComPort.InitCom(BaudRate, PortNo: Integer; Parity: Char;
CommTimeOuts: TCommTimeouts): Boolean;
var
FileName: String;
DCB: TDCB;
PortParam: String;
begin
result := FALSE;
FileName:='Com'+IntToStr(PortNo); {имя файла}
hFile := CreateFile(PChar(FileName),
GENERIC_READ or GENERIC_WRITE,0,nil,
OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0 );
if hFile = INVALID_HANDLE_VALUE then exit;
//установка требуемых параметров
GetCommState(hFile,DCB );//чтение текущих параметров порта
PortParam:='baud='+IntToStr(BaudRate)+' parity='+Parity+' data=8 stop=1 '+
'octs=off';
if BuildCommDCB(PChar(PortParam),DCB) then begin
result:=SetCommState(hFile,DCB) and
SetCommTimeouts(hFile,CommTimeOuts);
end;
if not result then CloseCom;
end;
procedure TComPort.CloseCom;
begin
if hFile<>INVALID_HANDLE_VALUE then
CloseHandle(hFile);
hFile:=INVALID_HANDLE_VALUE;
end;
function TComPort.ReceiveCom(var Buffer; Size: DWORD): Integer;
var
Received: DWORD;
begin
if hFile=INVALID_HANDLE_VALUE then
raise Exception.Create('Не открыта запись в Com порт');
if ReadFile(hFile,Buffer,Size,Received,Nil) then begin
Result:=Received;
end
else raise Exception.Create('Ошибка приема данных: '+IntToStr(GetLastError));
end;
function TComPort.SendCom(var Buffer; Size: DWORD): Integer;
var
Sended: DWORD;
begin
if hFile=INVALID_HANDLE_VALUE then
raise Exception.Create('Не открыта запись в Com порт');
if WriteFile(hFile,Buffer,Size,Sended,Nil) then begin
Result:=Sended;
end
else raise Exception.Create('Ошибка передачи данных: '+IntToStr(GetLastError));
end;
function TComPort.ClearInputCom: Boolean;
begin
if hFile=INVALID_HANDLE_VALUE then
raise Exception.Create('Не открыта запись в Com порт');
Result:=PurgeComm(hFile,PURGE_RXCLEAR);
end;
end.
Ответ 4:
1) Открываем порт используя функию
hCom := CreateFile('COM2',GENERIC_WRITE or
GENERIC_READ,0,nil,OPEN_EXISTING,0,0);
2) Для получения/установки параметров порта используем
GetCommState(hCom, dcb);
SetCommState(hCom, dcb);
4) Для установки всяких таймаутов используются функци
SetCommMask(hCom,EV_RXCHAR or EV_ERR);
GetCommTimeouts(hCom,DefaultCommTOuts);
SetCommTimeouts(hCom,DefaultCommTOuts);
5) Для посылки/чтения, например байта, используйте
WriteFile(hCom,Value,1,dw,nil);
ReadFile(hCom,x,1,dw,nil);
Ответ 5:
Прежде всего опишите в private или public (как Вам удобнее)
hCOM : THandle;
Теперь в FormCreate Вы можете указать (для порта COM1)
hCom := CreateFile('COM1',GENERIC_READ+GENERIC_WRITE, 0, NIL, OPEN_EXISTING, 0, 0);
if hCom = INVALID_HANDLE_VALUE then begin
dwError := GetLastError(); // Только опишите предварительно dwError : DWORD;
ShowMessage('COM port error ' + inttostr(dwError));
end;
Теперь Вы можете читать из порта
BOOL ReadFile(
HANDLE hFile, // handle of file to read
LPVOID lpBuffer, // address of buffer that receives data
DWORD nNumberOfBytesToRead, // number of bytes to read
LPDWORD lpNumberOfBytesRead, // address of number of bytes read
LPOVERLAPPED lpOverlapped // address of structure for data
);
и записывать в порт
BOOL WriteFile(
HANDLE hFile, // handle to file to write to
LPCVOID lpBuffer, // pointer to data to write to file
DWORD nNumberOfBytesToWrite, // number of bytes to write
LPDWORD lpNumberOfBytesWritten, // pointer to number of bytes written
LPOVERLAPPED lpOverlapped // pointer to structure needed for overlapped I/O
);
Описания ReadFile и WriteFile взяты из Help DELPHI 5. Там же Вы можете найти орисания функций
GetCommState
SetCommState
EscapeCommFunction
GetCommTimeouts
SetCommTimeouts
и некоторых других, которые тоже могут понадобиться при работе с портами. Кстати, с тем же успехом Вы можете
использовать и порты LPT. Читайте HELP !!!!!!!
Все приведенные Выше функции относятся к WinApi и могут бытьь использованы в любой версии DELPHI
2. Очередные вопросы.
---------------------
Вопрос 161:
От: Ернар Шамбаев
Всем доброго времени суток.
Имеется типизированный файл, отсортированный по определенному полю.
Знаю, что один из способов поиска в нем необходимой записи - разделить
таблицу пополам и определить, находится ли запись в одной из половинок.
Если нет -
работать с другой, снова разделив ее пополам и т.д. Может, кто-то знает
что-нибудь другое
(желательно, с исходниками)?
Заранее спасибо.
Ответить.
Ответ 1:
Вопрос 162:
От: zoo
Здраствуйте Дмитрий,
Пытаюсь программить под ОпенГЛ и вот какая проблема: как подключить
библиотеки glut и glaux в Делфи и можно ли вобще?
И еще один вопросик: с помощью каких апишных функций можно генерить
пакеты "ручками" менять поля Source Addres, Destination Addres, etc
Буду очень рад любому ответу.
С наилучшими пожеланиями,
zoo mailto:zoo_x1@mail.ru
Ответить.
Ответ 1:
Вопрос 163:
От: Luybimov O.
Вопрос: Как всё же читать номер диска CD-Player прочитал
#FILENAME=7d093e0a, а вот блок программы у меня 11415202
Блок
procedure TF_CDE.InitCD;
var
i: integer;
i1:String;
l: String;
n: String;
s: integer;
m: integer;
mp : TMediaPlayer;
msp : TMCI_INFO_PARMS;
MediaString : array[0..255] of char;
ret : longint;
begin
// определение номера CD //
{mp := TMediaPlayer.Create(nil);
mp.Visible := false;
mp.Parent := Application.MainForm;
mp.Shareable := true;
mp.DeviceType := dtCDAudio;
mp.FileName := 'E:';
mp.Open;}
Application.ProcessMessages;
FillChar(MediaString, sizeof(MediaString), #0);
FillChar(msp, sizeof(msp), #0);
msp.lpstrReturn := @MediaString;
msp.dwRetSize := 255;
ret := mciSendCommand(CD.DeviceId, MCI_INFO,
MCI_INFO_MEDIA_IDENTITY,longint(@msp));
if Ret <> 0 then
begin
MciGetErrorString(ret, @MediaString, sizeof(MediaString));
P3.Caption:=(StrPas(MediaString));
end
else
P3.Caption:=(StrPas(MediaString));
{mp.Close;}
Application.ProcessMessages;
{mp.free;}
// end //
CDTracksLoaded:=False;
Table1.Active:=False;
Table1.EmptyTable;
Table1.Active:=True;
if not CDTracksLoaded then
begin
for i := 1 to CD.Tracks do
begin;
TrackLen[i] := CD.TrackLength[i];
n:=MSFTime(CD.TrackLength[mci_TMSF_Track(i)],s);
if length(IntToStr(i)) < 2 then i1 := '0' +IntToStr(i)
else i1 := IntToStr(i);
l:=i1+' : '+n;
Table1.Insert;
Table1NOMER.Value:=P3.Caption;
Table1TREK.Value:=StrToInt(i1);
Table1TIME.Value:=n;
Table1.Post;
end;
CDTracksLoaded := True;
end;
m := integer(mci_MSF_minute(CD.Length));
s := integer(mci_MSF_second(CD.Length));
P2.Caption := Format('%2.2d:%2.2d',[m,s]);
Inc(s, m*60);
P1.Caption:=IntToStr(CD.Tracks);
CD.StartPos := mci_Make_TMSF(1,0,0,0);
Table1TREK.ReadOnly:=True;
Table1TIME.ReadOnly:=True;
end;
Ответить.
Ответ 1:
Вопрос 164:
От: Andrey F Ivanov
Программирую на делфе недавно , и столкнулся вот с какой проблемой:
нужно из текстового файла записать в БД некие числовые значения ,
причем при нарезке файла в переменную могут быть записаны символьные
данные (буквы), поэтому их надо отбросить. Была написана след.процедура:
function TSubscriber_frm.SelectNum(zamer:string):extended;
// Возвращает число из смешанной строки
// символов (цифры и литеры), точку заменяет на запятую
// т.к. StrToFloat точку не берет
var NumCh: string;
symb: array[0..10] of Char;
i:integer;
begin
StrPCopy(symb,zamer);
NumCh:='';
for i:=0 to length(zamer) do
begin
// точку на зпт
if symb[i]=#46 then NumCh:=NumCh+#44;
// выбор только цифр
if (symb[i]>=#48) and (symb[i]<=#57) then
NumCh:=NumCh+symb[i];
end;
SelectNum:=StrToFloat(NumCh);
end;
В теле программы :
DM.kross_t['iz_faila']:=SelectNum(iz_faila);
(или так,без разницы,т.е. BDE тут вроде ни при чем)
proba:=SelectNum(iz_faila);
Так вот, все более-менее работало пока не встретилось
значение iz_faila:='0.8' : дельфа ругается , после
вызова процедуры грит :
"is not a valid floating point value"
,хотя с любыми другими значениями работает без проблем.
Подскажите плз, в чем тут может быть фича,
или я в корне что-то не так делаю ?
Заранее благодарен за любой ответ по адресу:
mailto:andiv@udmnet.ru
Ответить.
Ответ 1:
Вопрос 165:
От: Yuriy Gonchar
Вопрос: Есть прадоксовская база, набранная в DOS приложении.
Как ее прочитать в нормальной кодировке из моей проги?
В BDE перерыл все - ниго не получилось?
Второй вопрос.
Есть текстовый файл.
Как его напечатать на матричном принтере в ТЕКСТОВОМ режим а не
в графике?
Может кто сталкивался с подобными проблемками?
Буду рад любому совету!
а может и процедурки готовые есть? :-)
Помогите плиз!!!!
Yuriy Gonchar
yura@umej.apb.lg.ua
ICQ# 63583961
Ответить.
Ответ 1:
Вопрос 166:
От: admin
Hello Дмитрий,
Monday, April 02, 2001, 9:20:59 AM, you wrote:
ДВТ> Добрый день.
>> У вас есть программа или наработки кода для работы с серверами ftp и www4
>> по электронной почте
ДВТ> Можно поподробнее?
Я имею ввиду работу по почте с почтовыми работами типа www4mail@ftp.uni-stuttgart.de
То есть автоматическое формирование заказа при вставки адреса
странички и отсылка по SMTP протоколу на сервер.
--
Best regards,
admin mailto:admin@bst.bitmcnit.bryansk.su
Ответить.
Ответ 1:
Вопрос 167:
От: admin
Hello Дмитрий,
Monday, April 02, 2001, 6:02:12 PM, you wrote:
ДВТ> обработка на основе ISAPI Dll, где с помощью
ДВТ> NMHTTP и NMFTP происходила закачка, а через NMSMTP
ДВТ> отправка по почте.
А какие нужны компоненты для работы с NMSMTP и где взять
описания.
ДВТ> Главное разобраться как красиво генерить
ДВТ> ответы из Dll.
--
Best regards,
admin mailto:admin@bst.bitmcnit.bryansk.su
Ответить.
Ответ 1:
Вопрос 168:
От: Sam Savinov
Нужна помощь в создании SFX-файлов. (Самораспаковка).
Есть проблемма, нужно считать информацию из запущенного
EXE-файла, т.е. чтобы программа сама из себя прочитала
определенную информацию. Очень буду благодарен за помощь.
Ищу желающих принять участие в создании новой версии
криптографического пакета FET. С последней версией которого
можно ознакомиться по адресу: www.myportal.ru/ss
SAM / sam@myportal.ru
http://www.myportal.ru
WELCOME TO
Team ComputerraRU: www.myportal.ru/team
Ответить.
Ответ 1:
Вопрос 169:
От: sanglier
Hello, DTarasov!
Здравствуйте, Дмитрий Владимирович Тарасов!
Большое СПАСИБО! за то, что не забыли о моей просьбе и прислали мне
ссылку на действительно "отличную систему для создания хелпов:
Help Development Studio".
Я скачал файл, установил программу и с удовольствием читаю Help к этой
программе, которая ВСЯ НА РУССКОМ ЯЗЫКЕ (и программа, и Help, и все,
все, все...). А это ведь очень здорово: в России надо говорить на
русском языке.
Еще раз большое спасибо, Дмитрий Владимирович. Вы мне действительно
ОЧЕНЬ помогли.
В качестве иллюстрации о другой "помощи" пересылаю Вам письмо одного
из Ваших подписчиков:
> Вячеслав Макарович !
> поди если поискать в Рунете все найдется :)
> вы искали?
> Ну если искали, и случайно не нашли - вот файл - создание хелпов на
> русском языке :)
> Пожалуйста пользуйтесь.
> А ищется это просто - в поисковиках по порядочку ищется фраза -
> создание Help файлов.
> Все:)
> кстати есть еще программа, которая все описаное в этом файле сделает
> за вас, очень удобная, и не одна, и даже с русским интерфейсом.
> если опять не найдете - обращайтесь!
> --
> Best regards,
> captain mailto:captain@aport2000.ru
До чего "трогательное и заботливое письмо". Так и представляется
великовозрастный барчук, у которого на папенькины деньги имеется
круглосуточный доступ в Интернет и который от нечего делать шляется по
его сайтам - он в действительности ничего не умеет и у него нет даже
ссылок, на которые намекает. Но ему очень нравится, когда к нему
обращаются за помощью и он ее "ОКАЗЫВАЕТ" в виде приведенного письма.
Извините за "лирику", но уж больно нахально подобные типы везде лезут.
Большое спасибо за помощь. Правда в деле полученную программы я еще не
пробовал, но думаю ОНА - ТО, ЧТО НАДО!
С уважением,
--
Best regards,
Вячеслав Макарович mailto:sanglier@mail.ru
Ответить.
Ответ 1:
Вопрос 170:
От: fox.gh
Здравствуйте Дмитрий Владимирович!
Подскажите, пожалуйста, можно ли при занисении информации
в текстовый файл (или *.rtf, *.doc) изменять параметры шрифта
(размер шрифта, сам шрифт). Если это можно сделать,
то напишите, пожалуйста, пример.
Заранее большое спасибо.
Ответить.
Ответ 1:
3. Ищу подельника.
------------------
Sam Savinov:
Ищу желающих принять участие в создании новой версии
криптографического пакета FET. С последней версией которого
можно ознакомиться по адресу: www.myportal.ru/ss
SAM / sam@myportal.ru
Astanin Dmitry:
Ищу желающих помочь мне в создании программы, обеспечивающей
одновременный доступ нескольких пользователей с
разных компьютеров в лок. сети (в этом я вообще чайник) и аудит
событий с сохранением результатов в защищенном
файле .. Дима kinch-ch@mail.ru
Лобастов Николай:
Здравстуйте, господа программисты.
У меня в голове куча идей, только не знаю куда с ними сунуться.
Два дня назад пришел к одному выводу и хочу с вами
поделиться. Может кто уже так делает. Может кто дельный совет даст.
Я работаю в банке в отделе разработки и столкнулся с тем, что мы часто
повторяемся в написании каких-то вещей.
Что такое хоз. деятельность любой организации? Это производство мат.
ценностей или услуг и ведение учета и отчетности. К чему сводится
отчетность? К документообороту. Что такое документ? Это объект с набором
свойств и методов. Никому не приходилось создавать компоненты TDocument,
TPlategka, TPKO, TRKO? Можно описать такие свойства как база данных, таблица,
номер, дата, название, методы такие как создать документ, провести документ,
распечатать документ и все это разместить на палитре компонент. И при
разработке чего-то еще нового в организации или в какой-то
фирме для организации просто кидаешь их на форму или в датамодуль
и описываешь реакцию на события.
Такая библиотека сильно облегчит автоматизацию предприятия, а разработчикам
поможет заработать кучу денег. Ведь это же златая кладезь.
Жду ответов и предложений. - Lobastov@kedr.kts.ru
Если Вы хотите как можно скорее получить ответ на свой вопрос, то
укажите в теме письма - delphiV,иначе письмо будет прочитано значительно
позже, если же у вас есть предложения то в теме письма укажите delphiP.
Для интересующихся - немного о себе. Работаю на
железнодорожном транспорте ведущим программистом.
Основные мои разработки это сбор и доставка клиентам
информации о вагонах и поездах: где находится(по России),
куда едет. В связи с этим программировал для e-mail,Socket,БД,ISAPI.
За сим прощаюсь - скорых Вам и качественных программ.
Автор рассылки - Дмитрий.
ICQ - 89533941.
ВСЕ ВОПРОСЫ СПРОСИТЬ ПРЕДЛОЖИТЬ АРХИВЫ СКОЛЬКО НАС
http://subscribe.ru/
E-mail: ask@subscribe.ru |
В избранное | ||