Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по Delphi (все версии) - часть 4

Автор: Frodo_Torbins
Дата сообщения: 10.04.2009 21:43
Aleksandr_N
Проблемы в том, что перекомпилировать RTL вы не сможете, и она останется юникодной, тоже самое с VCL. Плюс с винапи можно получить кучу глюков. В общем если нужен анси, то либо оставайтесь на D2007, либо используйте специальный AnsiString.
ZBEP
Жесть конечно Почитайте еще это: Жизнь и смерть в режиме run-time.
Автор: Aleksandr_N
Дата сообщения: 10.04.2009 22:05
Frodo_Torbins
Ну... Логично...
Автор: ZBEP
Дата сообщения: 10.04.2009 22:27
afiget, Frodo_Torbins, СПАСИБО!
Автор: whitewolfs
Дата сообщения: 11.04.2009 05:41
Frodo_Torbins, спасибо за объяснения. Похоже придется всё таки переписывать прогу.
Автор: ZBEP
Дата сообщения: 11.04.2009 13:21
Есть ли какая нить маленькая программка, которая сможет в тексте на 13МБ заменить это:

Код: if (Edit40.Text<>t1) and (Edit38.Text<>t1) and (Edit36.Text<>t1) and (Edit34.Text<>t1) and (Edit32.Text<>t1) and (Edit30.Text<>t1) and (Edit28.Text<>t1) and (Edit26.Text<>t1) and (Edit24.Text<>t1) and (Edit22.Text<>t1) and (Edit20.Text<>t1) and (Edit18.Text<>t1) and (Edit16.Text<>t1) and (Edit14.Text<>t1) and (Edit12.Text<>t1) and (Edit10.Text<>t1) and (Edit8.Text<>t1) and (Edit6.Text<>t1) and (Edit4.Text<>t1) and (edit2.Text<>t1)
Автор: Frodo_Torbins
Дата сообщения: 11.04.2009 13:31
ZBEP
А IDE разве не справляется? Вообще для работы с текстом можно и ворд использовать, или вот еще есть заменитель блокнота: AkelPad.
Автор: ZBEP
Дата сообщения: 11.04.2009 14:15
Frodo_Torbins, а где в нем замена?
Ctrl+h не катит.
Да и виснет он на 10 форме часто, поэтому не подойдет.
ворд, длокнот - не вмещают первое условие.
AkelPad - Идеально подошол)))

Добавлено:
Блин, туплю...
Как мне в отдельную функцию засунуть

Код: var t1,t2 ... Ber1, .. , Yac6 :string;
begin
{Дальше условия ...if CheckEdits(Form10... ... then edit2.text:=t1}
Автор: morder11
Дата сообщения: 12.04.2009 14:13
Здраствуйте товарищи програмеры!

есть форма TForm4 = class(TForm)

есть
Form4TRADE: TForm4;
Form4GENTRADE: TForm4;

вместо стандартной
Form4: TForm4;

далее динамически создаются
Application.CreateForm(Tform4,FormNames.SelectFormName);

где
FormNames.SelectFormName - переменная типа TForm4 со значением Form4TRADE и Form4GENTRADE;

мне нужно при переключении форм определить какая форма активна

по событию TForm4.FormActivate я вызываю функцию
GetTableRecordBySelectForm(self)

а в функции сравниваю
function GetTableRecordBySelectForm(MyForm:TForm4):ТутНужныйВозващаемыйТип;
begin
if MyForm=Form4TRADE then result:= ...;
if MyForm=Form4GENTRADE then result:= ...;
...

в результате
сравнение не происходит и функция ничего не дает

пробовал сравнивать так
if MyForm.Name = Form4TRADE.Name then result:= ...;
if MyForm.Name = Form4GENTRADE.Name then result:= ...;

компилируется, но при вызове выдает ошибку доступа к данным из памяти

как сравнить? В чем моя ошибка?
Автор: Frodo_Torbins
Дата сообщения: 12.04.2009 14:52
ZBEP
Цитата:
Как мне в отдельную функцию засунуть

Подробнее пожалуйста. Но скорее всего эту функцию нужно сделать методом класса, т е объявить там где у вас стоит комент "{ Public declarations }"

morder11
Цитата:
компилируется, но при вызове выдает ошибку доступа к данным из памяти

Наверно на момент вызова функции формы еще не созданы, или уже уничтожены.
Автор: morder11
Дата сообщения: 12.04.2009 15:37
При отладке оказалось что формы имеют имена Form4 и Form4_1, вместо Form4TRADE и Form4GENTRADE

Почему так произошло?
Подскажите плиз литературу по работе с несколькими экземплярами динамических форм, возможно неправильно их создаю
Автор: ZBEP
Дата сообщения: 12.04.2009 15:40
Frodo_Torbins, спс.
Немного подругому решил эту проблемку, но эффект тотже))
Теперь вместа 13 метров Unit10.pas занимает 907 КБ. ))
Автор: Frodo_Torbins
Дата сообщения: 12.04.2009 16:26
morder11
Немного не в тему, но возможно поможет: Жизнь и смерть в режиме run-time.
ZBEP
Рад за вас, хотя нет предела совершенству
Автор: morder11
Дата сообщения: 12.04.2009 17:33
Frodo_Torbins
Спасибо покопаюсь.
Проблему не решил но придумал способ попрорще и обошелся без этих мудрений)
Автор: delover
Дата сообщения: 12.04.2009 19:06
С днём космонавтики! Всех программистов.
Автор: SANIOK_AV
Дата сообщения: 13.04.2009 11:19
Доброго времени суток!
такой вопрос:
можно ли как-то автоматизировать (в Делфи) и как это лучше сделать:
создание нового письма в MS Outlook
загнав в тему письма определённую информацию, в текст письма текст из файла (либо из RichEdit) и прикрепить к письму определённый файл
?
Заранее благодарен!
Автор: greenpc
Дата сообщения: 13.04.2009 11:27
SANIOK_AV

