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

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

  Все выпуски  

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


Служба Рассылок Subscribe.Ru проекта Citycat.Ru

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


Где бы не работать,
лишь бы платили :)

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


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

Сегодня в выпуске :
~~~~~~~~~~~~~~~~~~~
1. Очередные вопросы.
2. Отвеченные вопросы.
3. Ищу подельника.
~~~~~~~~~~~~~~~~~~~

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


Вопрос 330:

От: Dmitry Gricay


Вопрос:
Приветствую.

Вопрос такого плана - необходима документация по программированию USB
шины. Описание, методы работы и т.д.


Ответить.

Ответ 1:


Вопрос 331:

От: Дмитрий

Hi DTarasov!

Вот есть у TWebBrowser свойство document типа IDispatch. И дальше в
хелпе написано, что мол используйте некий IDispatch интерфейс, чтобы
работать с документом используя модель объектов COM. В общем, мне надо
работать с документом HTML как с документом (а не исходным текстом в
HTML). Чтобы иметь доступ к объектам документа, как в JavaScript,
например. Где про это про всё можно почитать (в Инете или книжка какая
есть, я не нашёл)?
Заранее сенкс.

Shaman
dimon-da@mtu-net.ru



Ответить.

Ответ 1:


Вопрос 332:

От: Eugene

:case of?

Каким образом перечислить в "сase" _не цифровые_ значения:


case Parameter2 of
"один": begin {} end;
"два" : begin {} end;
"остальной": begin {} end;
end;//of


Ответить.

