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

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


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

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

Выпуск № 456
от 27.04.2006, 17:35

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


Вопрос № 40949: Подскажите, как сформировать сочетания. Например, для 4 имеем следующее: 1 2 3 4 1 3 4 1 2 3 1 2 4 1 2 1 3 1 4 1 Главное чтобы в каждом из них присутствовала 1. ...
Вопрос № 40989: Как сделать чтобы Timer1 обрабатывал не только перемещение "мыши", но и нажатие на кнопку "мыши"? Короче, я сделал проц. MoveMouse(O:TObject); В ней обрабатываются координаты - всё OK. Теперь мне нужно сделать обработ...
Вопрос № 40991: Приветствую!!! Уважаемые эксперты, нужна помощь по следующему вопросу. Я написал программку которая сжимает файл используя zlib. Но как сделать, чтобы получался самоизвлекающийся архив (как например может делать winrar). Я понимаю так, что ну...
Вопрос № 41017: Здравствуйте, вы не могля бы мне помочь? Мне нужно отправить почту с помощью моей программы. Как мне это лучше сделать? ( я просто не очень разбираюсь в протоколах, для меня что SMTP что POP3 разницы нет). ...

Вопрос № 40.949
Подскажите, как сформировать сочетания. Например, для 4 имеем следующее:
1 2 3 4
1 3 4
1 2 3
1 2 4
1 2
1 3
1 4
1

Главное чтобы в каждом из них присутствовала 1.
Отправлен: 21.04.2006, 17:29
Вопрос задал: Иванов Михаил Викторович (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Евгения
Здравствуйте, Иванов Михаил Викторович!
Привожу программу на Паскале ниже - написана конечно через н-ное место - но делает то,ч то вам надо :) под себя преобразуете.

Приложение:

---------
Я не волшебник, я только учусь... А разве кто-то обещал, что будет легко?

Ответ отправила: Евгения (статус: 4-ый класс)
Ответ отправлен: 22.04.2006, 00:11

Отвечает: Полховский Александр Владимирович
Здравствуйте, Иванов Михаил Викторович!
Попытаюсь объяснить в общих чертах (без кода, ибо Вам его пример уже предоставили).
Нужно в цикле for k1:=2 to N сформировать все возможные комбинации, имеющие k1 разряд. Делается это очень просто: фактически, мы имеем число в k1-той системе счисления. То есть, чтобы подобрать все варианты, достаточно перебирать цифры в первом разряде, изменяя их в других разрядах, если цифра дошла до максимального значения. Естественно, необходимо сделать проверку на совпадение цифр в разных разрядах. ну и Ваше условие с единицей туда воткнуть. Нет единицы - пропускаем число. Для формирования числа я бы пользовался типом string. Или же переводил число (очередное) в string и там обрабатывал условия.

Хотелось бы верить, что для решения задачи этого хватит.
---------
Спасём нашу хрупкую планету !
Ответ отправил: Полховский Александр Владимирович (статус: Практикант)
Ответ отправлен: 23.04.2006, 17:19


Вопрос № 40.989
Как сделать чтобы Timer1 обрабатывал не только перемещение "мыши", но и нажатие на кнопку "мыши"?
Короче, я сделал проц. MoveMouse(O:TObject);
В ней обрабатываются координаты - всё OK.
Теперь мне нужно сделать обработку на нажатие кнопок "мыши".
Я сделал сначала это через в событиях Image1.OnMouseDown
procedure ClickMouse(O:TObject;Button:TMouseButton;Shift:TShiftState;X,Y:Integer);
Она конечно, реагирует на нажатие но не в ДИНАМИКЕ, а только при "Click'e".
Короче, нужно как-то "объединить" эти две процедуры в одну и поставить в обработку Timer1.
Я не могу поставить проц. ClickMouse на обработку в Timer1 - она попросту не ставиться.
В итоге я хочу перещать объект по Image1 мышкой (левая кнопка).
Само перемещение я уже сделал (относительно нач. координаты "мыши" и текущей), но оно реагирует только в "конце", когда нажимаешь кнопку еще раз.
Это естественно, потому что опрос "мыши" идёт не динамически, а только при "Click'e".
Как видите, я быстро учусь. Мне главное примеры несложные увидеть, а дальше я уже сам доведу.

