I hope you haven’t lost your work.
Simplified, Delphi works like this:
PAS+DFM => DCU
DCU+RES => EXE
More about Delphi files at the end of this answer.
You can compile the project if you only have the DCU file. First, remove the PAS file from your folder else Delphi will try to recompile it (and in order to recompile it, it needs the DFM file).
I don’t think the Obj file will be of any use to you.
The DFM file is very very important for your project but yet not critical important. If you are in deep need, you can still go on without it as it can be reconstructed manually based on information you have in the PAS file and based on the way the application’s GUI looks (if you have ever seen it running).
Here is the trick (involves some work):
Just create a new form and then look at the top of your original PAS file for the declaration of the form. It may look like this:
TYPE
TYourForm = class(TForm)
xLabel: TLabel;
yButton: TButton;
etc
etc
end;
Then put all those controls back to your new form and name them exactly as they are named in the PAS file (xLabel, yButton, etc). Arrange them to resemble the original GUI. When done, replace the new created PAS file with your original PAS file. IMPORTANT: the name of the DFM and PAS file should match. Compile and you are done! The rebuilt GUI may not look EXACTLY as the original one, but it should do it.
Hint:
There are tools that can extract the DFM file from DCU/EXE.
Here are some of them: www.delphi2.software.informer.com/download-delphi-extract-dfm
This will help you a lot!
.PAS — Delphi Source File
PAS should be stored in Source Control
In Delphi, PAS files are always the source code to either a unit or a form. Unit source files contain most of the code in an application. The unit contains the source code for any event handlers attached to the events of the form or the components it contains. We may edit .pas files using Delphi’s code editor. Do not delete .pas files.
.DCU — Delphi Compiled Unit
A compiled unit (.pas) file. By default the compiled version of each unit is stored in a separate binary-format file with the same name as the unit file, but with the extension .DCU (Delphi compiled unit). For example unit1.dcu contains the code and data declared in the unit1.pas file. When you rebuild a project, individual units are not recompiled unless their source (.PAS) files have changed since the last compilation, or their .DCU files cannot be found. Safely delete .dcu file because Delphi recreates it when you compile the application.
.DFM — Delphi Form
DFM should be stored in Source Control
These files are always paired with .pas files. Dfm file contains the details (properties) of the objects contained in a form. It can be view as text by right clicking on the form and selecting view as text from the pop-up menu. Delphi copies information in .dfm files into the finished .exe code file. Caution should be used in altering this file as changes to it could prevent the IDE from being able to load the form. Form files can be saved in either binary or text format. The Environment Options dialog lets you indicate which format you want to use for newly created forms. Do not delete .dfm files.
source: delphi.about.com/od/beginners/a/aa032800a.htm
0 / 0 / 0 Регистрация: 17.04.2012 Сообщений: 14 |
|
1 |
|
27.04.2012, 22:13. Показов 11292. Ответов 21
Помогите пожалйста [Error] File not found: ‘Unit4.dfm’
__________________
0 |
5683 / 2274 / 466 Регистрация: 20.11.2009 Сообщений: 7,655 Записей в блоге: 1 |
|
27.04.2012, 22:18 |
2 |
если есть исходный код, то можно создать проект заново, и перекопировать код, либо подключить существующий файл исходного кода, больше ничего не сделать
0 |
0 / 0 / 0 Регистрация: 17.04.2012 Сообщений: 14 |
|
28.04.2012, 14:29 [ТС] |
3 |
а как его подключить? если через юзе юнит все подключенно!? Добавлено через 33 секунды Добавлено через 16 секунд Добавлено через 11 часов 11 минут
0 |
Супер-модератор 8781 / 2532 / 144 Регистрация: 07.03.2007 Сообщений: 11,873 |
|
28.04.2012, 14:40 |
4 |
TRamL, у вас нет формы Unit4.dfm… либо восстановите ее (создать заново), либо уберите все ссылки на нее в проекте…
1 |
0 / 0 / 0 Регистрация: 17.04.2012 Сообщений: 14 |
|
28.04.2012, 15:07 [ТС] |
5 |
TRamL, у вас нет формы Unit4.dfm… либо восстановите ее (создать заново), либо уберите все ссылки на нее в проекте… Спасибо огромное,выручил!
0 |
Супер-модератор 8781 / 2532 / 144 Регистрация: 07.03.2007 Сообщений: 11,873 |
|
28.04.2012, 15:14 |
6 |
TRamL, ну что могу сказать — учите матчасть
0 |
0 / 0 / 0 Регистрация: 17.04.2012 Сообщений: 14 |
|
28.04.2012, 15:17 [ТС] |
7 |
TRamL, ну что могу сказать — учите матчасть а где можно почитать об этом?
0 |
Супер-модератор 8781 / 2532 / 144 Регистрация: 07.03.2007 Сообщений: 11,873 |
|
29.04.2012, 00:47 |
8 |
TRamL, да справка дельфи содержит предостаточно информации
0 |
1300 / 706 / 107 Регистрация: 25.05.2011 Сообщений: 2,158 Записей в блоге: 51 |
|
29.04.2012, 01:50 |
9 |
а где можно почитать об этом? библия delphi ссылки на форумы запрещены
0 |
0 / 0 / 0 Регистрация: 23.12.2016 Сообщений: 1 |
|
23.12.2016, 16:55 |
10 |
Так никто и не нашёл причину такого поведения компилятора?
0 |
Модератор 8254 / 5477 / 2248 Регистрация: 21.01.2014 Сообщений: 23,578 Записей в блоге: 3 |
|
23.12.2016, 18:33 |
11 |
Так никто и не нашёл причину такого поведения компилятора? Какого поведения? Еще 4.5 года назад было сказано русским языком: файла формы в проекте нет! Что еще-то объяснять надо?
0 |
0 / 0 / 0 Регистрация: 18.08.2022 Сообщений: 2 |
|
18.08.2022, 11:44 |
12 |
Так бывает, если сначала создаешь модуль с формой, а в процессе редактирования все компоненты с формы убираешь и форма становится не нужной, но бац и: Проверьте, не осталась ли в тексте модуля директива компилятора: {$R *.dfm}. Не нужна ведь теперь. PS нервные какие-то коты с гуслЯми пошли.
0 |
Модератор 8254 / 5477 / 2248 Регистрация: 21.01.2014 Сообщений: 23,578 Записей в блоге: 3 |
|
18.08.2022, 11:52 |
13 |
нервные какие-то коты с гуслЯми пошли Вы действительно считаете, что Ваше глубокомысленное замечание действительно столь ценно, чтобы поднимать мертвую тему спустя 10 лет от начала и 6 — с момента последнего поста?
0 |
0 / 0 / 0 Регистрация: 18.08.2022 Сообщений: 2 |
|
18.08.2022, 12:10 |
14 |
Тему о гуслярах никто ни 6 ни 10 назад не поднимал. Прекрасно сознавая, что мой пост Вы уберете, советую не нервничать и философски относиться к жизни.
0 |
Модератор 8254 / 5477 / 2248 Регистрация: 21.01.2014 Сообщений: 23,578 Записей в блоге: 3 |
|
18.08.2022, 12:21 |
15 |
У Вас на форуме 2 поста и в каждом упоминаются какие-то нервы… Так кто тут нервничает-то и кому надо «философски относиться к жизни»?
0 |
Модератор 3199 / 1813 / 664 Регистрация: 15.11.2015 Сообщений: 7,259 |
|
18.08.2022, 17:13 |
16 |
сначала создаешь модуль с формой, а в процессе редактирования все компоненты с формы убираешь и форма становится не нужной, но бац и: За более чем 20 лет работы с Delphi ни разу такого не было. А я его как только не мучил, нормально работает.
0 |
80 / 69 / 11 Регистрация: 23.05.2015 Сообщений: 335 |
|
18.08.2022, 21:35 |
17 |
Что с этим делать? Если файла нет, попробуйте его восстановить из резервной копии (если конечно она имеется). Если нет и потеря файла это результат сбоя на hdd — копните поглубже в сторону диска. Да помогут вам RecoveryMyFiles и RStudio мультисимптомные.
0 |
3295 / 1977 / 635 Регистрация: 29.05.2013 Сообщений: 8,553 |
|
19.08.2022, 00:36 |
18 |
Если файла нет, попробуйте его восстановить из резервной копии (если конечно она имеется). Если нет и потеря файла это результат сбоя на hdd — копните поглубже в сторону диска. Да помогут вам RecoveryMyFiles и RStudio мультисимптомные Спустя несколько секунд после удаления файла, восстановить его уже не всегда возможно, а уж через 4 месяца шансы стремятся к 0
0 |
пофигист широкого профиля 4602 / 3062 / 850 Регистрация: 15.07.2013 Сообщений: 17,660 |
|
19.08.2022, 01:22 |
19 |
Имхо тут вообще разговаривать не о чем.
а сейчас получилось все,удалил все о юнит 4 и норм Ясен пень автор топика собирал конструктор лего из тех деталек что нашел на помойке. Юнит 4 ему вообще не был нужен. Но какой-то мусор от этого модуля в его проекте остался, что и мешало ему скомпилировать проект.
0 |
80 / 69 / 11 Регистрация: 23.05.2015 Сообщений: 335 |
|
19.08.2022, 08:12 |
20 |
Спустя несколько секунд после удаления файла, восстановить его уже не всегда возможно, а уж через 4 месяца шансы стремятся к 0 Это вы напрасно. Как-то, я этим софтом восстановил залежи давних времен, про которые уже давно забыл. Поэтому шанс есть.
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
19.08.2022, 08:12 |
Помогаю со студенческими работами здесь [Error] Unit1.pas(43): Declaration expected but end of file found interface uses [Fatal Error] Unit3.pas(7): File not found: ‘frxExportXLS.dcu’ когда f9 вот такое вот выдает че делать…
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: 20 |
Решение найдено.
Код:
Здравствуйте, уважаемые эксперты!У меня такой вопрос как правильно переименовать юнит в уже написанном многомодульном приложении.
Код:
Здравствуйте, GAZ!
Если делать это вручную, то операция занимает несколько шагов.
Для примера: переименовать unit1 в unit15
1. Открыть проект, в нем модуль unit1. Первую строку
unit Unit1;
поменять на
unit Unit15;
2. Переименовать файлы unit1.pas, unit1.dfm, Unit1.ddp, Unit1.dcu, Unit1.~pas, Unit1.~dfm, Unit1.~ddp в соответственно unit15.pas, unit15.dfm, Unit15.ddp, Unit15.dcu, Unit15.~pas, Unit15.~dfm, Unit15.~ddp
3. Открыть модуль проекта, и строку
Unit1 in ‘Unit1.pas’ {Project1},
поменять на
Unit15 in ‘Unit15.pas’ {Form1},
4. Открыть по очереди все остальные модули и если где то используется Unit1 (т.е. присутствует строка Uses unit1;) поменять эту строку на Uses unit15;
Откомпилировать.
Если выскакивает ошибка File not found unit1.dcu значит в каком-то модуле ещё присутствует ссылка на использование Unit1 (uses unit1).
P.S. Рекомендация. перед проведением эксперимента сохранить все файлы проекта в отдельном каталоге (сделать копию каталога программы).
Код:
Здравствуйте, GAZ!
В дополнении…
Сам модуль, который необходимо переименовать, лучше переименовывать средставми Делфи. Для этого используйте «Сохранить как…» или откройте окно Менеджера Проекта и там это сделайте. Тем более, если у вас не просто сам юнит, а еще и форма к нему. И лучше удалять старые .dcu файлы. Потом ручками Поиском и Заменой пройтись по всем модулям проекта и заменить старое название на новое.
Я когда-то в Д5 наступал на такие грабли.
Источник : http://expert.delphi.int.ru/question/1825/
и там ещё продолжение имеется.
У меня есть проект Delphi 7 с этой структурой:
.dpr
foo.pas
*.pas
*.dfm
Bin/
debug/
Большая часть исходного кода, за исключением одного файла, совместно используется другими проектами (хотя это не имеет значения), поэтому я провел некоторую реорганизацию, которая выглядит следующим образом:
.dpr
UniqueFile/
foo.pas
Common/.pas
*.pas
*.dfm
Bin/
debug/
Я изменил пути в .dpr с новой структурой, но когда я по какой-то причине пытаюсь скомпилировать, он не может найти один из файлов .dfm в папке Common
. Показанная ошибка:
[Error] File not found: 'SomeFile.DFM'
Однако и .pas
, и соответствующий .dfm
находятся в этой папке.
Я пропустил какую-то конфигурацию?
РЕДАКТИРОВАТЬ: Этот файл включен в файл .dpr
следующим образом:
uses
...
SomeFile in 'Common/SomeFile.pas',
...
EDIT2: я скопировал только файл SomeFile.dfm в корневую папку, и он компилируется. По какой-то причине он все еще ищет этот файл по старому пути?
РЕДАКТИРОВАТЬ 3: Я включил то, на что указал @ ken-white, но не повезло. Так что теперь .dpr выглядит так:
uses
...
SomeFile in 'Common/SomeFile.pas' {ChildFrame},
...
Я также дважды проверил эту строку в SomeFile.pas
:
{$R *.DFM}
Еще одна вещь, на которую я должен обратить внимание, это то, что опция Build работает нормально, но не компилируется.
2 ответа
Лучший ответ
Мне кажется, что ваша проблема (по крайней мере, на данный момент) в том, что вы используете косую черту вместо обратной.
uses
...
SomeFile in 'Common/SomeFile.pas' {ChildFrame},
...
… вместо этого должно быть …
uses
...
SomeFile in 'CommonSomeFile.pas' {ChildFrame},
...
1
Jerry Dodge
1 Май 2019 в 15:03
В вашем файле .dpr пропущена запись для формы, в которой сообщается, что в среде IDE есть связанный файл .dfm.
При создании нового приложения VCL Forms среда IDE записывает следующую запись в файл проекта:
uses
Forms,
Unit1 in 'Unit1.pas' {Form1};
Информация {Form1}
говорит IDE искать файл .DFM, который содержит информацию о форме. Вы сказали, что файл .pas находится в вашей новой папке Common
, но не сказали, что он также должен искать там файл .dfm. Среда IDE ищет его в папке проекта и не может найти его там. Пока, конечно, вы не скопируете его в папку проекта.
Измените свой .dpr для чтения
uses
...
SomeFile in 'Common/SomeFile.pas' {FormClass},
Заменив {FormClass}
на имя переменной формы из вашего SomeFile
блока.
2
Ken White
1 Май 2019 в 12:28
← →
night_light ©
(2009-10-15 13:07)
[0]
при создании формы (выполнении create) выскакивает сообщение «Resource TmyForm not Found», что я не сделал?
← →
Юрий Зотов ©
(2009-10-15 13:38)
[1]
Возможно, в модуле этой формы удалена директива {$R *.dfm}
← →
night_light ©
(2009-10-15 15:06)
[2]
директиву добавил, теперь компилятор ругается:
[Error] File not found: «uMyForm.dfm»
не смог найти толкового объяснения по динамическому созданию формы.
Чем оно отличается от аналогичного создания компонента?
Может ссылочку кто кинет на нормальную статью?
← →
{RASkov} ©
(2009-10-15 15:14)
[3]
> [2] night_light © (15.10.09 15:06)
> [Error] File not found: «uMyForm.dfm»
Либо модуль, где описана форма, имеет отличное имя от uMyForm.pas либо файла «uMyForm.dfm» действительно нет.
> не смог найти толкового объяснения по динамическому созданию формы.
> Чем оно отличается от аналогичного создания компонента?
ничем, если не содержет дополнительных полей, таких как наприер Label1: TLabel;, Edit1: TEdit; и т.д.
которые в свою очередь и хранятся в ресурсе формы т.е. *.dfm
другими словами это корректно:
with TForm.Create(nil) do try
ShowModal;
finally
Free;
end;
будет создана и показана пустая форма у которой нет файла ресурса *.dfm….
← →
clickmaker ©
(2009-10-15 15:17)
[4]
> не смог найти толкового объяснения по динамическому созданию
> формы.
CreateNew, если dfm нет. ну и в рантайме создавать и класть на форму все компоненты
← →
Медвежонок Пятачок ©
(2009-10-15 15:17)
[5]
он ковырял руками файлы проекта и все испортил
← →
{RASkov} ©
(2009-10-15 15:17)
[6]
> Либо модуль, где описана форма, имеет отличное имя от uMyForm.pas
не, немного не так…. правильно сказать модуль формы и ресурс dfm имеют разные имена…
← →
Медвежонок Пятачок ©
(2009-10-15 15:19)
[7]
модуль формы и ресурс dfm имеют разные имена…
не обязательно.
они могут иметь одинаковые имена, но при этом их содержимое не бъет с именами
← →
night_light ©
(2009-10-15 15:28)
[8]
файла «uMyForm.dfm» конечно же нет,
потому что я его не создавал, и делфи не позаботилась,
соответственно вопрос, кто должен создавать этот файл,
что нужно для его корректного создания?
в форме конечно же есть элементы контроля (по задумке),
иначе у неё пропадает смысл.
С динамическим созданием компонент всё элементарно,
создаю модуль, наследую в нём класс от имеющегося компонента,
описываю нужные мне поля, в основном модуле подключаю созданный
модуль, создаю экземпляр класса, для контролов делаю InsertControl и использую. А вот для форм надо сделать что-то ещё не очевидное мне.
Может кто скажет, что?
← →
night_light ©
(2009-10-15 15:32)
[9]
я ничего не ковырял
только теперь сколько нибудь толково
объяснили, как создавать форму, пробую.
← →
Anatoly Podgoretsky ©
(2009-10-15 15:32)
[10]
А может проще, может он просто хочет создать форму и не понимает, что надо использовать TForm, а не TMyForm
← →
Медвежонок Пятачок ©
(2009-10-15 15:35)
[11]
ковырял ковырял. не отмажешься.
R директиву у тебя же не лунатики грохнули.
← →
night_light ©
(2009-10-15 15:40)
[12]
Удалено модератором
Примечание: Повежливее к отвечающим
← →
night_light ©
(2009-10-15 15:50)
[13]
на самом деле я хотел вот это:
unit umyForm;
interface
uses Forms;
type
TmyForm = class(TForm)
public
...
constructor create(...);
end;
implementation
constructor TmyForm.create(...);
begin
inherited CreateNew(Application);
Visible := True;
...
end;
...
end.
unit Unit1;
interface
uses Forms, uMyForm;
type
TForm1 := class(TForm)
...
public
myForm: TmyForm;
...
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
...
end.
← →
Медвежонок Пятачок ©
(2009-10-15 15:56)
[14]
а чем визуальный дизайнер форм-то не угодил?
I hope you haven’t lost your work.
Simplified, Delphi works like this:
PAS+DFM => DCU
DCU+RES => EXE
More about Delphi files at the end of this answer.
You can compile the project if you only have the DCU file. First, remove the PAS file from your folder else Delphi will try to recompile it (and in order to recompile it, it needs the DFM file).
I don’t think the Obj file will be of any use to you.
The DFM file is very very important for your project but yet not critical important. If you are in deep need, you can still go on without it as it can be reconstructed manually based on information you have in the PAS file and based on the way the application’s GUI looks (if you have ever seen it running).
Here is the trick (involves some work):
Just create a new form and then look at the top of your original PAS file for the declaration of the form. It may look like this:
TYPE
TYourForm = class(TForm)
xLabel: TLabel;
yButton: TButton;
etc
etc
end;
Then put all those controls back to your new form and name them exactly as they are named in the PAS file (xLabel, yButton, etc). Arrange them to resemble the original GUI. When done, replace the new created PAS file with your original PAS file. IMPORTANT: the name of the DFM and PAS file should match. Compile and you are done! The rebuilt GUI may not look EXACTLY as the original one, but it should do it.
Hint:
There are tools that can extract the DFM file from DCU/EXE.
Here are some of them: www.delphi2.software.informer.com/download-delphi-extract-dfm
This will help you a lot!
.PAS — Delphi Source File
PAS should be stored in Source Control
In Delphi, PAS files are always the source code to either a unit or a form. Unit source files contain most of the code in an application. The unit contains the source code for any event handlers attached to the events of the form or the components it contains. We may edit .pas files using Delphi’s code editor. Do not delete .pas files.
.DCU — Delphi Compiled Unit
A compiled unit (.pas) file. By default the compiled version of each unit is stored in a separate binary-format file with the same name as the unit file, but with the extension .DCU (Delphi compiled unit). For example unit1.dcu contains the code and data declared in the unit1.pas file. When you rebuild a project, individual units are not recompiled unless their source (.PAS) files have changed since the last compilation, or their .DCU files cannot be found. Safely delete .dcu file because Delphi recreates it when you compile the application.
.DFM — Delphi Form
DFM should be stored in Source Control
These files are always paired with .pas files. Dfm file contains the details (properties) of the objects contained in a form. It can be view as text by right clicking on the form and selecting view as text from the pop-up menu. Delphi copies information in .dfm files into the finished .exe code file. Caution should be used in altering this file as changes to it could prevent the IDE from being able to load the form. Form files can be saved in either binary or text format. The Environment Options dialog lets you indicate which format you want to use for newly created forms. Do not delete .dfm files.
source: delphi.about.com/od/beginners/a/aa032800a.htm