Ответ 1:
Никаким!!! В case могут быть использованы только ordinal types, т.е. все
целые, все логические, перечисляемые типы и char.
Ответ 2:
А никак ((

ты скажи для чего это нужно??

можно, например, сделать TStringList, заполнить его
нужными значениями, а потом :

type
TSomeEnum = (seFirst, seSecond, ... );
...............
case SomeStringList.Items.IndexOf(S) of
seFirst: begin...end;
seSecond: begin...end;
......
end;


Вопрос 333:

От: Алексей

 
Здравствуйте. При создании программы мне не хватило средств Оbject
Раscal, пришлось использовать API-функции. В моей книге написаны лишь их
названия. Подскажите, как использовать CopyFile и CreateFile. Cпасибо.


Ответить.

Ответ 1:
BOOL CopyFile(

LPCTSTR lpExistingFileName, // pointer to name of an existing file
LPCTSTR lpNewFileName, // pointer to filename to copy to
BOOL bFailIfExists // flag for operation if file exists
);



Вопрос 334:

От: fedorenkov

Добрый день!
Господа, подскажите как быть :
работаю из Delphi с Oracle, часть программы хочу разместить в DLL
библиотеке,
но как из нее загружать формы и не тратить время на соединение с базой
данных
компонентом TDatabase не представляю . Может кто сталкивался с этим
вопросом ?


Ответить.

Ответ 1:


Вопрос 335:

От: Лобастов Николай

У меня такой вопрос.
 
Я открываю файл с помощью FileOpen.
Создаю S: ANSIstring; (в Delphi V просто string)
Теперь мне эту строку надо загнать в этот файл с помощью FileWrite
Функция действует на низком уровне, ей все равно что ты пишешь.
Если я перевожу строку в ShortString, то вместе со строкой записывается
и первый байт. Если оставить в ANSIstring, то вообще абра-кадабра
получается.
 
Подскажите как писать строку в файл с помощью FileWrite.


Ответить.

Ответ 1:


Вопрос 336:

От: КОПЫТИН Павел

Объясните, плз., как в Дельфях сделать липнущие к друг другу окна. Я
переписывал WMNCheetTest - но что то ни фига, когда я пытаюсь засунуть
тудакучу проверок - форма начинает моргать при рефреше.


Ответить.

Ответ 1:


Вопрос 337:

От: Vasya Naiv

Не подскажете ли как в Дельфи, имея DLL c СОМ -объектом и типизированной
библиотекой внутри, поднять этот объект и обратиться к какому-нибудь
методу одного из интерфейсов объекта.


Ответить.

Ответ 1:


Вопрос 338:

От: NikK

Дмитрий, здравствуйте!
Я однажды предлагал задачу по сохранению пользовательского интерфейса,
но,
видать, дельфийское сообщество решило, что тут все уже решено.
Ну что же, тогда пусть мне умные люди подскажут, как решить мою задачу.
Чтобы было проще, скажу, что речь идет о сохранении формы
в файле через поток, причем на форме есть объекты (в данном примере это
обработчик кнопки), которым обрабочики событий назначаются динамически.
Вот как раз в этих обработчиках и проблема.
 
Вот модули моей задачи.
======================
 
Формочка хранится в файле TestEverything.dfm
//===================================================
<file://===================================================>
object Form1: TForm1
Left = 193
Top = 107
Width = 484
Height = 146
Caption = 'Полигон'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.style="[]"
OldCreateOrder = False
Position = poScreenCenter
OnCreate = FormCreate
PixelsPerInch = 96
TextHeight = 13
object Label1: TLabel
Left = 176
Top = 67
Width = 32
Height = 13
Caption = 'Label1'
end
object Label2: TLabel
Left = 176
Top = 95
Width = 32
Height = 13
Caption = 'Label2'
end
object Button1: TButton
Left = 4
Top = 5
Width = 161
Height = 25
Caption = 'Сохранить форму в файле'
TabOrder = 0
OnClick = Button1Click
end
object Button2: TButton
Left = 4
Top = 33
Width = 161
Height = 25
Caption = 'Загрузить форму из файла'
TabOrder = 1
OnClick = Button2Click
end
object Button3: TButton
Left = 4
Top = 61
Width = 161
Height = 25
Caption = 'Контрольный обработчик'
TabOrder = 2
OnClick = Button3Click
end
object Button4: TButton
Left = 4
Top = 89
Width = 161
Height = 25
Caption = 'Динамический обработчик'
TabOrder = 3
end
object Button5: TButton
Left = 232
Top = 5
Width = 241
Height = 25
Caption = 'Убрать надписи на TLabel-х'
TabOrder = 4
OnClick = Button5Click
end
end
 
Модуль этой формочки
//============================== <file://==============================>

unit TestEverything;
 
interface
 
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
StdCtrls;
 
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Label1: TLabel;
Label2: TLabel;
Button5: TButton;
procedure FormCreate(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
 
var
Form1: TForm1;
 
implementation
 
uses TestUnit;
 
{$R *.DFM}
 
procedure TForm1.FormCreate(Sender: TObject);
begin
Label1.Caption := 'Меня создали';
Label2.Caption := 'И меня создали';
Button4.OnClick := FbEvent.TestBtnClick;
end;
 
procedure TForm1.Button3Click(Sender: TObject);
begin
Label1.Caption := 'Со мной что-то сделали';
end;
 
procedure TForm1.Button5Click(Sender: TObject);
begin
Label1.Caption := 'Меня зачистили';
Label2.Caption := 'И меня зачистили';
end;
 
procedure TForm1.Button1Click(Sender: TObject);
Var
wFileSream : TFileStream;
wFileName : String;
begin { Сохранение формы в файле }
wFileName := Self.ClassName + '.XXX';
wFileSream := TFileStream.Create(wFileName, fmOpenWrite or fmCreate);
try
wFileSream.WriteComponent(Form1);
finally
wFileSream.Free;
end;
end;
 
procedure TForm1.Button2Click(Sender: TObject);
Var
wFileSream : TFileStream;
wFileName : String;
k : Integer;
begin { Загрузка формы из файла с расширением FOB }
wFileName := Self.ClassName + '.XXX';
wFileSream := TFileStream.Create(wFileName, fmOpenRead);
try
for k:=Form1.ComponentCount-1 downto 0 do
TComponent(Form1.Components[k]).Free;
Application.RemoveComponent(Form1);
wFileSream.ReadComponent(Form1);
Application.InsertComponent(Form1);
Form1.Caption := 'Форма из файла';
finally
wFileSream.Free;
end;
end;
 
end.
 
Небольшое пояснение к проблеме:
1. Запускаем задачу, жмем кнопки "Контрольный обработчик",
затем "Динамический обработчик" и видим, что они работают,
т.е. пишут на Label1 и Label2 свои надписи. Кнопкой "Убрать надписи на
TLabel-х"
очищаем их для удобства наблюдения действий.
 
2. Жмем кнопку "Сохранить форму в файле" и сохраняем форму в файле
через TFileStream. Все отлично. При этом запомним состояние надписей для
пущей убедительности.
 
3. Выключаемся. Снова запускаемся. Видим первозданную форму.
 
4. Жмем кнопку "Загрузить форму из файла".
На исключение, которое при этом возникает, поплевываем и видим,
что вернулась сохраненная форма.
Великолепно.
 
5. Жмем кнопку "Убрать надписи на TLabel-х". Все отлично.
 
6. Жмем "Контрольный обработчик". Отлично.
 
7. Жмем "Динамический обработчик". И тут нас ждет ФИАСКО!!!
Так куда же девался обработчик, и как его поставить на место?
Подскажите, буду благодарен дельфийскому сообществу.
 
Вот модуль, откуда этот самый динамический обработчик первоначально
был подцеплен к кнопке "Динамический обработчик".
Причем объект TFbEvent, из которого был взят обработчик,
никогда не создается, т.к. методы классов, как хорошо известно,
загружаются в память без создания экземпляров классов.
//============================== <file://==============================>

unit TestUnit;
 
interface
Uses
Windows, SysUtils, Dialogs, Graphics, StdCtrls, Forms, Classes;
 
Type
{ КОНТЕЙНЕР ОБРАБОТЧИКОВ СОБЫТИЙ }
TFbEvent = class(TComponent)
private
protected
public
Constructor Create(AOwner : TComponent); Override;
procedure TestBtnClick(Sender: TObject);
end;
 
Var
FbEvent : TFbEvent;
implementation
 
{ TFbEvent }
 
constructor TFbEvent.Create(AOwner: TComponent);
begin
inherited;
 
end;
 
procedure TFbEvent.TestBtnClick(Sender: TObject);
Var
wComp : TComponent;
begin { Динамический обработчик }
if Sender is TComponent then
wComp := TComponent(Sender).Owner;

if wComp.FindComponent('Label2') <> nil then
if wComp.FindComponent('Label2') is TLabel then
TLabel(wComp.FindComponent('Label2')).Caption :=
'Вот так меня достали из динамического обработчика';
end;
 
end.
 
Все это мне нужно для задачи, о которой можно прочитать
на http://www.mtu-net.ru/fobos/ <http://www.mtu-net.ru/fobos/>


Ответить.

Ответ 1:


Вопрос 339:

От: NEN

Есть классный компонент к дельфям Async 3 Pro. от TurboPower
Помогите зарегистрировать, мож у кого кряк есть. :)))))


