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

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

Автор: delover
Дата сообщения: 14.07.2009 15:13
Frodo_Torbins
А готовой обёртки - компонента для системного меню где-нибудь бывало видно?
Автор: Frodo_Torbins
Дата сообщения: 14.07.2009 15:22
delover
На torry парочка есть, но я их не проверял в работе.
Автор: delover
Дата сообщения: 14.07.2009 20:26
Frodo_Torbins
Пробовал нагуглить в torry, - не получается. Плохо знаком с сайтом, если нетрудно будет линку, то можно и в ПМ. Пока я думаю свой - простенький сделать, но интересно было бы идеи увидеть. Так сказать направление.
Автор: Frodo_Torbins
Дата сообщения: 14.07.2009 21:47
delover
Вот линк: http://www.torry.net/pages.php?id=147 правда там все довольно давнее.
Автор: spasius
Дата сообщения: 15.07.2009 00:11
может кто встречал такую ситуацию на Инди SMTP сервер собирает почту от клиентов и далее ее нужно переправить на другой сервер. Нашел вроде как пример использующий SMTP Relay но его не все сервера принимают, некоторые на отрез отказываются.
Если кто может подсказать, заранее спасибо ....
Автор: NOwlar
Дата сообщения: 15.07.2009 01:17
spasius
А на какой сервер её надо отправлять? на какой-то один? Просто, не все сервера, а точнее, ни один правильно настроеный SMTP-сервер не будет переправлять почту на другие сервера (исключение: почта от локальных для SMTP-сервера клиентов), он только принимает почту. Может в этом дело?
Автор: SerGap
Дата сообщения: 15.07.2009 10:27
Подскажите, загружаю .lng файл (а конкретнее ru.lng - языковой файл Оперы) в RichEdit.
Файл в кодировке UTF-8. Если загружаю так -
RichEdit3.Lines.LoadFromFile('ru.lng'); то он загружается полностью, но русские буквы превращаются в кракозябры.
Если так RichEdit3.Lines.LoadFromFile('ru.lng', TEncoding.UTF8); то с русским все нормально, но загружается "огрызок" от файла размером около 8Кб (весь файл ~380Кб).
Пробовал перед загрузкой макс. размер текста в RichEdit установить в ручную -
RichEdit3.Perform(EM_LIMITTEXT, РазмерТекста, 1); но не помогло.
Кто сталкивался, подскажите пожалуйста, как исправить?
Автор: JohnSilver182
Дата сообщения: 15.07.2009 10:52
spasius Я так навкидку не скажу , но мне стало любопытно , чем самописный SMTP лутше уже существующих .
Автор: MrZeRo
Дата сообщения: 15.07.2009 17:51
spasius
У компонента TIdSMTP куча разных настроек, надо знать, как его настраивать под разные сервера, например, AuthenticationType, номера портов и т.д. Надо конкретизировать проблему.
Автор: volser
Дата сообщения: 15.07.2009 20:50
SerGap
Какая версия Delphi вместе с билдом?
Автор: Aleksandr N
Дата сообщения: 15.07.2009 20:51
SerGap
Как-то была подобная проблема, но не с RichEdit (не помню с чем). Выяснилось, что ему не нравился какой-то символ, неизвестно почему. Помогла загрузка через Stream.
Автор: ShIvADeSt
Дата сообщения: 16.07.2009 01:57
Aleksandr N

Цитата:
Как-то была подобная проблема, но не с RichEdit (не помню с чем). Выяснилось, что ему не нравился какой-то символ, неизвестно почему.

Кстати да, там же идет считывание скорее всего пока не найден символ конца файла, а в юникодном ртфе он может встретиться в сочетании двух букв и обломить загрузку.
Автор: SerGap
Дата сообщения: 16.07.2009 08:52
volser
14.0.3478.22926

Aleksandr N
Спасибо, попробую.
p.s. не помогло, все вышло ровно также как и с LoadFromFile

Загрузка действительно прерывается по определенной комбинации символов или коду (поэкспериментировал)
но странно то, что прерывается она и на английских словах и на цифрах. Пробовал загрузить аналогичный en.lng - загружает его целиком, и не спотыкается в тех же местах, где в ru.lng загрузка прекращается.
Где подвох пока не понял.
Автор: NOwlar
Дата сообщения: 16.07.2009 11:05
SerGap
Есть workaround: попробуй обмануть его используя TStringList

