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

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


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

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

Выпуск № 625
от 19.10.2006, 21:05

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


Вопрос № 58863: Уважаемые эксперты. Как можно закрыть другое приложение из программы Delphi? Если известно строка заголовка окна....
Вопрос № 58865: Скажите, в какой переменной храниться знак точки вещественных чисел? И возможно ли его поменять?...
Вопрос № 58889: Здравствуйте Уважаемые эксперты. Помогите решить следущую проблему. Есть форма На неё брошено 10 кнопок(цифровые клавиши будущего калькуляттора), edit(на самом деле его потомок), глобальная переменная(Number). При нажатии на кнопку(Button...
Вопрос № 58895: Подскажите пожалуйста как из моей программы документ *.doc, сохранить как обычный текст, или как *.html. Вообщем нужно написать что-то типа BookShelf - для создания электронных учебников, но в интерактивном режиме, с остальными форматами понятно, а с...
Вопрос № 58896: вопрос от новичка поэтому сильно неудивляйтесь у меня задача из Edit передать данные в ListBox я в курсе что Edit это тип (Text) а ListBox (String) но я знаю что это возможно если можно пожалуста приведите пример как это сдела...

Вопрос № 58.863
Уважаемые эксперты. Как можно закрыть другое приложение из программы Delphi? Если известно строка заголовка окна.
Отправлен: 14.10.2006, 11:10
Вопрос задал: Пепеляев Александр Павлович (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Monah
Здравствуйте, Пепеляев Александр Павлович!
Ищем хендел по заколовку и посылаем сообщение

Приложение:

Ответ отправил: Monah (статус: 4-ый класс)
Ответ отправлен: 14.10.2006, 11:24

Отвечает: h2d [PX team]
Даров, Пепеляев Александр Павлович.
если известен тока заголовок то это можно сделать так:

∙ sendmessage(findwindow(nil,'Program1'),wm_close,0,0);

если же заголовок динамически изменяецца во время работы приложения, то так ты его не закроешь. в подобном случае юзай WinSight32, поставляемую в комплекте с Delphi, для определения ; класса окна, а затем закрывай окно вот так:

∙ sendmessage(findwindow('class',nil),wm_close,0,0);
---------
Прав всегда Админ, ибо в трех лицах есть он единая власть высшая в классе дисплейном!
Ответ отправил: h2d [PX team] (статус: 2-ой класс)
Ответ отправлен: 14.10.2006, 12:41
Оценка за ответ: 5
Комментарий оценки:
получилось, спасибо


Вопрос № 58.865
Скажите, в какой переменной храниться знак точки вещественных чисел? И возможно ли его поменять?
Отправлен: 14.10.2006, 11:38
Вопрос задал: Томша Павел (статус: 2-ой класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Monah
Здравствуйте, Томша Павел!
DecimalSeparator. И если не ошибаюсь он чувствителен к языку. Поменять можно, но не знаю зоны видимости замены, только для приложения, для системы до перезагрузки, или реальная замена...
Ответ отправил: Monah (статус: 4-ый класс)
Ответ отправлен: 14.10.2006, 11:58

Отвечает: Gh0stik
Здравствуйте, Томша Павел!

Судя по всему вас интересует форматированный вывод вещественных чисел.
Что бы поменять знак точки нужно внести изменения в такую запись типа TFormatSettings:

var
tFrm:TFormatSettings;
x:real;
begin
tFrm.DecimalSeparator:=','; //разделяющий знак для вещ.чисел
tFrm.DateSeparator:='/'; //разделяющий знак для дат
ShowMessage(FloatToStrF(x,ffFixed,8,2,tFrm));
end;


Где FloatToStrF - функция которая переводит вещественное число в форматированную строку (числа 8 и 2 говорят о количестве знаков числа и знаков после разделителя).

Удачи!!!
---------
Господь Бог - это всего лишь сверхмощный генератор случайных чисел, в соответствии с которыми сочетаются события на Земле. Генератор случайных чисел - и только.
Ответ отправил: Gh0stik (статус: Практикант)
Ответ отправлен: 14.10.2006, 11:59


Вопрос № 58.889
Здравствуйте Уважаемые эксперты.
Помогите решить следущую проблему.
Есть форма На неё брошено 10 кнопок(цифровые клавиши будущего калькуляттора), edit(на самом деле его потомок), глобальная переменная(Number).
При нажатии на кнопку(Button1Click наример)
Вызываю процедуру(обозвал AddSimbol()), которая в зависимости от обработчика её вызвавшего,
присваивает переменной Number соответствующее значение. То есть
если Button1Click то Number := 1
если Button2Click то Number := 2 и т.п.
Не могу перевести это условие на понятный Delphi 7 язык.
Можно конечно сделать так:

procedure Button1Click(Sender: TObject);
begin
Number := 1;
Edit1.Text:= Edit1.Text + inttostr(Number);
end;
Но, так придётся писать для каждой кнопки.
А, если учесть,что на этом обработчик события не завершается...
С уважением Михаил.
Отправлен: 14.10.2006, 16:31
Вопрос задал: MIXAIL (статус: Посетитель)
Всего ответов: 5
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Mexes
Здравствуйте, MIXAIL!
Можно для всех кнопок установить единый обработчик.
Если заголовок кнопок соответствует цифрам калькулятора, то:

procedure FigureButtonClick(Sender: TObject);
begin
Number := StrToInt((Sender as TButton).Caption);
Edit1.Text:= Edit1.Text + inttostr(Number);
end;

Если не соответствует, то проставьте соответствующий Tag у кнопок (у кнопки '0' - 0, '1' - 1 и т. д. Код:

procedure FigureButtonClick(Sender: TObject);
begin
Number := (Sender as TButton).Tag;
Edit1.Text:= Edit1.Text + inttostr(Number);
end;
Ответ отправил: Mexes (статус: 4-ый класс)
Ответ отправлен: 14.10.2006, 16:47
Оценка за ответ: 5
Комментарий оценки:
Спасибо. Попробую.

Отвечает: n0name
Здравствуйте, MIXAIL!
Если свойство Caption у кнопок соответсвует их значениям. '1' -> 1, то можно писать так:
procedure ButtonClick(Sender: TObject);
begin
Edit1.Text := Edit1.Text + (Sender as TEdit).Caption;
end;
А в обработчиках OnClick у кнопок ставить ButtonClick.
Ответ отправил: n0name (статус: 7-ой класс)
Ответ отправлен: 14.10.2006, 16:48
Оценка за ответ: 5
Комментарий оценки:
Спасибо. Интересный вариант. Попробую.

Отвечает: Н.В.
Здравствуйте, MIXAIL!
Есть такая идея: создаёте единый обработчик события OnKeyPress для формы и всех кнопок.
В обработчике проверять, какой символ введён (Key:Char -- введённый символ). Если цифра или точка (запятая), то добавлять в Edit нужный символ. Если минус, плюс и т.д., выполнять нужное действие (что-то типа "ButtonPlus.Click;" ). Если введён недопустимый символ, то можно забивать Key пустым символом (key := #0;).

Удачи!

Приложение:

---------
http://TheDelphi.Ru

Ответ отправил: Н.В. (статус: 7-ой класс)
Ответ отправлен: 14.10.2006, 17:05
Оценка за ответ: 5
Комментарий оценки:
Спасибо. Попробую.

Отвечает: Melamed
Здравствуйте, MIXAIL!
Проще всего пользоваться свойством Tag. При разработка приложения свойству каждой кнопке присваиваешь значение от 0 до 9 (данное свойство целого типа). А потом в обрабодm 5;икеприложения пишешь (см Приложение)

Приложение:

Ответ отправил: Melamed (статус: 6-ой класс)
Ответ отправлен: 14.10.2006, 17:34
Оценка за ответ: 5
Комментарий оценки:
Спасибо. Попробую.

Отвечает: Sattar
Здравствуйте, MIXAIL!
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,shellapi;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
procedure AddSimbol(var Mes:TMessage); message WM_USER+14;
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.AddSimbol(var Mes:Tmessage);
begin
ShowMessage('Була натиснута '+inttostr(Mes.WParam)+' кнопка.');
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
SendMessage(Handle,WM_USER+14,1,1);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
SendMessage(Handle,WM_USER+14,2,1);
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
SendMessage(Handle,WM_USER+14,3,1);
end;
end.
Ответ отправил: Sattar (статус: 1-ый класс)
Ответ отправлен: 15.10.2006, 13:53
Оценка за ответ: 5
Комментарий оценки:
Спасибо. Буду разбираться.


Вопрос № 58.895
Подскажите пожалуйста как из моей программы документ *.doc, сохранить как обычный текст, или как *.html. Вообщем нужно написать что-то типа BookShelf - для создания электронных учебников, но в интерактивном режиме, с остальными форматами понятно, а с Word овским нет. Можете подсказать готовый компонент.
Отправлен: 14.10.2006, 17:52
Вопрос задал: Kolyan (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Monah
Здравствуйте, Kolyan!
Проще всего воспользоваться технологией OLE, на память не вспомню как, прошу прощения. Общая схема такова, подключаешься к серверу автоматизации Word, просишь его открыть документ, а потом SaveAs... При этом сам Word можно не показывать.
Ответ отправил: Monah (статус: 4-ый класс)
Ответ отправлен: 14.10.2006, 19:23

Отвечает: Werewolf
Здравствуйте, Kolyan!
В приложении при нажатии на кнопку вордовский файл сохраняется процедурой SaveWordDocToFromat в файл заданного формата.

Удачи.

Приложение:

Ответ отправил: Werewolf (статус: Студент)
Ответ отправлен: 16.10.2006, 12:16
Оценка за ответ: 5
Комментарий оценки:
Спасибо

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

Все гениальное просто...
Для начала располагаете на своем проэкте компонент WordApplication (вкладка Servers) и не забудте про кнопочку (Button). Далее пишим примерно такой обработчик:

procedure TForm1.Button1Click(Sender: TObject);
var FileNm,flFormat:OleVariant;

begin
with WordApp do
begin
ConnectKind:=ckRunningOrNew;
AutoQuit:=false;
Options.CheckSpellingAsYouType:=true;//не проверяем синтаксис
Options.CheckGrammarAsYouType:=true; //не проверяем грамматику
Visible:=true; //видно ли Word
{ Documents.Add(EmptyParam,EmptyParam,EmptyParam,EmptyParam); //создаем новый документ, если это необходимо...}
FileNm:='путь к файлу *.doc';
Documents.Open(FileNm,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam);//открываем файл doc.
end;
flFormat:=wdFormatText;//формат для сохранения...
FileNm:='новый';
WordApp.ActiveDocument.SaveAs(FileNm,flFormat,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam, EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam);

WordApp.Disconnect;
WordApp.Quit;//закрываем Word
end;


А вот параметры для других форматов (я думаю Вы разберетесь сами):

wdFormatDocument = 0,
wdFormatTemplate = 1,
wdFormatText = 2,
wdFormatTextLineBreaks = 3,
wdFormatDOSText = 4,
wdFormatDOSTextLineBreaks = 5,
wdFormatRTF = 6,
wdFormatUnicodeText = 7,
wdFormatEncodedText = 7,
wdFormatHTML = 8.

Удачи!!!
---------
Господь Бог - это всего лишь сверхмощный генератор случайных чисел, в соответствии с которыми сочетаются события на Земле. Генератор случайных чисел - и только.
Ответ отправил: Gh0stik (статус: Практикант)
Ответ отправлен: 16.10.2006, 12:28
Оценка за ответ: 5


Вопрос № 58.896
вопрос от новичка поэтому сильно неудивляйтесь
у меня задача из
Edit
передать данные в
ListBox
я в курсе что Edit это тип (Text) а ListBox (String) но я знаю что это возможно
если можно пожалуста приведите пример как это сделать
заранее спасибо
Отправлен: 14.10.2006, 18:09
Вопрос задал: Fins (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Н.В.
Здравствуйте, Fins!
Я так понял, что при нажатии на кнопку Вам надо текст из Edit добавить в Listbox. Если так, то: ListBox1.Items.Add(Edit1.Text);

В ListBox'e данные хранятся в свойстве Items : TStrings. Тип TStrings - список строк.

Удачи!
---------
http://TheDelphi.Ru
Ответ отправил: Н.В. (статус: 7-ой класс)
Ответ отправлен: 14.10.2006, 18:24

Отвечает: Monah
Здравствуйте, Fins!
Добавлю, что можно гарантированно добавить в конец списка Listbox1.Items.Append(edit1.texst) или вставить в любую позицию - ListBox1.Item.Insert(Edit1.text, Позиция); Так же можно вставить так - ListBox.Item.Text:=ListBox.Item.Text+#10#13+edit1.text; По сути свойство Text является строкой разделенной символами перевода строки. Функция Add и Append возврощают в значение Integer позицую на которую строка вставлена.

Приложение:

Ответ отправил: Monah (статус: 4-ый класс)
Ответ отправлен: 14.10.2006, 19:18

Отвечает: W@NDeReR
Здравствуйте, Fins!
Это можно сделать так
procedure TForm1.Button1Click(Sender: TObject);
begin
ListBox1.Items.Add(Edit1.Text);
end;
Ответ отправил: W@NDeReR (статус: 1-ый класс)
Ответ отправлен: 15.10.2006, 11:50


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

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

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

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

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


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


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.37 от 04.10.2006
Яндекс Rambler's Top100

В избранное