Цитата:
создание нового письма в MS Outlook

тяжело - перехват чужого приложения
ShellExecute(Handle, 'open', 'mailto:email1&cc=email3?subject=Это%20тема&body=это%20текст%20письма%0dЭто%20другая%20строка ',
nil, nil, SW_SHOWNORMAL);
а если самому создавать и отправлять, то
indy или похожие компоненты в помощь
Автор: SANIOK_AV
Дата сообщения: 13.04.2009 11:31
greenpc

Цитата:
а если самому создавать и отправлять

что имется в виду?

Цитата:
indy или похожие компоненты в помощь

что за компонент и что он делает?

Автор: DmitryKz
Дата сообщения: 13.04.2009 11:42

Цитата:
тяжело - перехват чужого приложения

Ну, вряд ли прямо так тяжело. В конце концов COM-интерфейс у офисных приложений никто не отменял. А с ВинАПИ у меня был такой код, откуда брал не помню:
SANIOK_AV

Код: ShellExecute(GetDesktopWindow(),
'open',
PChar('mailto:address@address.com'+ //заполняю мыло
'?subject=Здесь%20тема%20письма'+
'&body=Сам%20Текст%20письма%20'+Edit1.Text+' '+Edit2.Text+
'%0d%0aЕще%20что-нибудь'),
nil, nil, SW_SHOWNORMAL);
Автор: Coltrain
Дата сообщения: 13.04.2009 11:43
SANIOK_AV

Цитата:
можно ли как-то автоматизировать (в Делфи) и как это лучше сделать:
создание нового письма в MS Outlook
загнав в тему письма определённую информацию, в текст письма текст из файла (либо из RichEdit) и прикрепить к письму определённый файл


Можно при помощи MAPI. Примерно так:


Цитата:

uses MAPI;

....

type
TPathName=Array[0..MAX_PATH] of Char;

....

Function SendMail(ARecepients, ASubject, AMessage, AFiles: string): integer;
var tmpName2 : TPathName;
MapiMessage : TMapiMessage;
MapiFileDesc : TMapiFileDesc;
ToRec : TMapiRecipDesc;
MError : Cardinal;
MAPI_Session : Cardinal;
Flag : Integer;
WndList : Pointer;

begin
MError := MapiLogon(Application.Handle,PChar(''),PChar(''),
MAPI_LOGON_UI or MAPI_NEW_SESSION, 0, @MAPI_Session);

if MError <> SUCCESS_SUCCESS then
begin
result := MError;
MessageDlg('Ошибка при установлении сесси. Связывайтесь с разработчиком программы',mtError,[mbOK],0);
Exit;
end;