Код: List := TStringList.Create;
List.LoadFromFile( 'ru.lng', TEncoding.UTF8 );
RichEdit3.Lines.Assign( List );
Автор: Aleksandr N
Дата сообщения: 16.07.2009 11:49
ShIvADeSt
У меня, по моему так и было.
SerGap
Тут только попробовать экспериментально, если возможно, попробуй изменить файл.
Автор: Frodo_Torbins
Дата сообщения: 16.07.2009 13:07
SerGap
Может стоит подождать RC?
Автор: SerGap
Дата сообщения: 16.07.2009 14:48
NOwlar

Цитата:
Есть workaround: попробуй обмануть его используя TStringList

А ведь получилось! Спасибо.

Автор: delover
Дата сообщения: 19.07.2009 15:19
Frodo_Torbins
Большое спасибо. Хотя он умеет только системное меню настраивать, но думаю подучить его оконному хэндлу апликации и может мемки.
Автор: whitewolfs
Дата сообщения: 21.07.2009 04:52
Уважаемые подскажите, как определить координаты выделенной в ListView строки в чужом приложении (нужно кликнуть мышью по ней)? Может винапишная функция есть?
Автор: ShIvADeSt
Дата сообщения: 21.07.2009 06:17
whitewolfs

Цитата:
Уважаемые подскажите, как определить координаты выделенной в ListView строки в чужом приложении (нужно кликнуть мышью по ней)? Может винапишная функция есть?

кликнуть мышкой принципиально? Можно просто послать нажатие кнопки Enter через keybd_event. Просто с листвью все как то через одно место сделано, вроде есть все сообщения, но напрямую получить индекс выделенного элемента нельзя - надо дополнительные телодвижения делать. Поэтому напиши что надо чтобы в итоге было.
Автор: whitewolfs
Дата сообщения: 21.07.2009 07:26
ShIvADeSt вообще хотелось бы мышкой, там по правой клавише контекстное меню должно вылазить, а в нём уже нужный пункт. Про интер думал уже, можно будет и так, только до нужного пункта придется дольше добираться, через промежуточные окна.

Индекс выделенной строки получаю, но по нему не определишь координаты...

И ещё дополнительный вопрос:
как выделить нужную строку я знаю, а вот как снять выделение с нужной или со всех сразу строк чужого ListView?


Автор: ShIvADeSt
Дата сообщения: 21.07.2009 07:43
whitewolfs

Цитата:
Индекс выделенной строки получаю, но по нему не определишь координаты...

На самом деле определишь. GetWindowRect с хэндлом ЛистВью вернет тебе координаты (Left, Top) листа относительно верхнего левого угла экрана. Далее при помощи LVM_GETITEMRECT получаешь координаты выделенного пункта (так как индекс его ты получить можешь). А далее плюсуешь левую позицию листа и левую позицию пункта, аналогично для Тора. Прибавляешь по 1 туда и сюда и получаешь координаты куда надо поместить мышь, чтобы она оказалась над пунктом.
Вообще то вопрос для ВинАПИ
Вот код который помещает курсор над пунктом с индексом Index
var
WRect,Itm:TRect;
begin
GetWindowRect(ListView1.Handle,Wrect);
if ListView_GetItemRect(ListView1.Handle,Index,Itm,LVIR_SELECTBOUNDS) then
SetCursorPos(Itm.Left+Wrect.Left+5, Itm.Top+Wrect.Top+5);
Автор: whitewolfs
Дата сообщения: 21.07.2009 09:58
ShIvADeSt спасибо! завтра попробую.
Автор: spasius
Дата сообщения: 21.07.2009 12:14
JohnSilver182
MrZeRo
при чем здесь что что лучше, что хуже. существует серваг который собирает почту через SMTP. Далее нужно ее просто переслать. И тут гвоздь. Почта разношерстная, идет по разным адресам, пароли пользователей на других серверах не известны. Вопрос в том, как потом ее переслать до конечной точки ...?
Автор: urmigar
Дата сообщения: 21.07.2009 12:26
spasius

Если я правильно понял, то тебе нужно отправить письмо, скажем, на мыло username@mailserver.com, не имея никакого логина и пароля? Так сказать smtp сервером поработать?

Сталкивался с такой проблемой, решение есть в пакете компонентов madCollection - даже с примером реализации.