Ответить.

Ответ 1:


Вопрос 340:

От: Андрей Сергеевич

Как в DBGrid изменить высоту строки, не столбца, а именно строки (не
изменяя шрифт), и еще, вы не подскажите как осуществлять ногострочность
в одной строке (переностить строку), как в Excel или Word.


Ответить.

Ответ 1:


Вопрос 341:

От: КОПЫТИН Павел


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


Ответить.

Ответ 1:


Вопрос 342:

От: Олег Супроненко

Ищу компонент или библиотеку для работы с dbf таблицами такую, чтобы
можно было организовывать контекстный поиск по ключу.
Очень нужно!!
Подскажите плз что имеется для таких целей, и где его можно найти.

Ответить.

Ответ 1:


Вопрос 343:

От: Anton

Всем Hi!
Я пишу программу по удаленному администрированию...
Тема интернета в Delphi для меня тёмный лес.
Столкнулся с такой проблемой:
допустим в edit'e стоит IP, как мне перезагрузить удалённый
компьютер или выключить его.
Помню,что существует длиннющая функция для перезагрузки компьютера в
локальной сети через определённый промежуток времени.
Программисты, подскажите пожалуйста как ЭТО сделать?


Ответить.

Ответ 1:


Вопрос 344:

От: Нестеренко Кирилл