(Медленно запрягаю - быстро еду)

Алекс
Отправлен: 22.04.2006, 00:43
Вопрос задал: AlexD (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 5)

Отвечает: Дмитриев Алексей Иванович
Здравствуйте, AlexD!
А почему бы Вам не использывать событие OnMouseMove, вместо OnTimer?
Таким образом снижается и процессорное время, иснользуемое программой.
В приложении привожу что-то вроде кода программы.

Приложение:

Ответ отправил: Дмитриев Алексей Иванович (статус: 1-ый класс)
Ответ отправлен: 23.04.2006, 15:35

Отвечает: Полховский Александр Владимирович
Здравствуйте, AlexD!
Рискну предложить метод Drag'n'Drop.
Вот простой пример (подробнее в справке можно узнать).

unit Unit15;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
procedure Button1StartDrag(Sender: TObject;
var DragObject: TDragObject);
procedure Button1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure Button1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Button1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
dx, dy: integer;
pressed1: boolean;

implementation

{$R *.dfm}

procedure TForm1.Button1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
accept:=true;
Button1.Left:=screentoclient(mouse.CursorPos).X-dx;
Button1.Top:=screentoclient(mouse.CursorPos).Y-dy;
end;

procedure TForm1.Button1StartDrag(Sender: TObject;
var DragObject: TDragObject);
begin
dx:=screentoclient(mouse.CursorPos).x-button1.Left;
dy:=screentoclient(mouse.CursorPos).y-button1.Top;
end;

procedure TForm1.Button1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if pressed1
then Button1.BeginDrag(true);
end;

procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
pressed1:=true;
end;

procedure TForm1.Button1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
pressed1:=false;
end;

end.

Надеюсь, обработчики сами сможете связать.
---------
Спасём нашу хрупкую планету !
Ответ отправил: Полховский Александр Владимирович (статус: Практикант)
Ответ отправлен: 23.04.2006, 16:03


Вопрос № 40.991
Приветствую!!!
Уважаемые эксперты, нужна помощь по следующему вопросу.
Я написал программку которая сжимает файл используя zlib. Но как сделать, чтобы получался самоизвлекающийся архив (как например может делать winrar). Я понимаю так, что нужно написать отдельный модуль, который производит декомпрессию файла и как-то прицепить его к получившемуся архиву. Или я неправ?
Отправлен: 22.04.2006, 01:09
Вопрос задал: Stan (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Лучников Ю.В.
Здравствуйте, Stan!

Почитайте на CodeNet ветку форума "SFX-архив в Delphi. Методы создания". Там же вы сможете найти рабочий пример обсуждаемого.
Если какие-либо моменты нужно будет уточнить - пишите в мини-форум, поможем;)

Успехов!
Ответ отправил: Лучников Ю.В. (статус: *Мастер-Эксперт)
Россия, Киров
WWW: нЧат - Наш Чат!
ICQ: 176308580
----
Ответ отправлен: 22.04.2006, 01:41


