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

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

Автор: dominiksus
Дата сообщения: 07.12.2007 16:06
кто знаком с регулярными выражениями?
следующ. код коверкает русский текст в html:


Цитата:
procedure TForm1.GotovoBtnClick(Sender: TObject);
var RegEx: TRegExpr;
begin
s2 := Web1.OleObject.Document.Body.innerHTML;
RegEx := TRegExpr.Create;
try
regex.Expression := '(<BODY>(.+?)</BODY>)';
regex.exec(s2);
showmessage(s2);
finally
regex.Free;
end;
end;


рисунок:



как сделать чтобы русский текст оставался русским?
наверно Unicode, только вот как использовать его с регулярками?

//Примечание.
Web1 : TwebBrowser;
s2: string;
Автор: Rudia
Дата сообщения: 07.12.2007 16:37
dominiksus
В делфи нет поддержки юникода, даже в последней версии - разработчики все только обещают.
Автор: delover
Дата сообщения: 07.12.2007 16:42
dominiksus
Тебе надо что-то типа в этом направлении думать -

Код:
regex.exec(w2);
setlength(s2,length(w2));
WideCharToMultiByte(CP_ACP, MB_PRECOMPOSED, PWideChar(w2), -1,
@s2[1], MAX_PATH);
Автор: Rudia
Дата сообщения: 07.12.2007 17:01

Цитата:
Ну и как тебе? Что нового? Generation появились? Я думаю что подожду заявлений тех кто уже ставил. После лицензионки, я действительно почуствовал, что такое легальный инструмент. И очень не охота ломатого.

Нам надо перевести проекты ещё с 4-й делфы, стоим фактически перед выбором - использовать проверенную 7-ю либо переходить на последнюю версию. Я склоняюсь к 2007, правда я её пока ей мало пользовался - много другой работы). 2006 я не пользовался - поэтому насчет отличий этих версий ничего сказать не могу, если верить обзорам - то они не сильно отличаются. Редактор можно было сделать и получше, у меня блокнот по функциям и то покруче будет, не нравится тормознутый ms-help, понравился отладчик - очень мощная вещь, явно показывает, к каким библиотекам обращается программа, можно отладить одновременно программу и динамическую библиотеку - если имеются исходники обеих)

Единственного не понимаю - разве нельзя сделать автоматическое выравнивание кода, как ms visual studio - очень полезная вещь, а то в делфи как дурак с табами и пробелами мудришь - в vs: ctrl+a,ctrl+k,ctrl+f - и никаких проблем). Может есть для дельфи примочка какая? Правда в vs нету такой полезной функции, как генерация кода для методов класса.

Насчет лицензии согласен - лучше купить и не мучаться) а то с таким количеством апдейтов можно помереть. Разрабы выпустили update3 и сказали, что это типа последний - у меня коллега по работе в этом update3 минут через 10 пользования нашел очень неприятный баг - пришлось искать заплатку)
Автор: delover
Дата сообщения: 07.12.2007 17:24
Rudia

Цитата:
Нам надо перевести проекты ещё с 4-й делфы, стоим фактически перед выбором

Проекты лучше в любом случае переносить последовательно. С D4 перелазить на D7, тут даже никаких вопросов быть не может. D7 поддерживает XP стили. По этому надо пройтись по всем окнам и поправить в D7. Думаю особых проблемм с переходом быть не должно, только если в случае с FASTNET переходом на Indy. Но если этот вопрос есть, могу скинуть отличный код для перехода на Indy.


Цитата:
Я склоняюсь к 2007, правда я её пока ей мало пользовался

В D2006 яки в D2007 думаю очень много сделано для дизайна и всяких Team. Но то что работает в D7 должно практически без помех работать на D2007 (опять же есть тонкости с Indy).


Цитата:
Единственного не понимаю - разве нельзя сделать автоматическое выравнивание кода

Видел на кодецентрал или на квелитицентрал пакеты design-time для этого. Но где - это надо искать. Мне в принципе хватает и без этого.


Цитата:
понравился отладчик - очень мощная вещь, явно показывает, к каким библиотекам обращается программа, можно отладить одновременно программу и динамическую библиотеку

Это появилось давно, ещё в D2005. Меня интересуют генерики. Это когда я описываю объект TList с разными элементами:


Код:
type
TList<_t> = class
Data: array of _t;
procedure Add(Item: _t);
function Extract(Item: _t): _t;
end;

type
TComponentList = TList<TComponent>;
TIntegerList = TList<Integer>;
...

var
x: TComponentList;
y: TIntegerList;
begin
x := TComponentList.Create;
x.Add(Form1);
...
y := TIntegerList.Create;
y.Add(1234);
...
end.
Автор: Rudia
Дата сообщения: 07.12.2007 20:13

Цитата:
Проекты лучше в любом случае переносить последовательно. С D4 перелазить на D7, тут даже никаких вопросов быть не может. D7 поддерживает XP стили. По этому надо пройтись по всем окнам и поправить в D7. Думаю особых проблемм с переходом быть не должно, только если в случае с FASTNET переходом на Indy. Но если этот вопрос есть, могу скинуть отличный код для перехода на Indy.

Насчет перехода: я уже запускал и на 7 и на 2007 для перехода с 7 на 2007 ничего менять фактически не надо. В проекте массово использовался rxlib - с ними проблем не возникло, есть версии под все делфи, из сетевых использовались лишь сокеты. Проблемы возникли лишь с интерпретатором - вещь, построенная на вариантах 4-й делфи, но разработчик его перенес на 7, ну и по мелочам пару компонентов. среди которых tsyntaxmemo, правда был с исходниками и с горем пополам скомпилился, пришлось немного ручками поудалять все связанное с designintf и со. В целом системка там нехилая 50 000+ строк кода + куча ДЛЛок, которые придется тоже перекомпилить - ибо там криво сделано, к качестве параметров функциям классы передаются.

Насчет генериков посмотрю, сказали бы проще - шаблоны(хотя как я понял вещь немного отличается), сразу бы понял ибо сейчас больше на С++ приходится работать)
Автор: oan42
Дата сообщения: 07.12.2007 21:32
Общие параметризованные типы (генерики) в Delphi:
http://www.delphilab.ru/content/view/129/54/

Не советую бросаться на амбразуру, рановато.
Автор: Arvur
Дата сообщения: 08.12.2007 12:33
delover

Цитата:
Меня интересуют генерики.

_http://andy.jgknet.de/dlang/
Оно?
Автор: AntonVA1
Дата сообщения: 09.12.2007 01:13

Цитата:
Единственного не понимаю - разве нельзя сделать автоматическое выравнивание кода, как ms visual studio - очень полезная вещь, а то в делфи как дурак с табами и пробелами мудришь - в vs: ctrl+a,ctrl+k,ctrl+f - и никаких проблем).

Может не правильно тебя понял, но так пробывал:
выделяешь,
ctrl+k затем i -сдвиг >
ctrl+k затем u -сдвиг <
это оно? я часто пользую
далее 2007- для мощной машины с большим озу- у меня centrino Pentium m 1,6/700mb/80gb. Результат: грузится долго>1мин, примочки в редактере кода тормозят, хелп-быстрее вспомнишь сам, чем дождешься загрузки ), машина надолго подвисает после закрытия проги, в процессе возврата в делфи (мотя м.б. проблема проги, хотел здесь спросить, да некогда).
По самим делфям: может проблемы в моей винде (не переставлял 1,5 года, работает вцелом нормально), но сразу после загрузки делфи, щелкаю на объект в редакторе форм- получаю последовательно три ошибка, уже привык, хелп весьма не полный, а апдейт только его весит 400 мегабайт!

Цитата:
Насчет лицензии согласен - лучше купить и не мучаться) а то с таким количеством апдейтов можно помереть. Разрабы выпустили update3 и сказали, что это типа последний - у меня коллега по работе в этом update3 минут через 10 пользования нашел очень неприятный баг - пришлось искать заплатку)

А чем тебе поможет в этом лицензия? Ведь ВСЕ так мучаются, я воспринимаю это как кидалово со стороны кодегира- загляни в соседнюю ветку в варезнике- народ исправлял баги ручками, в бинарных файлах, кодегир при этом спал, а доблестные пользователи ру-боарда получали патчи ) :ru-board:

Цитата:
Нам надо перевести проекты ещё с 4-й делфы, стоим фактически перед выбором - использовать проверенную 7-ю либо переходить на последнюю версию.

Я перешел с 6- без проблем, правда пришлось до того переписать все отчеты фастрепорта, из 2 в 4 версию- но это уже фаст жестко кинул всех.
Не исключено, (да, скорее всего) можно без проблем перейти и обратно- пока не использывались никакие фичи 2007 (в плане кода).
о новинках 2007 часто пишут здесь: http://www.delphilab.ru переводы статей кодегира- очень полезно.
Автор: dominiksus
Дата сообщения: 09.12.2007 10:57
как вставить неформатированный текст из буфера в TWebBrowser который переведен в режим редактирования?
как заменить событие вставки Ctrl+V в этом компоненте своим событием?
след. код. вставляет форматированный текст, а мне нужен простой (без тэгов и прочего)


Цитата:
function GetStringFromClipboard: WideString;
var Data: THandle;
begin
if not IsClipboardFormatAvailable(CF_UNICODETEXT) then
Result := Clipboard.AsText
else begin
Clipboard.Open;
Clipboard.SetAsHandle(CF_UNICODETEXT, Data);
try
if Data <> 0 then
Result := PWideChar(GlobalLock(Data))
else
Result := '';
finally
if Data <> 0 then
GlobalUnlock(Data);
Clipboard.Close;
end;
end;
end;


применение:

Цитата:

Range := (editor.selection.createRange as IHTMLTxtRange);
range.execCommand('Paste', false, GetStringFromClipboard);
Автор: anfilat
Дата сообщения: 10.12.2007 09:06
Rudia

Цитата:
В делфи нет поддержки юникода, даже в последней версии - разработчики все только обещают.

В дельфи таки есть поддержки юникода. Его нет только в интерфейсе, да и эта проблема вполне решаема с TntControls.
Автор: Rudia
Дата сообщения: 10.12.2007 15:03

Цитата:
Может не правильно тебя понял, но так пробывал:
выделяешь,
ctrl+k затем i -сдвиг >
ctrl+k затем u -сдвиг <
это оно? я часто пользую

Это не оно. В студии есть выравнивание всего кода (код при этом анализируется).
Пример:
было

Код:
int todecimalfromHex(const char * const hexString) {
int nums[10];
int numcnt = 0;
int num=0;
int i = 0;
for (i = 0; i<sizeof(hexString);i++) {
if ( (hexString[i]<=57 && hexString[i]>=48) || (toupper(hexString[i])<=70 && toupper(hexString[i])>=65) )
{
if (hexString[i]<=57 && hexString[i]>=48) {
nums[numcnt++] = hexString[i]-48;
}
if (toupper(hexString[i])<=70 && toupper(hexString[i])>=65) {
nums[numcnt++] = toupper(hexString[i])-55;
}
} else break;
}
int pow = 1;
for(i=numcnt-1;i>=0;i--)
{
num+=nums[i]*pow;
pow*=16;
}
return num;
}
Автор: delover
Дата сообщения: 10.12.2007 17:42
oan42
Arvur
Спасибо за сциллки - да оно. Блин, жаль, но генерики обещались появиться ещё в D2006. А по информации в D2008 будет только для дотнет, когда же доберутся до win32 - вообще непонятно. Но ждём горца.

oan42

Цитата:
Не советую бросаться на амбразуру, рановато.

Спасиб, только никто не бросается. Если через года три появится, то это не значит что я это начну применять через пять лет. Конечно я ориентировочно, но всё же ориентируюсь с запасом. Жаль что срок получается большим.

Arvur
Интересная сцилла. Порадовали очень for_in для классов-списков, я об этом думал, что можно реализовать классовыми операторами и публиковал в кодецентрале. Интересна реализация. А так же очень порадовали case_string. Это вообще давно пора сделать.
Автор: Widoms
Дата сообщения: 11.12.2007 06:44
Как мы знаем функция может возвращать только одно значение...
а если нужно что функция возвращала несколько значений ? Класс ?
Автор: DeadVillage
Дата сообщения: 11.12.2007 07:11
Widoms
... массивы в вашем языке передавать можно? Вот и пожалуйста.
... функции в вашем языке могут изменять значения передаваемых параметров? Вот и опять пожалуйста.
Автор: greenpc
Дата сообщения: 11.12.2007 08:01
Widoms
delphi
function Test(var OutStr : string): boolean;
Автор: ymg2000
Дата сообщения: 11.12.2007 08:27

Цитата:
Как мы знаем функция может возвращать только одно значение...
а если нужно что функция возвращала несколько значений ?

Ну, это как раз не проблема. Всегда можешь написать тип под себя.


Автор: skinash
Дата сообщения: 11.12.2007 08:28
Rudia

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

Есть такая штука от джедаев: Jedi Code Format, но там к ней надо ещё ставить JCL и JVCL (не всю, а пару пакетов). Регулярно её пользую.

Цитата:
В дельфи таки есть поддержки юникода.

Utf8ToAnsi(), AnsiToUtf8()
Автор: Rudia
Дата сообщения: 11.12.2007 12:42
skinash
Спасибо, то что надо, под неё кстати в 2006 и 2007 ничего ставить не надо - в комплекте идет откомпиленный .bpl - просто ставится и работает.
Автор: delover
Дата сообщения: 11.12.2007 15:55
skinash

Цитата:
Есть такая штука от джедаев

Спасибо, мощная вещь. Да и вообще джадаи молодцы. Настроил в общем не плохо, но есть некоторые неприятные моменты. Почему то объявления типизированных строк (string[n]) переносятся через строку:

Код: NameStr = string

[NameSize];
TNameStr = NameStr;...
Автор: Maks150988
Дата сообщения: 11.12.2007 18:46
Подскажите плиз как в ЛистВью добавить разделители. Какую LVM команду надо послать в контрол.
То есть если тупо объяснить, надо как в Винраре сделать. Там есть опция в установках для показа разделителей.
Ну кто понял, помогите плиз, а то чуть ли не все команды в элемент переслал...
Автор: Jokerjar79
Дата сообщения: 11.12.2007 19:41
Maks150988 это свойство GridLines, если я тебя правильно понял
Автор: Maks150988
Дата сообщения: 11.12.2007 20:45
Jokerjar79
Да не я ж на ВинАпи одном работаю. Тут чтобы добавить например строку, надо LVM_INSERTITEM команду. А вот как разделители сделать, не знаю...
Автор: Jokerjar79
Дата сообщения: 12.12.2007 05:35
Maks150988, а понятно. Вот, нашел в МСДНе:


Код: LVM_FIRST = $1000;
LVM_SETEXTENDEDLISTVIEWSTYLE = LVM_FIRST + 54;
LVS_EX_GRIDLINES = $00000001;

...

SendMessage(List, LVM_SETEXTENDEDLISTVIEWSTYLE, LVS_EX_GRIDLINES, LVS_EX_GRIDLINES);
Автор: Maks150988
Дата сообщения: 12.12.2007 15:24
Jokerjar79
Спасибо. Вчера кое-каr откопал в справке ВинАпи с дистрибутива Делфи тоже команду.

Код:
ListView_SetExtendedListViewStyle(GetDlgItem(hWin, List), LVS_EX_GRIDLINES);
Автор: MrGalaxy
Дата сообщения: 12.12.2007 18:33
Господа!
Хочу программно выключить компьютер. Функция ExitWindowSex требует для этого повышения привилегий.
Курил описание на AdjustTokenPrivileges и сопутствующие разделы через справку Delphi (Ctrl+F1).
Осталось непонятным, где находится существующий TokenHandle, как к нему получить доступ. Или этот параметр описывается переменной типа cardinal и в неё автоматически помещается вызванное значение? Но тогда получается, что, вроде, этот аргумент функции и не нужен для модификации. В общем, полная каша в голове.
Помогите разобраться!
Автор: BrdGuest
Дата сообщения: 12.12.2007 19:21
2 MrGalaxy
Вот здесь всё расписано, правда, для вижуал васика...
Автор: RomanTim
Дата сообщения: 13.12.2007 07:15
MrGalaxy
Код: program Shuddown;

uses
Windows;

var
hToken: THandle;
tkp: TTokenPrivileges;

begin
if OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken) then
if LookupPrivilegeValue(nil, 'SeShutdownPrivilege', tkp.Privileges[0].Luid) then begin
tkp.PrivilegeCount:=1;
tkp.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED;
if AdjustTokenPrivileges(hToken, False, tkp, 0, PTokenPrivileges(nil)^, PDWORD(nil)^) then
ExitWindowsEx(EWX_SHUTDOWN+EWX_FORCE, 0);
end;
end.
Автор: skinash
Дата сообщения: 13.12.2007 08:01
delover

Цитата:
Настроил в общем не плохо, но есть некоторые неприятные моменты.

А ты отошли им в багрепорт свои пожелания, глядишь, к следующей версии исправят. Там ребята оперативно работают...
Вопрос

Код: S := Format('%?d', [2]);
Автор: delover
Дата сообщения: 13.12.2007 16:58
skinash
А я что то разочаровался в идее. Дело в том что он форматит

Код: if BlaBla then exit
else continue;

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: 1С: Конвертация данных 2.0


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