:Здоровенькi були!
Работаю с RadioBox. Скажем 3 этих бокса на форме, запускаю прогу,
выбираю 2 бокс.
Где хранятся даные о том какой из трех RadioBox-ов выбран?
А для CheckBox-ов?
Или нужно через проверку св-ва Checked каждого бокса, но что-то мне не
вериться.


Ответить.

Ответ 1:


Вопрос 345:

От: Гавриленко Степан

Привет.

Я например захотел программно сменить картинку на рабочем столе. Обои
т.е... я залез в реестр изменил нужную строку. Все нормально. в
реестре изменилось. Но сам виндовс не обновился. Т.е картинка не
сменилась. Потом, когда я запускаю какуюнить игру, она меняется. А так
нет. Как мне обновить виндовс? перерисовать чтоли.


Ответить.

Ответ 1:


Вопрос 346:

От: Нестеренко Кирилл


:Здоровенькi були!
Хлопцi, копался в кое каком материальчике и вот вопрос:
1. Каким образом и при каких обстаятельствах можно использовать DDE
приложения?
2. DDE-сервер и DDE-клиент это две разные программы на моем компьютере?


Ответить.

Ответ 1:


Вопрос 347:

От: anton


Пришлите,если у кого есть,исходник видео-проигрывателя.Ещё пришлите,если
у кого есть,crack для сборника компонентов MMTool5.Скажите,можно ли делать
crack на Delphi5,в смысле делать небольшую какую-нибудь
программку,которая
будет убирать регистрацию с другой программы.


Ответить.

Ответ 1:


Вопрос 348:

От: Антон

При составлении запроса с использованием плана возникает ошибка :

index (RDB$PRIMARY240) cannot be used in the specified plan

Удалось установить, что все остальные индексы в таблице Rdb$indices
все PRIMARY индексы имеют значение в поле Rdb$index_id=1, а
индекс RDB$PRIMARY240 равное 2. Что означает это поле, и вследствии
чего изменяются его значения.


Ответить.

Ответ 1:


Вопрос 349:

От: LYNX

В Дельфи 5, когда создаёшь 1 форму (Form1), а потом вторую форму (Form2)
и писание действия из Form1: Form2.Show или что-нибудь связанное с Form2
то Form2 неопознаётся. В чём дело? В 4 Дельфи такого не было. Мож надо
что-то дописать ?



Ответить.

Ответ 1:


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


Вопрос 156:

От: Илья

Здравствуйте
Я уже присылал вопрос на тему IBDataBase и видимо был не совсем точен
, вследстивие чего мне пришло несколько ответов просто пересказывающих
моё письмо :(
Буду точнее:
1)Как СОЗДАТЬ интербазу (gdb файл) в RunTime?
На строку IBDataBase.CreateDataBase идет ошибка "unavailable
database"
2)Почему при работе с DataBase и Table при указании драйвера например
Paradox метод Table.CreateTable проходит нормально ,а если поставить
DataBase на любой из ODBC драйверов , то на тот же метод идет ошибка
SQL Connect ???

--
С уважением
Илья




Ответить.

Ответ 1:


Вопрос 157:

От: Serge V. Frolov

Здравствуйте !
Подскажите пожалуйста какими средствами можно создать
анимированный курсор и как его использовать в Delphi ?


Ответить.

Ответ 1:
Насчет "создать" - не знаю, а использовать готовый - так:

procedure TForm.FormActivate(Sender: TObject);
var h: THandle;
name: array[0..255] of char;
begin
StrPCopy(name,'Wagtail.ani');
h:=LoadImage(0,name,IMAGE_CURSOR, 0, 0, LR_DEFAULTSIZE or
LR_LOADFROMFILE);
if h<>0 then
begin
Screen.Cursors[1]:=h;
Screen.Cursor:=1;
end;
end;


Вопрос 158:

От: Katrin

Уважаемые программисты!

При создании мной некоторого класса, возникла необходимость использовать
массив свойств данного класса. При этом я вычитала, что "....в отличие
от стандартного массива, массив свойств может быть индексирован
нечисловым значением. Например в качестве типа индекса возможно указать
строку." Мне эта возможность показалась очень привлекательной, но
реализовать я ее не смогла, т.к. каждое свойство требует переменную
соотв. типа.
Прошу подсказать, действительно ли возможно это реализовать, если да то
хотелось бы посмотреть конкретный пример :))).
Екатерина!


Ответить.

Ответ 1:
Насколько я понимаю вы хотите обращаться к свойству в виде MyObj.MyProp["index1"].

Для этого у свойства должны быть определены атрибуты read или write с функциями, параметры которых
того же типа, что и индекс.

class TMyClass
{
TMyType* GetProp(String S);
void SetProp(String Index, TMyType *Value);
__property TMyType* Prop[String Index]=(read=GetProp, write=SetProp}
};
> Например в качестве типа индекса возможно указать строку."
> Мне эта возможность показалась очень привлекательной, но
> реализовать я ее не смогла, т.к. каждое свойство требует
> переменную соотв. типа.
Смотрите хелп про "properties, array" (или indexed, смотря какая Delphi)
> хотелось бы посмотреть конкретный пример :))).
Вот, пожалуйста, конкретнее некуда ;) Два файла, консольное приложение.
В классе TPhoneBook есть св-во Phone, возвращает номер телефона
персоны, имя которой указано как индекс массива. Для сравнения есть
и другое св-во Count (без индекса, только для чтения).


program Project1;

uses
Unit1 in 'Unit1.pas';

{$APPTYPE CONSOLE} // не вздумайте удалить из данного примера

var
Book: TPhoneBook;
namma: string;

begin
Book:=TPhoneBook.Create;
Book.Phone['Ivan Petrov']:=1234567;
Book.Phone['Mike Uskoff']:=7654321;
Book.Phone['Kate Noname']:=7162534;
WriteLn('Number of persons: ',Book.Count);
Write('Type the name to find: ');
ReadLn(namma);
WriteLn(Book.Phone[namma]);
Write('Press ENTER to quit');
ReadLn;
Book.Free;
end.

unit Unit1;

interface

const MaxP = 10;

type
TPerson = record
name: string;
phoneNum: integer;
end; // type TPerson

TPhoneBook = class
private
fPersons: array[0..MaxP-1] of TPerson;
fCount: integer;
function GetPhone(aName: string): integer;
procedure SetPhone(aName: string; aPhone: integer);
public
property Phone[aName: string]: integer read GetPhone write SetPhone;
property Count: integer read fCount; // только для чтения
end; // type TPhoneBook

implementation

uses SysUtils;

function TPhoneBook.GetPhone(aName: string): integer;
var i: integer;
begin
aName:=UpperCase(aName);
Result:=0;
for i:=0 to fCount-1 do
with fPersons[i] do
if aName=UpperCase(name) then Result:=phoneNum;
end; // function TPhoneBook.GetPhone: integer;

procedure TPhoneBook.SetPhone(aName: string; aPhone: integer);
var i: integer;
found: boolean;
begin
aName:=UpperCase(aName);
found:=FALSE;
for i:=0 to fCount-1 do
with fPersons[i] do
if aName=UpperCase(name) then begin
phoneNum:=aPhone;
found:=TRUE;
end;
if (not found) and (fCount<MaxP) then begin
with fPersons[fCount] do begin
name:=aName;
phoneNum:=aPhone;
end;
Inc(fCount);
end;
end; // procedure TPhoneBook.SetPhone;

end.

Извиняюсь, что так длинно :) Старался поподробнее.


Вопрос 159:

От: admin

Вопрос: У вас есть программа или наработки кода для работы с серверами ftp и www4
по электронной почте




Ответить.

Ответ 1:


Вопрос 160:

От: Медяник Юлия Анатольевна

Вопрос:
Помогите решить проблему: в Delphi5 c использованием стандартной
компоненты QuickReport написана программа, формирующая отчет с его
предварительным просмотром и печатью. На компьютерах с принтерами XEROX
и HP 1100 при попытке сформировать отчет выдается сообщение "Access
Violation...".
Такое ощущение, что программа не видит принтера, выбранного в списке
печати. На компьютерах с принтерами HP 1100 иногда после переустановки
драйвера либо после полной переустановки Windows проблема исчезала, но
не всегда. Замена QuickReport на что-либо другое не совсем подходит,
т.к. надо очень много переделывать. Помогите, пожалуйста!


Ответить.

Ответ 1:


Вопрос 161:

От: Ернар Шамбаев


Всем доброго времени суток.
Имеется типизированный файл, отсортированный по определенному полю.
Знаю, что один из способов поиска в нем необходимой записи - разделить
таблицу пополам и определить, находится ли запись в одной из половинок.
Если нет -
работать с другой, снова разделив ее пополам и т.д. Может, кто-то знает
что-нибудь другое
(желательно, с исходниками)?

Заранее спасибо.


Ответить.

Ответ 1:
1) Индексный файл надо сделать - по анологии с
индексами в базах данных

2) Использовать базу данных вместо типизированного
файла - там уже все это есть, и поверьте - будет
работать куда быстрее, особенно на больших массивах,
чем ваши самоделки...


Вопрос 162:

От: zoo

Здраствуйте Дмитрий,

Пытаюсь программить под ОпенГЛ и вот какая проблема: как подключить
библиотеки glut и glaux в Делфи и можно ли вобще?
И еще один вопросик: с помощью каких апишных функций можно генерить
пакеты "ручками" менять поля Source Addres, Destination Addres, etc
Буду очень рад любому ответу.



Ответить.

Ответ 1:
По-поводу GLAUX не знаю. На счет же GLUT могу сказать, что файлы для подключения в Delphi есть в
интернете, читал, что его можно найти здесь:
www.gamedeveloper.org/delphi3d


Вопрос 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:
:'Это проблема установок Regional Settings (или Regional Options в Win2000) в Kontrol Panel. Установки Regional
Settings можно получить из системного реестра. Пример для Win2000 (для других Win это может быть в другом
месте, надо поискат, это можно зделать используя программу regedt32.exe или regedit.exe, только мой совет вам
ничего там не меняите)

unit Example;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, Menus, Registry;
********* //надо добавить
type
TForm1 = class(TForm)
...
private
{ Private declarations }
public
{ Public declarations }
Decimal,NotDecimal: string;
end;

var
Form1: TForm1;
implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
var Reg:TRegistry;
begin
Reg:=TRegistry.Create;
if Reg.KeyExists('\Control panel\International')then
begin
Reg.OpenKey('\Control panel\International',false);
Decimal:=Reg.ReadString('SDecimal');
if Decimal=','then NotDecimal:='.' else NotDecimal:=',';
end
else
begin
Decimal:=',';
NotDecimal:='.';
end;
Reg.Destroy;
end;
Ну а дальше дело техники.
Желаю удачи.
Ответ 2:
Не знаю точно ли в этом дело.
Такое сообщение об ошибке при обработке чисел с плавающей точкой может появиться когда в Windows в
качестве
десятичного разделителя установлена запятая, а не точка.
Ответ 3:
Нужно принудительно задать разделитель для дробного числа, например, при
создании главной формы :

DecimalSeparator:='.';

и при обработке следить за его правильностью (заменять запятую на точку).
С уважением, Владимир Михайлович.


Вопрос 165:

От: Yuriy Gonchar

Вопрос: Есть прадоксовская база, набранная в DOS приложении.
Как ее прочитать в нормальной кодировке из моей проги?
В BDE перерыл все - ниго не получилось?

Второй вопрос.
Есть текстовый файл.
Как его напечатать на матричном принтере в ТЕКСТОВОМ режим а не
в графике?

Может кто сталкивался с подобными проблемками?
Буду рад любому совету!
а может и процедурки готовые есть? :-)

Помогите плиз!!!!


Ответить.

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

По поводу печати:
var f:TextFile;
begin
AssignPrn(f);
try
Rewrite(f);
writeln(f,'Print Text');
finally
CloseFile(f);
end;
end;
Ответ 2:
1. Запускаете BDE Administrator. Вкладка Configuration.
Дальше Drivers, Native, PARADOX. В свойстве LANGDRIVER
устанавливаете "Pdox ANSI Cyrillic".
Если нужно это только для одной конкретной таблицы, то используйте
утилиту Database Desktop. Там в меню Restructure можно установить
Table Language в вышесказанное значение.
2. Сам не пробовал, но идея такая:
CopyFile(PChar(НАЗВАНИЕ_ФАЙЛА),'LPT1',true);
Успехов,
Ответ 3:
В BDE на вкладке Configuration:
Drivers-Nativa-Paradox, Langdriver='Paradox Cyrr 866'
Если это не сработает, попробуй другой драйвер с кодировкой 866 -
'dBase Rus cp866'
Ответ 4:
Подответ1:
Примерно так:
В Object Inpector'е:
1. Font/Charset устанавливаешь значение OEM_CHARSET;
2. Font/Name устанавливаешь Terminal или System (проверены, второй красивее :) )

Подответ2:
Попробуй поиграться с классом TPrinter (в Uses пропиши Printers). В Help
почитай.


Вопрос 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:


Вопрос 171:

От: Гавриленко Степан

Привет.

Вопрос, который адрессован как лично вам, так и можно написать о нем в
рассылке.

Есть задача.. Нужно заперетить запись определнных фалов на винт
вообще. Т.е написать например прогу которая недвала бы записывать на
винт файлы с расширением tmp
не то чтобы потом стерала, а именно что недавала.. КАк это дело
осуществить.

В часности дело в том что наш любимый виндовс Линолиум посмтоянно
создает папку Restore и туда пихает мегов во 500 в лучшем случае, а
стереть ее можно только из-под доса..


Ответить.

Ответ 1:
Насчет программы не знаю, но System restore, вообще-то отключается
более гуманными методами из Панель управления-Свойства системы-
быстродействие-файловая система-устранение неполадок-восстановления
системы (так вот перевели...).
Потом в msconfig'е отключаете запуск pchealth, state manager,
перезагружаетесь и удаляете ненавистные папки _RESTORE.
Ответ 2:
Для того, чтобы Винда не совала всякую гадость в папку _restore зайди в
реестр
и удали ключ:

HKEY_LOCAL_MACHINE\ System\ CurrentControlSet\ Services\ VxD\ VxDMon]

Рекомедую подписатся на рассылку "Энциклопедия оптимизации Виндовс"
В выпуске # 21 от 12.04.01 есть много про оптимизацию WinME

Вопрос 172:

От: Ekaterina Yakovleva

Моя программа выполняет очень большие запросы с помощью TQuery. Пока
выполняется Query.Open (а это может быть несколько минут) программа
выглядит "зависшей": не перерисовывается форма, не реагирует на нажатия
и т.д. Как этого избежать? Желательно, чтобы во время выполнения
запроса программа продолжала нормально существовать.


Ответить.

Ответ 1:
Я пробовал работает. файл небольшой около 60 мегабайт. Я пробовал паралельно открывать другие файлы.
procedure TForm1.Mmmm(ssss);
begin
Application.ProcessMessages;
Query1.Active := true;
end;
Ответ 2:
Создавай новую нить (класс TTRhead) ) и выполняй запрос в ней. Если необходим пример пиши zelenin_ve@mail.ru, сброшу.
Ответ 3:
1) Если прога обрабатывает один запрос около минуты, то это плохая практика.
Или меняй запрос или может у ты в базе индексы не используешь?

2) Если же все-таки по каким-то причинам не хочешь следовать п.1), то
создавай другой поток. И открываай Query их него. НО! Тогда тебе придется
очень сильно позаботиться (причем ручками) о синхронизации основного VCL-потока и
вновь созданных, когда они будут пытаться лезть к одним и тем же данным.


Вопрос 173:

От: YDB

Вопрос:
можно ли в Делфи как-то работать с видеопамятью?
Вообще, можно ли в Windows вывести произвольную
картинку прямо на монитор (минуя создание окна)?
Если можно, то как?


Ответить.

Ответ 1:
Можно рисовать в Canvas Desktop-a
Ответ 2:
Чтобы рисовать по экрану используйте API функции.О них вы прочтете в help-е. Один из параметров этих функций DC:HDC
( контекст воспроизведения) который можно получить при помощи ф-ии GetDC(Wnd:HWND).
Попробуйте:
procedure Paint;
var DC:HDC;
begin
DC:=GetDC(0);
// Тут вы рисуете по экрану;
ReleaseDC(0,DC);
end;
Ответ 3:
Чтобы рисовать в любом месте экрана компьютера, используя все удобства Canvas, нужно создать переменную типа
TCanvas и ассоциировать ее с экраном, Handle которого равен 0.

procedure TForm1.Button1Click(Sender: TObject);
var
c: TCanvas;
i: integer;
begin
c := TCanvas.Create;
c.Handle := GetDC(0);
c.Pen.Mode := pmNotXor;
for i := 0 to 255 do begin
c.Pen.Color := RGB(0, 0, i);
c.MoveTo(50, 50 + i);

c.LineTo(150, 50 + i);
end;
ReleaseDC(0, c.Handle);
end;


Вопрос 174:

От: YDB

Вопрос:
Как перехватывать или хотя бы обрабатывать
глобальные события Windows
(Клавиатура, мышь, запуск файла)
если у меня в проекте нет визуальных компонент и формы?


Ответить.

Ответ 1:
Если в проекте нет ни одной формы и в вашем .dpr нет
строки

Application.run

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


Вопрос 175:

От: Александр Мордовский

Подскажите пожалуйста решение следующей проблемы:

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

Как можно сделать так, чтобы сначала вводились все строки документа, а
затем все они сохранялись одной транзакцией?


Ответить.

Ответ 1:
Чтоб так просто, так наверное не получиться, гдето-же
надо данные хранить - в DBGrid данные не храняться
сами по себе, так что прийдется временную таблицу
делать или реальную или в памяти, чтоб хранить то что
вы по вносили...
Ответ 2:
Попробуйте создать кеш таблицу при подготовке данных к записи в базу
данных после заполнения переписать данные в базу. (Это конечно не
идеальное решение но СУБД которое я написал и внедрил работает по
этому принципу уже год и пока на работоспособности это не отразилось).



3. Ищу подельника.
------------------
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
Отписаться Рейтингуется SpyLog

В избранное