FillChar(MapiMessage,SizeOf(MapiMessage),#0);
FillChar(ToRec,SizeOf(ToRec),#0);
FillChar(MapiFileDesc,SizeOf(MapiFileDesc),#0);

ToRec.ulReserved := 0;
ToRec.ulRecipClass := 0;
ToRec.lpszName := PChar('');
ToRec.lpszAddress := Pchar(ARecepients);
ToRec.ulRecipClass := MAPI_TO;
ToRec.ulEIDSize := 0;
ToRec.lpEntryID := nil;

With MapiFileDesc do
begin
ulReserved:=0;
flFlags:=0;
nPosition:=Cardinal(-1);
lpszPathName:=PChar(AFiles);
StrPCopy(tmpName2,ExtractFileName(AFiles));
lpszFileName:=tmpName2;
lpFileType:=nil;
end;

with MapiMessage do
begin
ulReserved := 0;
lpszSubject := PChar(ASubject);
lpszNoteText := nil;
lpszMessageType := nil;
lpszDateReceived := nil;
lpszConversationID := nil;
flFlags := 0;
lpOriginator := nil;
nRecipCount := 1;
lpRecips := @ToRec;
nFileCount := 1;
lpFiles := @MapiFileDesc;
end;

WndList := DisableTaskWindows(0);

// Flag := MAPI_DIALOG or MAPI_LOGON_UI or MAPI_NEW_SESSION
// Flag := MAPI_LOGON_UI
Flag := MAPI_DIALOG;

try
MError:=MapiSendMail(0, Application.Handle,
MapiMessage,
Flag, 0);
finally
EnableTaskWindows(WndList);
end;

MAPILogOff(MAPI_Session, Application.Handle,0,0);
result := MError;
end;
Автор: kirmalex
Дата сообщения: 13.04.2009 12:34
Этот авто выпросил бан
Автор: SANIOK_AV
Дата сообщения: 13.04.2009 12:40
DmitryKz

Цитата:

Код:ShellExecute(GetDesktopWindow(),
'open',
PChar('mailto:address@address.com'+ //заполняю мыло
'?subject=Здесь%20тема%20письма'+
'&body=Сам%20Текст%20письма%20'+Edit1.Text+' '+Edit2.Text+
'%0d%0aЕще%20что-нибудь'),
nil, nil, SW_SHOWNORMAL);

при выполнении этого кода сразу произойдёт отправка?
мне просто нужно только создание нового письма...заполнение темы...самого содержимого письма...и прикрепление файла...
а выбор адреса и отправка эт вручную предпологается сделать...
Автор: kirmalex
Дата сообщения: 13.04.2009 12:46
Этот автор выпросил бан.
Автор: SANIOK_AV
Дата сообщения: 13.04.2009 12:50
Coltrain
пока ругается на:

Цитата:

TPathName=Array[0..MAX_PATH] of Char;


expected ':' but '=' found

я эту строку пытаюсь вставить в блок type
в своей программе...
может я чёт не так понял...
Автор: DmitryKz
Дата сообщения: 13.04.2009 13:01
SANIOK_AV
Запустится только Оутлук с уже готовым текстом письма, заполненной темой письма и адресом. Отправлять надо вручную, то есть, если не хочешь автоматизировать. Адрес, конечно, ничто не мешает править вручную.
Автор: ShIvADeSt
Дата сообщения: 13.04.2009 13:23

Цитата:
Запустится только Оутлук с уже готовым текстом письма, заполненной темой письма и адресом. Отправлять надо вручную, то есть, если не хочешь автоматизировать. Адрес, конечно, ничто не мешает править вручную.

Поэтому я для этих целей либо юзаю The bat (он умеет сразу отправлять) либо есть консольный клиент (не помню имя) он тоже это умеет делать.
Автор: DmitryKz
Дата сообщения: 13.04.2009 13:28
ShIvADeSt
Ну, скорее всего, я неправильно выразился - запустится почтовый клиент по умолчанию, насколько я понял - так как, например, когда на системе офиса нет запускается Outlook Express. С Бэтом не проверял Но вроде автору вопроса надо именно вручную письма отправлять.
Автор: Coltrain
Дата сообщения: 13.04.2009 13:28
SANIOK_AV

Цитата:
я эту строку пытаюсь вставить в блок type
в своей программе...
может я чёт не так понял...


Да нет. Все так.
Попробуй напрямую задать тип переменной.

Добавлено:
Ну т.е. вместо
tmpName2 : TPathName;
Делай
tmpName2 :Array[0..MAX_PATH] of Char;
а объявление типа убери
Автор: SANIOK_AV
Дата сообщения: 13.04.2009 13:36
Coltrain

Цитата:
В теле функции они не используются


а как же:

StrPCopy(tmpName2,ExtractFileName(AFiles));
lpszFileName:=tmpName2;

Coltrain

Цитата:
Добавлено:
Ну т.е. вместо
tmpName2 : TPathName;
Делай
tmpName2 :Array[0..MAX_PATH] of Char;
а объявление типа убери


понял))
Автор: DmitryKz
Дата сообщения: 13.04.2009 17:16
Ребята, а вот такой вопрос по коду, который я привел:
скажем, если хочется добавить к сообщению вложению, то, вроде как в командную строку нужно еще добавить параметр &attach=FileName.
Например, я так сделал для теста:

Код: 'mailto:aaaa@bbb.com?subject&body=bodytext&CC=aaaa&bcc=dddd&attach=''c:\1.txt'''
Автор: Kursist
Дата сообщения: 13.04.2009 19:11
Извиняюсь, что перебиваю тему.
Возникла проблема. Delphi2007/Vista
В программе несколько форм. Неожиданно перестала запускаться одна из форм, на ней
несколько стандартных компонентов для ввода данных. На этой форме нет процедуры создания, но именно при создании приложения, компилятор проходит создание предыдущих форм, а на этой вылетает ошибка. В ассемблере не разбираюсь, поэтому информацию о состоянии ЦПУ на момент ошибки понять не могу.
Какие могут быть идеи?

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: Глобальные переменные в разных формах с++ builder 'a.


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.