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

» Вопросы по Delphi (версии 2009, 2010 Weaver, 2011 Fulcrum)

Автор: Andryshok
Дата сообщения: 24.06.2011 06:40
volax Как то в ранних версиях этого не было, даже в 2010, да и если путь указывать к дцушкам, тогда при выделении метода и нажатии Ctrl + лефт маус я не перейду сразу к методу исходника и не посмотрю как он работает, что не есть удобно и хорошо...., неужели только в этом дело ?
Автор: TeXpert
Дата сообщения: 24.06.2011 10:05
Господа, объясните, могу ли (и как, если да) я воспользоваться в Delphi XE (RAD Studio XE Enterprise) вкусностями .NET (Windows Forms и так далее). Рылся, но пока не обнаружил нмчего подобного, а ведь поддержка .NET заявлена (и .NET Framework требуется при установке). Очень странно, что не могу даже язык C# свободно, без извращений (без преобразования) использовать

Спасибо
Автор: Frodo_Torbins
Дата сообщения: 24.06.2011 10:40
Andryshok
Чтобы исходники открывались, нужно их в Browsing path прописать.

TeXpert
Для .Net теперь отдельный продукт - Delphi Prizm. Он входит в состав полной студии но ставится отдельно. Из делфи вы .Net можете дергать только в виде Com-обьектов.
Автор: TeXpert
Дата сообщения: 24.06.2011 10:54
Frodo_Torbins
Цитата:
Для .Net теперь отдельный продукт - Delphi Prizm
Про это я понял. Только вот недоумеваю, почему этот самый Delphi Prism XE, взаимствуя Visual Studio 2010 IDE, не может просто пользовать язык C# (который отдан, между прочим, международному сообществу в виде стандарта), а непременно переводит код на этом языке на свой птичий язык? Чем это вызвано? Может, я чего-то недопонимаю?

Второй вопрос: возможно ли в этом самом Delphi Prism XE совместно пользовать библиотеки .NET и, скажем, VCL?
Автор: Andryshok
Дата сообщения: 24.06.2011 19:09
TeXpert Не путайте парадигму, VCL и сборки Net - это разные вещи, вот вам мой совет - если уж хотите перейтина Net - то самое лучшее что для этого есть - это C# . и никакая не Призма, хотите писать на дельфи - пишите на обычной дельфи , хотитете писать под дотнет - не поленитесь изучить концепцию и C# - говорю вам это окупиться однозначно.
Автор: TeXpert
Дата сообщения: 24.06.2011 19:46
Andryshok
Цитата:
Не путайте парадигму, VCL и сборки Net - это разные вещи, вот вам мой совет - если уж хотите перейтина Net - то самое лучшее что для этого есть - это C# . и никакая не Призма, хотите писать на дельфи - пишите на обычной дельфи , хотитете писать под дотнет - не поленитесь изучить концепцию и C# - говорю вам это окупиться однозначно
Улыбнуло)
Я-то как раз ничего не путаю, и пишу давно на C#. Просто фирма, где я сейчас подрабатываю, всю жизнь имела дело с Delphi и мне приходится убеждать руководство фирмы перейти на C#. Но проблема в том, что не так-то просто перевести массу кода на C# (так же трудно сотрудников переобучить). Усекаешь, в чем дело? Я наивно полагал, что через Delphi.NET удастся перекинуть мостик от VCL к VCL.NET, а там используй хоть какие языки (постепенно переходя на C#). Но оказалось --- в RAD Studio XE Enterprise попросту нет Delphi.NET, просто выкинули, типа стимулируя переход на .NET напрямую. Поэтому я и пытался понять логику этого самого Быдлокодеро Embarcadero, а ты мне стал почему-то мораль читать. И, кстати, ничего необычного нет в смешивании управляемого и неуправляемого кода, .NET это вполне допускает, хотя это не есть вполне кошерно. Я хотел понять, чем вызвано исключение языка C# из Delphi Prism XE, потому что это есть идиотизм
Цитата:
...если уж хотите перейтина Net - то самое лучшее что для этого есть - это C# . и никакая не Призма
Я ведь выше писал, что фирма купила лицензию на RAD Studio XE Enterprise, так что не стоит умничать
Автор: phi1
Дата сообщения: 24.06.2011 19:52
Доброго времени суток. )
Мучительно перевожу проект c D2010-WinXP-32bit на D2010-Win7-64bit.
Возникла чудесная ситуация, TOpenPictureDialog, посаженный на обычную кнопку, перестал появляться. Метод Execute возвращает false. В чистом тестовом проекте диалог открывается нормально.
Возможно, кто-то сталкивался с подобным чудом...
Автор: Frodo_Torbins
Дата сообщения: 24.06.2011 19:57
TeXpert
Для C# есть визуал студия. Кодегеровцы во времена BDS2006 пытались выпускать для него свою иде и VCL.NET, но очень быстро убедились, что это никому не нужно. Призмой же пользуются те, кто ценит именно ее паскалеподобный язык.
Что касается перетаскивания проектов на C# то тут вы малость опоздали. По последним сведениям софт для Win8 будет писаться на HTML5+JavaScript. Да и вообще я бы не рекомендовал уходить с делфи.

phi1
Эти диалоги могут сбоить от какого то стороннего расширения проводника. Проверьте их работу на чистой машине.
Автор: V1s1ter
Дата сообщения: 24.06.2011 20:20
phi1

Цитата:
Мучительно перевожу проект c D2010-WinXP-32bit на D2010-Win7-64bit.

Если то что предлагал Frodo_Torbins помогло можно дальше не читать.
Если проект написан корректно, то нет необходимости переводить "c D2010-WinXP-32bit на D2010-Win7-64bit", тем более мучительно. Все должно заработать сразу. Естественно если речь не идет о "системных штучках". Я допускаю оплошность и в стандартных кодах, но мне кажется Вы просто изменили конфигурацию распределения памяти в своей программе и ранее где память рушилась на не критичном коде теперь рушится на критичном. Это я к тому, что не вводите себя в заблуждение проблема не в переходе "c D2010-WinXP-32bit на D2010-Win7-64bit", проблема в том, что повылазили ранее допущенные ошибки. Вот их и ищите. Коментарить здесь не обязательно, а вот посмотреть какая операция рушит память в месте вызова TOpenPictureDialog или рушит сам код TOpenPictureDialog.
Автор: TeXpert
Дата сообщения: 24.06.2011 20:52
Frodo_Torbins
Цитата:
Да и вообще я бы не рекомендовал уходить с делфи
Т. е., иметь дело с трупом? Ну-ну
Цитата:
Что касается перетаскивания проектов на C# то тут вы малость опоздали. По последним сведениям софт для Win8 будет писаться на HTML5+JavaScript
Это, как говорится, реклама. Microsoft и прежде много выдавал подобных обещаний, или ты недавно на этом фронте?)
Автор: V1s1ter
Дата сообщения: 24.06.2011 22:37
TeXpert

Цитата:
Т. е., иметь дело с трупом? Ну-ну

Не надо розжигать здесь религиозные войны.
И без привязки к языкам - предлагать компании разработавшей, как Вы сами говорили большое количество кода на одном языке и купившей полный пакет компилятора для того язика использовать другой язык только потому, что Вам так удобней по крайней мере эгоистично и ВОЗМОЖНО экономически не оправдано. Не нужно этим хвастатся это не делает Вам чести.
Автор: ShIvADeSt
Дата сообщения: 24.06.2011 22:49
V1s1ter
TeXpert
Подобные посты давайте в
http://forum.ru-board.com/topic.cgi?forum=33&topic=9888#1
сам с удовольствием почитаю. В этом же топике все таки программирование.
Автор: Frodo_Torbins
Дата сообщения: 24.06.2011 23:11
TeXpert
У микрософта почти с каждой новой операционкой идет в комплекте "новая и революционная" технология программирования. Если идти у них на поводу, и использовать только новое-рекомендуемое, то C# от могилы всего на пол шага дальше чем делфи. Если же нет, то не вижу причин не использовать делфи. Он развивается, вполне соответствует требованиям дня сегодняшнего, и иногда успевает предложить своим пользователям то, чего ни у кого другого еще нет (как было с поддержкой тача).

ShIvADeSt
Сорри, поздно заметил ваш пост.
Автор: TeXpert
Дата сообщения: 26.06.2011 13:27
Господа, да никакой войны не было, у меня лишь попытка понять (в том числе и логику тех или иных решений Embarcadero, вот никто толком этого и не объяснил) что к чему. Согласитесь, трудно шок не испытывать, когда узнаешь, что на реализацию Unicode ушло почти 10 лет!

Вот и очередное удивление (мягко еще сказано): вдруг вспомнилось, что я нигде в рекламе не заметил про 64-разрядность (уж бы про это они раструбили на каждом шагу!), полез в Гугель, и, оказалось, что эта супер-пупер студия не может генерить 64-разрядный код(. Шеф не поверил, сказав, что его заверили, что с 64-разрядами "нет никаких проблем" (наверное, имели в виду такое "достижение", что студия ставится на 64-разрядные ОС). Так что, господа, мое вполне естественное удивление и недоумение не надо воспринимать как попытку разжигать holywar

P. S. Руководство фирмы согласилось с тем, что новые разработки следует вести на .NET
Автор: Frodo_Torbins
Дата сообщения: 26.06.2011 16:20
TeXpert
Согласен, на заигрывания с дотнетом было потрачено слишком много времени. Теперь приходится наверстывать упущенное. И пока не наверстают, делфи нельзя будет назвать супер передовым, "hot", "sexy" и т. д. Пока что делфи просто хороший язык со своими преимуществами и недостатками.
Но с другой стороны никто ведь не приковывает цепями людей к Delphi 5 или 7, но народу, сидящего на этих версиях, до сих пор полно. - "Потому что работает."
Автор: JAPWork
Дата сообщения: 26.06.2011 17:13
TeXpert

Цитата:
Вот и очередное удивление (мягко еще сказано)

Интересно, а Вы долго еще тут со своими "удивлениями" появляться думаете? Вы все свои псевдооткрытия сюда постить думаете??? Может Вам лучше куда-нибудь во "Флейм" податься? Здесь, как правило, задаются конкретные вопросы и ищутся конкретные ответы.
Автор: XOBAH
Дата сообщения: 26.06.2011 18:51
Здравствуйте, подскажите пожалуйста насчет XML файлов (ну или где можно подробно прочитать по компоненту XMLDocument)
Мне нужно считывать и записывать данные в XML ([more=Структура]<?xml version="1.0" encoding="UTF-8" ?>
<Disk>
    <Links>
        <StartLink>
            <MenuItemID>2</MenuItemID>
            <Image>0</Image>
            <Caption>Тестовый файл</Caption>
        </StartLink>
    </Links>
    <MenuItems>
        <MenuItem ID="2" Parent="1" MenuImage="0">
            <Shablon>clip</Shablon>
            <Content Type="file">
                <File>
                    <Path>\test\test.txt</Path>
                    <MainImage>0</MainImage>
                    <Details>
                        <Detail>
                            <Key>Name</Key>
                            <Value>TEST FILE</Value>
                        </Detail>
                        <Detail>
                            <Key>Description</Key>
                            <Value>Тестовый файл</Value>
                        </Detail>
                    </Details>
                    <ImageList>
                        <Image>0</Image>
                    </ImageList>
                    <RtfID>-1</RtfID>
                </File>
            </Content>
        </MenuItem>
    </MenuItems>
    <Images>
        <image>
            <ID>0</ID>
            <Path>\images\1.jpg</Path>
        </Image>
    </images>
    <texts>
        <text>
            <ID>0</ID>
            <Path>\texts\test.rtf</Path>
        </text>
    </text>
</Disk>[/more]), меня особо интересует связь между идентификаторами из различных нод (images\texts\menuitems\links), а также разбор параметров тега (<MenuItem ID="2" Parent="1" MenuImage="0">)
Автор: volod3000
Дата сообщения: 27.06.2011 00:58
XOBAH

Ссылка

и конечно тут

Ссылка
Автор: YuriyRR
Дата сообщения: 27.06.2011 05:10
TeXpert

Цитата:
оказалось, что эта супер-пупер студия не может генерить 64-разрядный код

Да уже тестируют вовсю. http://www.embarcadero.com/products/delphi/64-bit
Автор: XOBAH
Дата сообщения: 27.06.2011 11:14
volod3000
Запросы лучше делать вида: Delphi + XML, но все равно спасибо

Вот хорошая статья. Для Delphi XE надо импортировать библиотеку так: Component -> Import Component и дальше по вытекающей
Автор: spasius
Дата сообщения: 28.06.2011 06:53
YuriyRR
не только тестируют ) но и умудряются писать под 64-бит!
новый релиз студии действительно впечатляет.
Автор: Frodo_Torbins
Дата сообщения: 28.06.2011 14:16
spasius
Пощупать бы его своими руками
Автор: mcka
Дата сообщения: 28.06.2011 14:52
YuriyRR, spasius и др. Кто-нибудь видел? или это миф?

Добавлено:
Кто подскажет:
почему иногда менеджер памяти (fastmm4 или встроенный) не может определить класс? выдает:
---------------------------
Unexpected Memory Leak
---------------------------
13 - 20 bytes: Unknown x 1

из-за этого много времени потратил, пока нашел, а оказался обычный класс TPageFormat = class.

и еще, в другом проекте наблюдал такое:
---------------------------
Unexpected Memory Leak
--------------------------
37 - 44 bytes: UnicodeString x 60
45 - 52 bytes: UnicodeString x 24
53 - 60 bytes: UnicodeString x 18
61 - 68 bytes: UnicodeString x 12
69 - 76 bytes: UnicodeString x 6
77 - 84 bytes: UnicodeString x 6
93 - 100 bytes: UnicodeString x 6
125 - 132 bytes: UnicodeString x 6
149 - 156 bytes: UnicodeString x 6

т.е. одни String'и и никаких классов , оказалась, что это строки в record'ах.
[more="Memory Leak"] PLabelElement = ^TLabelElement;
TLabelElement = record
Title: String; // <- вот они
Alignment: TAlignment;
x_pos: Integer;
y_pos: Integer;
end;

PTagElement = ^TTagElement;
TTagElement = record
Title: String; // <- вот они
Alignment: TAlignment;
Quarter: Integer;
x_pos: Integer;
y_pos: Integer;
end;

TTextArea = class(TObject)
private
FTagElements: TList;
FLabelElements: TList;
// ...
end;
// ...


procedure TTextArea.Clear;
var
i: Integer;
begin
for i := 0 to FTagElements.Count-1 do
begin
SetLength(PTagElement(FTagElements.Items[ i ]).Title, 0); // Добавил эту строчку
Dispose(FTagElements.Items[ i ]);
end;
FTagElements.Clear;

for i := 0 to FLabelElements.Count-1 do
begin
SetLength(PLabelElement(FLabelElements.Items[ i ]).Title, 0); // добавил и эту. воля - и никаких String'ов в Memory Leak
Dispose(FLabelElements.Items[ i ]);
end;
FLabelElements.Clear;
end;

procedure TTextArea.Assign(Source: TTextArea);
var
i: Integer;
pTag: PTagElement;
pLabel: PLabelElement;
begin
Clear;

for i := 0 to Source.TagElementsCount-1 do
begin
New(pTag);
with Source.TagElements[ i ] do
try
pTag^.Quarter := Quarter;
pTag^.Title := Title;
pTag^.Alignment := Alignment;
pTag^.x_pos := x_pos;
pTag^.y_pos := y_pos;
finally
FTagElements.Add(pTag);
end;
end;

for i := 0 to Source.LabelElementsCount-1 do
begin
New(pLabel);
with Source.LabelElements[ i ] do
try
pLabel^.Title := Title;
pLabel^.Alignment := Alignment;
pLabel^.x_pos := x_pos;
pLabel^.y_pos := y_pos;
finally
FLabelElements.Add(pLabel);
end;
end;
end;

[/more]

P.S. String'и -
Автор: JAPWork
Дата сообщения: 28.06.2011 17:14
mcka
Так вроде бы все - как просили. Новый PTag и PLabel - создаются фактически с указателем на Title. Соответственно при Dispose всей записи - сколько ему освобождать?
Ну если для чистоты - попробуйте одним из элементов записи сделать указатель. И потом, после получения записи в этот указатель разместите переменную, получаемую по New. А потом сделайте Dispose на запись. И получите аналогичную утечку. Потому как Dispose не в курсах, что Вы пихнули во внутренний указатель.
А ваши вставленные строчки как раз проблему и решают. Объем "посторонней" памяти Вы старательно зануляете, после этого и Dispose свою часть работы выполняет безупречно.
Как-то мне примерно так все это видится...
Автор: mcka
Дата сообщения: 29.06.2011 09:15
> в этот указатель разместите переменную, получаемую по New.
JAPWork, если было бы так, то я не спрашивал, а здесь string.
И почему на пустом проекте, утечки нет, хотя все аналогично?
[more="Пример"]
Код: type
PLabelElement = ^TLabelElement;
TLabelElement = record
Title: String; // <- вот они
Alignment: TAlignment;
x_pos: Integer;
y_pos: Integer;
end;

