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

RusFAQ.ru: Программирование на Delphi


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Delphi

Выпуск № 791
от 25.04.2007, 22:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 464, Экспертов: 94
В номере:Вопросов: 4, Ответов: 5


Вопрос № 83355: Здраствуйте. У меня такой вопрос: есть строка S = '1000000'. Подскажите, есть ли такие процедуры чтобы отформатировать ее скажем в '1 000 000' или '1 000 000.00'? или где такую информацию можно найти. Всем спасибо....
Вопрос № 83393: Народ помогите не могу запустить файл. мне нужно запустить внешний файл в pdf формате, акробат запускается а сам файл нет. что делать подскажите. Заранее благодарю!...
Вопрос № 83401: Уважаемые мастера Delphi! Подскажите,пожалуйста, как делать SQL запросы в ClientDataSet (т.е. запрос к базе который храниться в файле *.cds). Где-то встречал, что для этого используется свойство ClentDataSet - CommandText, но примеров не нашел, а сам...
Вопрос № 83447: Есть форма с TCheckListBox и Memo Как сделать, чтобы они прокручивались вместе...

Вопрос № 83.355
Здраствуйте.
У меня такой вопрос: есть строка S = '1000000'. Подскажите, есть ли такие процедуры чтобы отформатировать ее скажем в '1 000 000' или '1 000 000.00'? или где такую информацию можно найти.
Всем спасибо.
Отправлен: 20.04.2007, 00:31
Вопрос задал: Иван Ивановввв (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Устинов С.Е.
Здравствуйте, Иван Ивановввв!

Такие функции есть. Например function FormatFloat(const Format: string; Value: Extended): string; overload;
Только работают они не со строкой, а с числом.
Пример работы:
s:=FormatFloat('#,#.###',1894400001.810); // Результат - строка 1 894 400 001,81 - три символа решетки в конце - значит не более 3 символов после десятичного разделителя.
s:=FormatFloat('#,#.0000',1894400001.810); // результат строка 1 894 400 001,8100
s:=FormatFloat('#,#',1894400001.810); // результат 1 894 400 002

Удачи!
---------
Ждешь квалифицированного ответа? Задай правильно вопрос!
Ответ отправил: Устинов С.Е. (статус: Практикант)
Ответ отправлен: 20.04.2007, 00:49
Оценка за ответ: 5
Комментарий оценки:
Спасибо, проверил все работает, то что нужно!

Отвечает: Gh0stik
Здравствуйте, Иван Ивановввв!

Для перевода числа в такой формат достаточно воспользоваться функцией function FormatFloat(const Format: string; Value: Extended): string;

Например: Edit1.Text:=FormatFloat('#,#',1234567891011);
или если нужно со знаками после запятой: Edit1.Text:=FormatFloat('#,#.00',1234567891011);

Но если Вам нужно отформатировать строку, то предлагаю такой код:
var i,k:integer;
s:string;
begin
i:=1; k:=1;
s:=Edit1.Text;
while length(s)-3*i+k>0 do
begin
insert(' ',s,length(s)-3*i+k);
inc(i);dec(k);
end;
Edit1.Text:=s;//без знаков после запятой
{ Edit1.Text:=s+'.00';//с десятичными знаками, но только нулями!!!}
end;


Good Luck!!
---------
Господь Бог - это всего лишь сверхмощный генератор случайных чисел, в соответствии с которыми сочетаются события на Земле. Генератор случайных чисел - и только.
Ответ отправил: Gh0stik (статус: Профессионал)
Украина, Славянск
Организация: Славянский государственный педагогический университет (Кафедра алгебры)
ICQ: 289363162
----
Ответ отправлен: 20.04.2007, 01:00
Оценка за ответ: 5
Комментарий оценки:
Это интересный вариант, спасибо большое за ответ.


Вопрос № 83.393
Народ помогите не могу запустить файл.
мне нужно запустить внешний файл в pdf формате, акробат запускается а сам файл нет. что делать подскажите.
Заранее благодарю!

Приложение:

Отправлен: 20.04.2007, 09:39
Вопрос задал: Kakenov Daulet (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: PGM
Здравствуйте, Kakenov Daulet!

Согласен, что можно было проще, как указано в мини-форуме. Что касается вашего кода, то полагаю проблема в том, что указан неполный путь к файлу в строке с CreateProcess - это касается файла данных, возможно ваш Reader отсчитывает относительный путь от другой рабочей директории и поэтому не находит файла PDF, также неплохо заключать путь с файлом в двойные кавычки, если в пути есть пробелы это очень актуально.
Ответ отправил: PGM (статус: 5-ый класс)
Ответ отправлен: 20.04.2007, 10:28
Оценка за ответ: 4


Вопрос № 83.401
Уважаемые мастера Delphi! Подскажите,пожалуйста, как делать SQL запросы в ClientDataSet (т.е. запрос к базе который храниться в файле *.cds). Где-то встречал, что для этого используется свойство ClentDataSet - CommandText, но примеров не нашел, а сам не разобрался.
Если сильно не обременит, то напишите примерчик.
Заранее спасибо!
Отправлен: 20.04.2007, 10:13
Вопрос задал: Dragon (статус: 1-ый класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Химяк Виктор Васильевич
Здравствуйте, Dragon!
Кое-что нашел смотри.

Управление запросом на сервере
Компонент TdientDataSet может не только эффективно управлять своим набором данных, но и влиять на выполнение серверного компонента, с которым он связан через провайдер.

Свойство

property CornmandText: string;

содержит текст запроса SQL, имя таблицы или хранимой процедуры в зависимости от типа серверного компонента.

Изменив значение этого свойства на клиенте, можно, например, модифицировать запрос SQL на сервере. Но для этого в свойстве Options соответствующего компонента-провайдера TDataSetProvider должно быть установлено значение

poAliowCommandText := True;

Новое значение свойства CommandText отправляется на сервер только после открытия клиентского набора данных или выполнения метода

procedure Execute; virtual;

Для запросов или хранимых процедур можно задавать параметры, которые сохраняются в свойстве

property Params: TParams;

До выполнения запроса присваиваются значения входным параметрам. После выполнения хранимой процедуры в выходных параметрах размещаются полученные от сервера значения.

Обратите внимание, что при выполнении запросов или хранимых процедур может измениться порядок следования параметров. Поэтому обращаться к параметрам желательно по их именам. Например, так:

Editl.Text := ClientDataSet.Params .ParamByName('OutputParam') .AsString;

Для того чтобы получить текущие значения параметров компонента набора данных на сервере, достаточно использовать метод

procedure FetchParams;

Перед и после получения параметров от провайдера, клиентский набор данных вызывает методы-обработчики событий:

property BeforeGetParams: TRemoteEvent;

property AfterGetParams: TRemoteEvent;

Этот отрывок взят мной из "Иллюстрированный самоучитель по Delphi 7 для профессионалов", который находился на диске с дистрибутивом. Там же есть масса примеров. Полный размер архива 1,8Мб, если интересно, могу скинуть.
Ответ отправил: Химяк Виктор Васильевич (статус: 4-ый класс)
Ответ отправлен: 20.04.2007, 22:17


Вопрос № 83.447
Есть форма с TCheckListBox и Memo
Как сделать, чтобы они прокручивались вместе
Отправлен: 20.04.2007, 14:57
Вопрос задал: Бушманова Ирина Юрьевна (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: AlexStoune
Здравствуйте, Бушманова Ирина Юрьевна!

Обнаружение прокрутки TMemo :
Создайте потомок TMemo, перехватывающий сообщения WM_HSCROLL и WM_VSCROLL:
TSMemo = class(TMemo)
procedure WM_HScroll(var Msg: TWMHScroll); message WM_HSCROLL;
procedure WM_VScroll(var Msg: TWMVScroll); message WM_VSCROLL;
end;
...
procedure TSMemo.WM_HScroll(var Msg: TWMHScroll);
begin
ShowMessage('HScroll');
end;

procedure TSMemo.WM_VScroll(var Msg: TWMVScroll);
begin
ShowMessage('VScroll');
end;


Прокрутка Memo

Var
ScrollMessage:TWMVScroll;
begin
ScrollMessage.Msg:=WM_VScroll;
for i := Memo1.Lines.Count DownTo 0 do
begin
ScrollMessage.ScrollCode:=sb_LineUp;
ScrollMessage.Pos:=0;
Memo1.Dispatch(ScrollMessage);
end;
end;

Обнаружение прокрутки TListBox

unit Listbob;
interface
uses
SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls;
type
TListBob = class(tlistbox)
private
{ Private declarations }
FOnHScroll: TNotifyEvent;
FOnVScroll: TNotifyEvent;
protected
{ Protected declarations }
procedure WMHScroll(var Message: TWMHScroll); message WM_HSCROLL;
procedure WMVScroll(var Message: TWMVScroll); message WM_VSCROLL;
public
{ Public declarations }
constructor Create(AOwner: TComponent); override;
published
{ Published declarations }
property OnHScroll: TNotifyEvent read FOnHScroll write FOnHScroll;
property OnVScroll: TNotifyEvent read FOnVScroll write FOnVScroll;
end;

procedure Register;

implementation

constructor TListBob.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FOnHScroll := nil;
FOnVScroll := nil;
end;

procedure TListBob.WMHScroll(var Message: TWMHScroll);
{ помните что данное сообщение вызывается дважды!! }
begin
if Assigned(FOnHScroll) then
FOnHScroll(Self);
DefaultHandler(Message);
end;

procedure TListBob.WMVScroll(var Message: TWMHScroll);
{ помните что данное сообщение вызывается дважды!! }
begin
if Assigned(FOnVScroll) then
FOnVScroll(Self);
DefaultHandler(Message);
end;

procedure Register;
begin
RegisterComponents('Dr.Bob', [TListBob]);
end;

end.
Связать это я думаю труда не составит. Кстати примеры я взял из поборки статей Delphi World, очень рекомендую.
Ответ отправил: AlexStoune (статус: 1-ый класс)
Ответ отправлен: 20.04.2007, 15:31
Оценка за ответ: 5
Комментарий оценки:
Огромное спасибо!!Вы меня очень выручили.


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Email: support@rusfaq.ru, тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.50 (beta) от 15.04.2007
Яндекс Rambler's Top100

В избранное