Вопрос № 41.017
Здравствуйте, вы не могля бы мне помочь?
Мне нужно отправить почту с помощью моей программы. Как мне это лучше сделать? ( я просто не очень разбираюсь в протоколах, для меня что SMTP что POP3 разницы нет).
Отправлен: 22.04.2006, 15:30
Вопрос задал: Toxic~Fire (статус: 2-ой класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: mvp
Здравствуйте, Toxic~Fire!
Не помню, с какого сайта брал, но честно признаюсь, что не моё.
Консольное приложение, которое отправляет простое письмо. Если вы знакомы с Delphi, то не составит труда оформить это в виде функции.

Прада ошибки связи и т. п. придётся ловить самому

Приложение:

---------
Моя совесть чиста - не бывшая в употреблении

Ответ отправил: mvp (статус: 10-ый класс)
Ответ отправлен: 22.04.2006, 16:15

Отвечает: Diman_A
Здравствуйте, Toxic~Fire!
Возможны следующие варианты:
- Вызвать почтовую программу по умолчанию с заполненными полями
- Использовать MAPI
- Использовать SMTP
- Использовать COM интерфейс Outlook
Автозаполнение формы письма в почтовой программе установленной по умолчанию:

uses shellapi;
...
procedure TForm1.Button1Click(Sender: TObject);
begin
shellexecute(handle,
'Open',
'mailto:necto@ya.com?subject=Regarding your advice&Body=First%20Line%0D%0ASecond%20line&CC=vnecto@server.com',
nil, nil, sw_restore);
end;

Пробелы в тексте надо заполнять сочетанием %20
Конец строки обозначать как %0D%0A
Поля отделять друг от друга символом &

Работа через MAPI
(Пример с delphi.mastak.ru)

unit Email;
interface
uses Windows, SusUtils, Classes;
function SendEmail(const RecipName, RecipAddress, Subject, Attachment: string): Boolean;
function IsOnline: Boolean;
implementation
uses Mapi;
function SendEmail(const RecipName, RecipAddress, Subject, Attachment: string): Boolean;
var
MapiMessage: TMapiMessage;
MapiFileDesc: TMapiFileDesc;
MapiRecipDesc: TMapiRecipDesc;
i: integer;
s: string;
begin
with MapiRecipDesc do begin
ulRecerved:= 0;
ulRecipClass:= MAPI_TO;
lpszName:= PChar(RecipName);
lpszAddress:= PChar(RecipAddress);
ulEIDSize:= 0;
lpEntryID:= nil;
end;
with MapiFileDesc do begin
ulReserved:= 0;
flFlags:= 0;
nPosition:= 0;
lpszPathName:= PChar(Attachment);
lpszFileName:= nil;
lpFileType:= nil;
end;
with MapiMessage do begin
ulReserved := 0;
lpszSubject := nil;
lpszNoteText := PChar(Subject);
lpszMessageType := nil;
lpszDateReceived := nil;
lpszConversationID := nil;
flFlags := 0;
lpOriginator := nil;
nRecipCount := 1;
lpRecips := @MapiRecipDesc;
if length(Attachment) > 0 then begin
nFileCount:= 1;
lpFiles := @MapiFileDesc;
end else begin
nFileCount:= 0;
lpFiles:= nil;
end;
end;
Result:= MapiSendMail(0, 0, MapiMessage, MAPI_DIALOG
or MAPI_LOGON_UI or MAPI_NEW_SESSION, 0) = SUCCESS_SUCCESS;
end;
function IsOnline: Boolean;
var
RASConn: TRASConn;
dwSize,dwCount: DWORD;
begin
RASConns.dwSize:= SizeOf(TRASConn);
dwSize:= SizeOf(RASConns);
Res:=RASEnumConnectionsA(@RASConns, @dwSize, @dwCount);
Result:= (Res = 0) and (dwCount > 0);
end;
end.

Пример отправки письма используя COM объект Outlook
uses Outlook_TLB;
var outlook : _application;
Procedure Init;begin outlook := Coapplication_.Create;
end;
procedure SendEmail;begin with Outlook.CreateItem(olMailItem) as mailitem do
begin
To_ := 'email@email.com';
cc:='email2@email.com';
Subject := 'This is subject line'; Attachments.Add('FileName',1,1,'This is attachment');
Body :='This is email body';
Send;
end;
end;

Пример работы с SMTP и исходник формы к нему смотри в приложении.

Приложение:

Ответ отправил: Diman_A (статус: 9-ый класс)
Ответ отправлен: 22.04.2006, 17:27


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

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

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

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

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала 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.30 от 09.04.2006
Яндекс Rambler's Top100

В избранное