![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 48 Всего: 207 |
Эта незнакомая IDE! Небольшой список приёмов для эффективной работы IDE - интегрированная среда разработки Дельфи. Все хоть чуть чуть соприкасавшиеся с Дельфи знают эту простую и интуитивно понятную среду. Тем ни менее, эта среда имеет огромное количество функций, которые не столь очевидны для пользователя и не очень хорошо документированы. Целью этой статьи является рассказать о некоторых приёмах работы в среде Дельфи, не столь очевидных даже для профессионалов. Описание базируется на Дельфи 7, но подавляющее большинство приёмов будет доступно и в других версиях, как ранних, так и поздних. Текстовый редактор 1) Отмеченный блок текста можно сдвинуть вправо или влево нажатием Ctrl-Shift-U или Ctrl-Shift-I - это особенно удобно при форматировании текста, оформлении процедур, циклов и т.п. 2) Отмеченный блок текста можно сохранить в файл непосредственно, минуя стадии создания файла и т.п. Нажмите Ctrl-K и затем W - откроется диалог сохранения файла выберите имя и блок будет сохранён в виде отдельного файла. Вообще-то редактор дельфи берёт начало ещё от очень древнего Word star редактора(речь идёт о начале 80х годов), на базе которого был сделан IDE для Turbo Pascal. В том Wordstar очень многие функции были реализованы через префиксы. Т.е. нажимается какой-то префикс, и потом клавиша функции. Такими префиксами в Дельфи остались Ctrl-K и Ctrl-O - сами по себе эти комбинации ничего не делают, но после их нажатия следующая буква определяет функциональность. Итак Ctrl-K,W - записывают выделенный блок в файл (от слова Write - писать) 3) Содержимое текстового файла можно легко загрузить по месту курсора (вставить в текущий текст) нажав Ctrl-K,R (Read). При нажатии комбинации откроется диалог открытия файла. 4) Переходы на метки. Скорее всего это почти все знают, но тем ни менее. Можно запомнить текущую позицию курсора поставив метку, и потом перейти к метке. Всего меток можно поставить до 10 штук. Метка ставится нажатием Ctrl-Shift+ цифра, переход к поставленной метке по нажатию Ctrl+цифра. Для тех кто в танке: нажмите Ctrl-Shift+1 затем пролистайте текущий файл куда-нибудь вверх или вниз, нажмите Ctrl-1 и курсор перескочит на запомненную позицию. 5) Чтобы открыть в редакторе исходник файла указанный в Uses, поставте курсор на имя модуля и нажмите Ctrl-Enter. Исходник сразу будет открыт в новом окне. Только 2 замечания: во-перывых это не обязательно должно быть имя модуля из uses, редактор будет пробовать открыть любой файл по имени слова над которым стоит курсор, во-вторых IDE должно знать где искать файл, если в списке путей этого файла нет, IDE его не найдёт и просто откроет диалог открытия файла. 6)Вертикальные блоки - очень удобная фишка. Можно выделить вертикальный блок текста и манипулировать им. Для выделения вертикального блока можно воспользоваться клавиатурой: Удерживая Shift и Alt перемещать курсор или мышкой - для этого при выделении мышкой удерживайте Alt нажатым. Для выхода из режима отметки вертикального блока используйте или мышку - выделив что-нибудь без Alt или используя Ctrl+O, K. Ещё один способ перейти в режим выделения вертикальным блоком - это нажать Ctrl+O, C и после этого блоки будут вертикальными при выделении их клавиатурой. 7) Строковые блоки - ещё один вид блоков пришедших из wordstar и сейчас подзабытых. В этом случае редактор выделяет строку целиком, вне зависимости от того где стоит курсор. Иногда удобно. Перейти в режим строкового блока можно комбинацией Ctrl+O, L 8) Удалить целую строку можно нажав Ctrl-Y, а нажатие Ctrl-T приводит к удалению конца слова (от позиции курсора до конца слова), применение Ctrl+Shift+Y позволяет удалить весь текст от курсора до конца строки. 9) Можно вставить любой символ в текст при помощи Ctrl-P, после нажатия этой комбинации следующий символ с клавиатуры не будет восприниматься как управляющий а будет введен в текст, например Ctrl-P и потом Ctrl-A вставят в текст символ #1 10) Копирование без буффера обмена. Ещё одна удобная фишка, пришедшая со времён ДОС. Наверное все встречались с ситуацией когда например в буффере обмена лежит название объекта, но чтобы вставить его надо скопировать кусок кода. Если копировать по привычному Ctrl-C/Ctrl-V то предыдущая информация в буффере исчезнет. На этот случай есть 2 удобных приёма. Во первых можно скопировать блок клавиатурой без использования буффера обмена - выделите блок текста, нажмите Ctrl-K, C - блок скопирован, содержимое буффера обмена не пострадало. Второй способ - мышкой: отмечаем блок, удерживая нажатым Ctrl перетаскиваем блок на новое место - блок копируется. 11) Макросы! Редактор Дельфи позволяет запомнить нажатые клавиши и потом произвести точно такую-же последовательность нажатий. Делается это следующим образом. Допустим у нас есть код: Table1.fieldByName('aaaaa').asString:='чего-то там'; Table1.fieldByName('sdweewr').asString:='чего-то там 1'; Table1.fieldByName('sdfsdfga').asString:='чего-то там2'; Table1.fieldByName('a').asString:='чего-то там 4'; Table1.fieldByName('pyoruw').asString:='чего-то там 5'; Этот код надо заменить на аналогичный, но с использованием параметров, причём добавить ещё переменную v. В конечном итоге мы хотим каждую строку преобразовать в нечто типа: Table1.params.parambyname('aaaaa').value:='чего-то там'+v; Если строк очень много то процесс переделки может быть весьма трудоёмкий. Что мы делаем: - ставим курсор на первую букву первой строки. - нажимает Ctrl-Shift-R (начать запись макро) с этого момента все нажатия на клавиатуре будут запоминаться, поэтому действуем осторожно чего попало не нажимая: - нажимаем Ctrl-вправо и удаляем fieldByName - печатаем на его место params.parambyname - нажимаем Ctrl-вправо пока курсор не станет на asString (просто вправо жать нельзя так как значение имени поля у нас разной длинны в разных строках) - удаляем asString нажатием delete - записываем value -нажимаем End и клавишу влево - записываем +v - теперь нажимаем клавишу вниз и клавишу home - чтобы курсор стал на начало следующей строки - нажимает Ctrl-Shift-R- закончить запись макро. Теперь по нажатию Ctrl-Shift-P редактор будет обрабатывать любую текущую строку так же как и ту над которой работали мы. 12) Быстрый поиск. Нажмите Ctrl-E и начинайте печатать слово которое вы хотите найти - редактор будет искать по мере ввода слова... 13) Чтобы вставить в текст GUID (CLSID) - нажмите Ctrl-Shift-G 14) Все знают что после точки Дельфи выдаёт список доступных методов и свойств объекта, а как вызвать этот список вручную, если он уже исчез? - нажмите Ctrl-Space. Кстати нажатие Ctrl-Shift-Space приведёт к появлению всплывающей подсказки о параметрах функции или метода, если нажатие произведено когда курсор стоит после скобки, например напишите write( и нажмите Ctrl-Shift-Space - будет выведен hint о параметрах функции. 15) Путём нажатия Ctrl+Shift+Up и Ctrl+Shift+Down можно быстро перейти от тела метода к его объявлению и наоборот. Аесли нажать Ctrl-Shift-C на методе то удет автоматически создано его объявление в классе и наоборот, если есть объявление метода в классе - то будет создан шаблон для его реализации. 16) Если кликнуть на идентификаторе с нажатым Ctrl, то курсор перейдёт на объявление этого идентификатора. А если нажать Ctrl-Shift-B на имени класса, то будет выведена вся иерархия данного класса. 17) Если нажать Ctrl-O, O то по текущему положению курсора будут выведены все опции компилляции установленные для проекта. 18) Можно изменить регистр букв выделенного текста на противоположный нажав Ctrl+O, U, а нажатие Ctrl+K, E приведёт к переводу текущего слова в нижний регистр (Ctrl+K, F - в верхний). 19) Ctrl+O, G позволит вам быстро перейти к строке по её номеру 20) Alt+[ и Alt+] осуществляют поиск парных скобок, что удобно при сложных выражениях. Отладчик: 1) Наверное все знают функции трассировки F7/F8, но есть ещё одна - Shift-F7 - она аналогична F7 т.е. трассирует программу с заходом в каждую процедуру, но в дополнении ещё отлавливает и случающиеся события и трассирует их. 2) Ctrl-F3 - вызов стека вызовов функций. Крайне удобная штука - в точке останова можно заглянуть в него и выяснить кто вызывал данную процедуру, увидеть всю цепочку вызовов и быстро перейти к вызывающей функции. 3) Ctrl-F7 - позволяет посмотреть любую переменную, изменить её значение, и даже выполнить какой-нибудь код прямо в процессе отладки. Его же можно использовать и как калькулятор по мере разработки программы. Кстати, если надо просмотреть значение переменной типа TStrings - например memo.lines то не надо писать memo.lines.text - так как при этом текст не будет разбит на строки, пишите memo.lines.gettext - это сделает вывод значения гораздо более читаемым. Кстати есть и ещё одна особенность - при выводе значения TStrings, а так же массивов и т.п. "объёмных" структур просмотрщик выводит только первые несколько килобайт, поэтому не волнуйтесь, если у вас вдруг просмотрщик покажет только кусок значения - это не глюк, это особенность просмотрщика, скомпиллированный код работает правильно 4) При наличии многочисленных ошибок компилляции можно легко переходить к последующей/предыдущей ошибке нажатием Alt-F8/Alt-F7 -------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
| Alex |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4147 Регистрация: 25.3.2002 Где: Москва Репутация: 80 Всего: 162 |
Статья перенесена в FAQ.
-------------------- Написать можно все - главное четко представлять, что ты хочешь получить в конце. |
|||
|
||||
| Петрович |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1000 Регистрация: 2.12.2003 Где: Москва Репутация: 25 Всего: 55 |
Наверное все таки не перенесена, а скопированна -------------------- Все знать невозможно, но хочется |
|||
|
||||
| Alex |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4147 Регистрация: 25.3.2002 Где: Москва Репутация: 80 Всего: 162 |
Добавлена в FAQ
-------------------- Написать можно все - главное четко представлять, что ты хочешь получить в конце. |
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 48 Всего: 207 |
Наверное торопитесь -------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
| December |
|
|||
![]() Antitheorist ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4423 Регистрация: 14.8.2002 Где: Харьков Репутация: 8 Всего: 57 |
Может, лишнее, но всё же...
Точно отпозиционировать контрол в design-time можно с помощью стрелок на клавиатуре, удерживая Ctrl нажатым. Одно нажатие - сдвиг на один пиксель. Если объект, который хочется подвикать, закрыт чем-то другим (скажем, нужно сместить TPanel, но на нём чё-то лежит с Align=alClient), то вызываем браузер объектов по Alt+Shift+F11, находим в иерархии нужный TPanel, кликаем на нём - и он обретает фокус. ЗЫ Для тех, кому неудобно нажимать Alt+Shift+F11 |
|||
|
||||
| p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 58 Всего: 112 |
Это знают почти все, но мало ли кто не знает:
Если например на TPanel расположены какие-то контролы, и хочется всех их сдвинуть, то простой выбор рамкой мышью не будет работать, т.к. будет двигаться сама панель. Через Shift выбирать все контролы - долго. Поэтому нужно держать Ctrl и выделять мышью нужные контролы... -------------------- С уважением, г-н Посол. |
|||
|
||||
| Fedor |
|
|||
![]() Днепрянин ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2090 Регистрация: 8.2.2003 Где: Великий Репутация: нет Всего: 32 |
Ух ты... Я не знал... -------------------- Мы - Днепряне. Мы всех сильней. |
|||
|
||||
| Alex |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4147 Регистрация: 25.3.2002 Где: Москва Репутация: 80 Всего: 162 |
Значит теперь буду там править. -------------------- Написать можно все - главное четко представлять, что ты хочешь получить в конце. |
|||
|
||||
| dm9 |
|
|||
![]() Дмитрий Копытин ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 3876 Регистрация: 22.7.2002 Где: Москва Репутация: 6 Всего: 137 |
Точная подгонка размеров (попискельно) - Shift + стрелки. |
|||
|
||||
| Петрович |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1000 Регистрация: 2.12.2003 Где: Москва Репутация: 25 Всего: 55 |
Маленький трюк.
Если на редактируемой форме выбрать один или несколько компонент, и скопировать их в буфер обмена, то переключившись на окно кода, можно выполнить вставку из буфера. При этом, вставится определение компонента в текстовом виде (типа как в DFM). Это позволяет быстренько посмотреть значения всех его свойств отличающихся от значений по умолчанию. Или, помочь в перенесении создания компонента из времени дизайна на время исполнения. -------------------- Все знать невозможно, но хочется |
|||
|
||||
| p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 58 Всего: 112 |
Также все, наверное, в опциях видели "Code Templates", но многие либо не удосужились проверить что это, либо забыли про это.
Но смысл такой: Наберите в редактору букву "p", нажмите Ctrl+J... Вместо буквы P появится такой шаблон кода:
Настриваются шаблоны в Tools -> Editor Options -> Source Options -> Edit Code Templates... Советую стереть все готовые шаблоны, и добавлять туда свои по мере того, как будете понимать, что какой-то код набираете очень часто... -------------------- С уважением, г-н Посол. |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
относительно вертикальных блоков
Вертикальные блоки можно выделять с пом. Alt+ЛКМ Добавлено @ 14:30 если в пустом месте нажать Ctrl+пробел, то будут показаны все доступные функции, процедуры, свойства, переменные и т.д.
Это сообщение отредактировал(а) Akella - 29.10.2009, 10:35 |
|||
|
||||
| Петрович |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1000 Регистрация: 2.12.2003 Где: Москва Репутация: 25 Всего: 55 |
А еще, если в редакторе полей (вызывается двойным кликом на любом наследнике tDataset), "схватить" мышкой одно или несколько полей и перетащить их на форму, то на форму будут вставлены tLabel, и соответствующий tDbXXXXXEdit для каждого поля. Очень удобно как отправная точка при создании форм для ввода/редактирования записи.
-------------------- Все знать невозможно, но хочется |
|||
|
||||
| Петрович |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1000 Регистрация: 2.12.2003 Где: Москва Репутация: 25 Всего: 55 |
Увы, в Delphi 2005 ни с Shift, ни с Ctrl не дпозволяют выделить разнотипные невизуальные компоненты. Например tADODateSet и tDataSource. В Delphi 6 я этим пользовался для того чтобы скопировать (через клипбоард) сразу несколько связанных невизуальных компонентов из одной формы(проекта) в другую форму(проект). -------------------- Все знать невозможно, но хочется |
|||
|
||||
| Cyri |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 23.7.2004 Репутация: нет Всего: нет |
Классныйй материал! Всем спасибо! Молодцы! Почерпнул для себя кучу полезных мелочей.
|
|||
|
||||
| Alex |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4147 Регистрация: 25.3.2002 Где: Москва Репутация: 80 Всего: 162 |
Статья в FAQ обновлена http://vingrad.ru/ART-DELPHI-002204
-------------------- Написать можно все - главное четко представлять, что ты хочешь получить в конце. |
|||
|
||||
| RA |
|
|||
![]() Брутальный буратина ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3497 Регистрация: 31.3.2002 Где: Лес Репутация: 14 Всего: 115 |
CTR+TAB Возвращает на последнюю позицию измененений, похоже на CTR+Z только без удаления текста.
Клавиша Insert (или "Ins 0") изменяет режим вводк на Overwrite или Insert |
|||
|
||||
| ShadeSt |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 256 Регистрация: 9.8.2005 Где: Россия, г. Ставро поль Репутация: нет Всего: 7 |
Наткнулся случайно на эту тему. Подборка клавиш просто классная!!!
Вот только я кое-чего не нашел, если скосоглазил, просьба не пинать сильно. Ctrl + K + U - Сдвиг выделенного блока влево Ctrl + K + I - Сдвиг выделенного блока вправо -------------------- It's nice to be importand, but it's more importand to be nice © Scooter |
|||
|
||||
| Yanis |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2937 Регистрация: 9.2.2004 Где: Москва Репутация: 72 Всего: 111 |
ShadeSt
Ну и старую же тему ты отрыл Ctrl + K + U, Ctrl + K + I вроде из паскаля перекачевали. |
|||
|
||||
| Snowy |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
А в паскаль эта комбинация попала из ещё более древних текстовых редакторов. Быстрее это делается при помощи просто Ctrl + Shift + U и Ctrl + Shift + I Добавлено @ 08:46
|
||||||
|
|||||||
| Bose |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1458 Регистрация: 5.3.2005 Где: Riga, Latvia Репутация: 23 Всего: 51 |
"Раз пошла такая пьянка..."
Ctrl + F4 закрывает текущую вкладку Alt + F4 закрывает Delphi Ну и вот, посерьёзнее: Ctrl+Alt+F11 - окно Project Manager F11 - Object Inspector F10 - выводит на передний план палитру компонентов Ctrl+Shift+вниз, Ctrl+Shift+вверх - переход из тела процедуры к её обьявлению и наоборот. Shift+Tab - "обратный" Tab |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 15 Всего: 98 |
хм...
Ctrl+S -- сохраняет документ Ctrl+O -- открывает документ... -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Ну зачем же стандартные виндовые комбинации перечислять?
Они и так очевидны. |
|||
|
||||
| Bose |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1458 Регистрация: 5.3.2005 Где: Riga, Latvia Репутация: 23 Всего: 51 |
Snowy, дай людям постебацца :-D
Winkey->U->U->Enter выклюает компьюетр :-D "раз пошла такая пьянка, режь последнюю морковь" |
|||
|
||||
| Golden Hands |
|
|||
![]() Золотой ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2023 Регистрация: 23.1.2005 Где: Екатеринбург Репутация: нет Всего: 83 |
Нажатие комбинации <Ctrl> + <Space> после имени объекта и последующий ввод точки, кроме вызова списка свойств и методов, преобразует текст в регистрозависимое написание.
Например, кидаете на форму TOLEContainer, переименовываете его в OLEContainer_from_ADODataSet1. Затем, при необходимости обратиться к его методам, в редакторе кода пишите olecontainer_from_adodataset1, нажимаете комбинацию, ставите точку - текст преобразуется в правильное написание имени, с верхним регистром необходимых символов. -------------------- Мы обречены... но только на победу! Настанет день, и мы построим новый дом. Внесем в него тепло, что сохранить сумели, И воскресим все то, что в нас когда-то умерло... © Тень Света |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |