Результаты поиска
Может ли Windows dll получить свое собственное имя файла?
Файл Windows exe имеет доступ к командной строке, которая его вызвала, включая путь и имя файла. напр.. C:\MyApp\MyApp.exe --help .
Но это не так для dll, вызванного через LoadLibrary . Кто-нибудь знает способ для dll узнать, каков его путь и имя файла?
В частности, меня интересует решение Delphi, но я подозреваю, что ответ будет практически одинаковым для любого языка.
Delphi ресурсы для существующих .NET разработчик
Может кто-нибудь посоветовать приличные ресурсы .NET разработчик, который хочет получить обзор высокого уровня языка Delphi?
Мы собираемся приобрести малый бизнес, основной продукт которого разрабатывается в Delphi, и я хочу накопить достаточно знаний, чтобы иметь возможность говорить с ними.
Книги, веб-сайты и т.д. все оценили.
Спасибо.
Delphi ресурсы для существующих .NET разработчик
Может кто-нибудь посоветовать приличные ресурсы .NET разработчик, который хочет получить обзор высокого уровня языка Delphi?
Мы собираемся приобрести малый бизнес, основной продукт которого разрабатывается в Delphi, и я хочу накопить достаточно знаний, чтобы иметь возможность говорить с ними.
Книги, веб-сайты и т.д. все оценили.
Спасибо.
Существуют ли какие-либо компоненты "mind mapping" для Delphi? (родной VCL предпочтительно)
Я ищу предварительно написанный компонент (w/source) для проекта Delphi, над которым я работаю, чтобы создать ментальные карты / концептуальные карты, подобные этим:
http://en.wikipedia.org/wiki/Image:MindMeister_screenshot_OS_X.jpg http://en.wikipedia.org/wiki/Image:XMIND_2008_in_Windows_Vista.png
Есть какие-нибудь идеи?
Что является лучшим способом, чтобы сделать приложение Delphi полностью весь экран?
Как лучше всего сделать приложение delphi (delphi 2007 для win32 здесь) полностью полноэкранным, удалив границу приложения и закрыв панель задач windows ?
Я ищу что-то похожее на то, что делает IE, когда вы нажимаете F11.
Я хочу, чтобы это был вариант времени выполнения для пользователя, а не решение о времени разработки моим хорошим Я.
Как уже говорилось в принятом ответе
BorderStyle := bsNone;
это было частью способа сделать это. Странно, но я продолжал получать ошибку E2010 Incompatible types: 'TFormBorderStyle' and 'TBackGroundSymbol' при использовании этой строки (другой тип был определен bsNone ).
Чтобы преодолеть это я должен был использовать :
BorderStyle := Forms.bsNone;
Изменение каталога CURRENT save/default в Delphi 2007 без использования функции Save-As
У меня есть проектная группа, которая содержит проект, над которым я работаю, а также некоторые связанные компоненты и пакеты. Я предпочитаю сохранять ссылки на базы данных активными во время разработки.
Я знаю, как написать код, который изменил бы расположение файла базы данных, но в этом случае я просто использую ".\data" вместо этого по различным причинам времени разработки. К сожалению, использование относительной папки означает, что Delphi должен быть "pointing" в той же папке, в которой находится проект.
Я хотел бы иметь возможность принудительно перенести расположение папки в другой корень, не используя функцию "Save As". Кто-нибудь случайно не знает, где Delphi IDE получает эту информацию?
Delphi и COM: TLB и вопросы технического обслуживания
В компании, где я работаю, мы разрабатываем все GUI в C#,, но приложение kernel в основном разработано в Delphi 5 (по историческим причинам), с большим количеством компонентов, сделанных в COM+. В связи с этим очень специфическим видом применения a I два вопроса:
Опытные ребята в Delphi и / или COM, есть ли у вас какие-либо обходные пути для работы с багги TLB интерфейсом ? Некоторые из ошибок: IDE сбой во время выпуска большого TLB, потеря методов IDs, TLB повреждение и т.д. Здесь мы не нашли никакого хорошего решения. На самом деле мы пытались сделать обновление до новой версии 2007 года. Но новый интерфейс IDE TLB имеет те же ошибки, которые мы нашли раньше.
Как вы управляете версиями TLBs ? Файл TLB находится в двоичном формате, и разрешение конфликтов очень трудно сделать. Мы попытались сделать это, экспортируя описания интерфейсов в IDL и фиксируя в CVS, но мы не нашли никакого хорошего способа генерировать TLBs из IDL, используя Delphi. Кроме того, инструмент MIDL, предоставленный Microsoft, неправильно проанализировал файлы IDL, которые мы экспортировали из delphi.
Как отслеживать ссылки на объект?
В мире, где ручное распределение памяти и указатели все еще правят (Borland Delphi), мне нужно общее решение для того, что я думаю, является общей проблемой:
В данный момент на объект можно ссылаться из нескольких мест (списки, другие объекты, ...). Есть ли хороший способ отслеживать все эти ссылки, чтобы я мог обновить их, когда объект будет уничтожен?
Модульное тестирование в Delphi - как вы это делаете?
Мне интересно, как несколько пользователей Delphi здесь делают модульное тестирование, если таковые имеются? Есть ли что-нибудь, что интегрируется с IDE, что вы нашли хорошо работает? Если нет, то какие инструменты вы используете и есть ли у вас или знаете примеры мини-проектов, которые демонстрируют, как все это работает?
Обновление:
Я забыл упомянуть, что использую BDS 2006 Pro, хотя иногда я заглядываю в Delphi 7, и, конечно, другие могут использовать другие версии.
Как отслеживать ссылки на объект?
В мире, где ручное распределение памяти и указатели все еще правят (Borland Delphi), мне нужно общее решение для того, что я думаю, является общей проблемой:
В данный момент на объект можно ссылаться из нескольких мест (списки, другие объекты, ...). Есть ли хороший способ отслеживать все эти ссылки, чтобы я мог обновить их, когда объект будет уничтожен?
Несколько форм Delphi приложений и диалоговых окон
У меня есть приложение Delphi 7, которое имеет два вида документа (например, редактирование WYSIWYG HTML может иметь вид WYSIWYG и исходный вид-не мое реальное приложение). Они могут быть открыты в отдельном windows или закреплены на вкладках в главном окне.
Если я открываю модальный диалог из одной из отдельных форм, основная форма выводится на передний план и отображается как выбранное окно на панели задач windows. Предположим, что основная форма-это представление WYSIWYG,а исходное представление выводится наружу. Вы переходите к определенной точке в исходном виде и вставляете тег изображения. Появится диалоговое окно, позволяющее выбрать и ввести нужные свойства изображения. Если вид WYSIWYG и исходный вид перекрываются, то вид WYSIWYG будет выведен на передний план, а исходный вид будет скрыт. Как только диалоговое окно будет закрыто, исходный вид снова появится в поле зрения.
Я попытался установить владельца и свойства ParentWindow в форму, с которой он связан:
dialog := TDialogForm.Create( parentForm );
dialog.ParentWindow := parentForm.Handle;
Как я могу исправить эту проблему? А что еще я должен попробовать?
Учитывая, что люди, похоже, спотыкаются на моем примере, возможно, я могу попробовать с лучшим примером: текстовый редактор, который позволяет вам иметь несколько открытых файлов одновременно. Файлы, которые вы открыли, находятся либо во вкладках (например, в Delphi IDE), либо в собственном окне. Предположим, что пользователь открывает диалоговое окно проверки орфографии или диалог поиска. Что происходит, так это то, что если файл редактируется в своем собственном окне, то это окно отправляется ниже основной формы в z-порядке при отображении модального диалога; как только диалоговое окно закрывается, оно возвращается к своему исходному z-порядку.
Примечание: Если вы используете Delphi 7 и ищете решение этой проблемы, смотрите мой ответ ниже на странице, чтобы увидеть, что я в итоге сделал.
Спецификация агрегатов TClientDataSet не добавляется автоматически при создании поля агрегата
Мне нужно создать агрегатное поле в TClientDataSet, но, как сказано в документах:
Выберите OK. Вновь определенный агрегат поле автоматически добавляется в поле клиентский набор данных и его агрегаты свойство автоматически обновляется до включите соответствующий агрегат спецификация.
Когда я добавляю новое поле aggregate, спецификация aggregate не добавляется к агрегатам TClientDataSet, поэтому я не могу использовать его OnUpdateMethod.
Я также попытался обработать событие OnChange моего нового агрегатного поля, но оно вообще не запускается.
Я делаю что-то не так? Я просто хочу иметь агрегированное поле и запускать событие, все это изменение значения.
Это сломано на delphi? Потому что то, что есть в документации, не отражает фактического поведения.
правка: @Michal Sznajder Я использую Delphi 2007
Как программно нажать checkbox внутри SysListView32 в чужом приложении?
Есть чужое приложение, одно из окон которого выглядит так:

Мне нужно программно снять галочку с checkbox'ов внутри этого списка.
Handle окна и handle списка уже получил, а что делать дальше? Как добраться до этих checkbox'ов?
Программа пишется на Delphi.
// ищем окно с заголовком "Select Tools"<br/>
SelectToolsHandle:=GetWindowHandle('Select Tools');<br/>
if (SelectToolsHandle <> 0) then begin<br/>
// ищем список<br/>
SysListHandle:=FindWindowEx(SelectToolsHandle, 0, 'SysListView32', nil);<br/>
if (SysListHandle <> 0) then begin<br/>
showmessage(IntToStr(SysListHandle)); // handle списка получен<br/>
// Что же дальше делать?(<br/>
end;<br/>
end;<br/>
// ищем окно с заголовком "Select Tools"<br/>
SelectToolsHandle:=GetWindowHandle('Select Tools');<br/>
if (SelectToolsHandle <> 0) then begin<br/>
// ищем список<br/>
SysListHandle:=FindWindowEx(SelectToolsHandle, 0, 'SysListView32', nil);<br/>
if (SysListHandle <> 0) then begin<br/>
showmessage(IntToStr(SysListHandle)); // handle списка получен<br/>
// Что же дальше делать?(<br/>
end;<br/>
end;<br/>
ООП Delphi 7
Может вопрос будет и тупой и у многих возникнет желание понизить мне карму и рейтинг, но тем не менее я его задам. Нужна литература, где кратко и в тоже время ПОНЯТНЫМ языком описано объекто-ориентированное программирование в Delphi. Можно даже на английском языке, лишь бы было понятно. Спасибо за понимание
Delphi (Lazarus) — динамические объекты, и их события?
Доброго время суток, гуру Delphi и не только. Случай вот такой:
Описана процедура
procedure tform1.onbclick(Sender: TObject);
Создаю в процессе выполнения программы кучку Button'ов в массив, и назначаю им эту процедуру как событие OnClick
ArBut[i].OnClick=@onbclick;
Все работает, кроме параметра Sender. Как нужно его правильно указывать при таком случае? Или как можно это обойти?
upd:
Все работает. Перепутал в procedure onbclick параметры name и caption. а ведь именно name при динамическом создании я не указывал, поэтому его запрос был пустой и я думал что ничего не работает.
Не могу вернуть строку из COM (Delphi)?
Есть задание написать COM сервер, на выходе у него должна быть строка.
Вот так выглядит интерфейс в _TLB.pas файле
// *********************************************************************//<br/>
// Interface: ITMyCOM<br/>
// Flags: (256) OleAutomation<br/>
// GUID: {D94769D0-F4AF-41E9-9111-4D8BC2F42D69}<br/>
// *********************************************************************//<br/>
ITMyCOM = interface(IUnknown)<br/>
['{D94769D0-F4AF-41E9-9111-4D8BC2F42D69}']<br/>
function MyDrawWS(a: Integer; b: Integer): WideString; stdcall;<br/>
end;<br/>
Вот так вот он выглядит в ОСи Windows
[<br/>
odl,<br/>
uuid(D94769D0-F4AF-41E9-9111-4D8BC2F42D69),<br/>
version(1.0),<br/>
helpstring("Interface for TMyCOM Object"),<br/>
oleautomation<br/>
]<br/>
interface ITMyCOM : IUnknown {<br/>
BSTR _stdcall MyDrawWS(<br/>
[in] long a, <br/>
[in] long b);<br/>
};<br/>
т.е. WideString и есть BSTR, как по идее и должно быть.
Сама функция в COM сервере имеют следующий вид
function TTMyCOM.MyDrawWS(a, b: Integer): WideString;<br/>
begin<br/>
Result := WideString(IntToStr(a+b));<br/>
end;<br/>
Вызываю её следующим образом
Edit1.Text := String(MyCOM.MyDrawWS(1,1));<br/>
и получаю ошибку вида First chance exception at $75A9FBAE. Exception class EAccessViolation with message 'Access violation at address 75A409A4 in module 'RPCRT4.dll'. Read of address FFFFFFF8'. Process Project1.exe (2296)
Возврат чисел работает нормально. Пробовал уже по разному переводить из типа в тип, но ничего не получается.
// *********************************************************************//<br/>
// Interface: ITMyCOM<br/>
// Flags: (256) OleAutomation<br/>
// GUID: {D94769D0-F4AF-41E9-9111-4D8BC2F42D69}<br/>
// *********************************************************************//<br/>
ITMyCOM = interface(IUnknown)<br/>
['{D94769D0-F4AF-41E9-9111-4D8BC2F42D69}']<br/>
function MyDrawWS(a: Integer; b: Integer): WideString; stdcall;<br/>
end;<br/>[<br/>
odl,<br/>
uuid(D94769D0-F4AF-41E9-9111-4D8BC2F42D69),<br/>
version(1.0),<br/>
helpstring("Interface for TMyCOM Object"),<br/>
oleautomation<br/>
]<br/>
interface ITMyCOM : IUnknown {<br/>
BSTR _stdcall MyDrawWS(<br/>
[in] long a, <br/>
[in] long b);<br/>
};<br/>function TTMyCOM.MyDrawWS(a, b: Integer): WideString;<br/>
begin<br/>
Result := WideString(IntToStr(a+b));<br/>
end;<br/>