TForm5 = class(TForm)
procedure FormDestroy(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
LabelElement : PLabelElement;
public
{ Public declarations }
end;

var
Form5: TForm5;

implementation

{$R *.dfm}

procedure TForm5.FormCreate(Sender: TObject);
begin
New(LabelElement);
LabelElement^.Title := 'asdfasdf';
LabelElement^.Alignment := taLeftJustify;
LabelElement^.x_pos := 0;
LabelElement^.y_pos := 1;
end;

procedure TForm5.FormDestroy(Sender: TObject);
begin
if LabelElement <> nil then
Dispose(LabelElement);
end;
Автор: JAPWork
Дата сообщения: 29.06.2011 11:10
mcka
Так string - это и есть указатель. Разве что детали работы с ним несколько спрятаны. А по сути - именно так.
Вот если Вы будете в рекорде использовать короткую строку, например - string[50], то проблем с утечками у Вас вовсе не будет. Потому что менеджер памяти будет обладать всей информацией, необходимой для корректной работы.
Что касается пустого проекта - при его завершении освобождается вся память. Чохом...
Опять же, при освобождении формы - счетчики ссылок уменьшаются, память освобождается.
Почитайте, например, вот эту статью

Добавлено...
Разница в ваших двух примерах в том, что в первом случае Вы освобождаете память через обезличенный указатель, напрямую через Dispose(FList[I]). Попробуйте вначале переменной типа PLabelElement (например - PLE) присвоить эту FList[I]. А уже потом вызвать Dispose(PLE). Утечки исчезнут. Именно из-за того, что в этом случае менеджер памяти будет осведомлен о наличии в записи строки, с которой ему нужно разбираться особо. А иначе - он тупо освобождает только указатель на строку, без освобождения содержимого строки.
Кстати, может отсюда и "Unknown x 1" лезет?
Автор: mcka
Дата сообщения: 30.06.2011 08:53
JAPWork, Изменил:
Код: procedure TTextArea.Clear;
var
i: Integer;
begin
for i := 0 to FTagElements.Count-1 do
Dispose(PTagElement(FTagElements.Items[ i ]));
FTagElements.Clear;

for i := 0 to FLabelElements.Count-1 do
Dispose(PLabelElement(FLabelElements.Items[ i ]));
FLabelElements.Clear;
end;
Автор: tanaseduard
Дата сообщения: 05.07.2011 17:23
Есть проблемка.
Создал компонент от TcxGroupBox. Переопределил Create так как внутри него создаю Parented форму.
Проблема в том что когда я пытаюсь этот компонент положить на любой контейнер на форме(GroupBox, ScrollBox etc..) он создается не в контейнере а на форме (форма является владельцем), потом конечно его можно переместить на контейнер но интересует причина почему при создании он не создается в контейнере на котором указываешь мышкой.
Код конструктора.

Код:
TxePdCustomGroupBox=Class(TcxGroupBox)
Constructor Create(AOwner:TComponent); Override;
{============================================}
Constructor TxePdCustomGroupBox.Create(AOwner:TComponent);
Begin
Inherited;
Parent:=TWinControl(AOwner);
FCustomForm:=TfmCustomMessengers.CreateParented(Self.Handle);
FCustomForm.ManualDock(TWinControl(Self));
FCustomForm.Align:=alclient;
FCustomForm.Enabled:=Not(csDesigning In Owner.ComponentState);
FCustomForm.Show;
End;
Автор: plyasunov
Дата сообщения: 06.07.2011 20:58

Код: Constructor TxePdCustomGroupBox.Create(AOwner:TComponent);
Begin
Inherited;
FCustomForm:=TfmCustomMessengers.Create(nil);
FCustomForm.Parent := Self;
FCustomForm.Align:=alclient;
FCustomForm.Enabled:=Not(csDesigning In Owner.ComponentState);
FCustomForm.Show;
End;
Автор: Samotek
Дата сообщения: 07.07.2011 09:07
tanaseduard
вот так у меня работает
constructor T_fmSPForm.CreateDocking(AOwner: TComponent; Host: TWinControl; AlignOnHost: TAlign = alClient);
begin
Create(AOwner);
self.ManualDock(Host);
Align := AlignOnHost;
end;

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172

Предыдущая тема: Установка копоненты ZipTV


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