Единственно, у меня возникали проблемы отправки на некоторые майл-сервисы писем, так что если кто знает чем помочь - сообщите, пожалуйста. Даже если я неправильно понял что имеет ввиду spasius, то вышеописанный вопрос интересует лично меня
Автор: spasius
Дата сообщения: 21.07.2009 13:10
urmigar
да вопрос понят правильно ... спасибо буду пробовать ...
Автор: Kursist
Дата сообщения: 22.07.2009 14:17
Подскажите, забыл как это делать.
Создаю список объектов. Нужен доступ к свойствам объектов, чтобы можно было бы их редактировать. Как-то делал, но не могу найти прежний код.
Вот код, который позволяет читать, но не позволяет редактировать - присваивать значение:


Цитата:

TapSite=Record
Empty:Boolean;
BuildingID:Integer;
End;

TSite=class
Info: TapSite;
end;

TListSite=class
private
FItem:TList;
FCount:Integer;
public
constructor Create;
function AddSite:Integer;
function Delete(ID:Integer):Boolean;
function Items(ID:Integer):TapSite;
procedure Clear;
property Count:Integer read FCount;
end;


{ TListSite }
//--------------------------SITE LIST ADD------------------------------------------------------
function TListSite.AddSite: Integer;
begin
self.FItem.Add(TSite.Create);
FCount:=FItem.Count;
Result:= FItem.Count-1;
end;
//--------------------------SITE LIST CLEAR------------------------------------------------------
procedure TListSite.Clear;
begin
FItem.Clear;
FCount:=FItem.Count;
end;
//--------------------------SITE LIST CREATE------------------------------------------------------
constructor TListSite.Create;
begin
inherited;
FItem:=TList.Create;
FCount:=FItem.Count;
end;
//--------------------------SITE LIST DELETE------------------------------------------------------
function TListSite.Delete(ID: Integer): Boolean;
begin
Result:=FALSE;
if (FItem.Count=0) or (ID>FItem.Count) then exit
else FItem.Delete(ID);
FCount:=FItem.Count;
Result:=TRUE;
end;
//--------------------------SITE LIST ITEMS------------------------------------------------------
function TListSite.Items(ID: Integer): TapSite;
begin
if (ID>0) and (ID<FItem.Count) then
Result:=TSite(FItem.Items[ID]).Info;
end;



Нужна такая реализация:
SitesList.Items(loop).Empty:=TRUE; //запись какого-то свойства объекта в списке
Автор: volser
Дата сообщения: 22.07.2009 16:03
Kursist
Так а что не работает?
Автор: Kursist
Дата сообщения: 22.07.2009 16:11
volser

for loop := 0 to Count-1 do
begin
SitesList.AddSite;
SitesList.Items(loop).Empty:=TRUE;
SitesList.Items(loop).BuildingID:=-1;
end;


Цитата:

[DCC Error] main31.pas(71): E2064 Left side cannot be assigned to
[DCC Error] main31.pas(72): E2064 Left side cannot be assigned to


(После больницы голова туго варит. Не могу вспомнить, как я это делал. Хочется спрятать приведение типов).

Не составит труда написать процедуру SetItem(ID:Integer, SiteInfo:TapSite); Но это как бы "тяжелая артилерия" - то есть, присваивать придется все элементы записи, а не по отдельности.

Хочется доступа к отдельным элементам записи (Record-a)

Добавлено:
Так заработало:

TListSite=class
private
FItem:TList;
FCount:Integer;
public
constructor Create;
function AddSite:Integer;
function Delete(ID:Integer):Boolean;
//function Items(ID:Integer):TapSite;
function Items(ID:Integer):TSite;
procedure Clear;
property Count:Integer read FCount;
end;

function TListSite.Items(ID: Integer): TSite;
begin
if (ID>0) and (ID<FItem.Count) then
Result:=TSite(FItem.Items[ID]);
end;

только использование класса выглядит так:
for loop := 0 to Count-1 do
begin
SitesList.AddSite;
SitesList.Items(loop).Info.Empty:=TRUE;
SitesList.Items(loop).Info.BuildingID:=-1;
end;
Автор: SIgor33
Дата сообщения: 22.07.2009 16:40
Такой вопрос. Кто нибудь делал конвертацию из word 2007 в richview. Если есть пример киньте

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768

Предыдущая тема: Clipper 5


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