воскресенье, 9 августа 2015 г.

Macros for Excel on VBA for copy only values

You can see Macros for Excel on VBA for copy only values. Hidden rows will be copied too,  because here we are not control it, but You can add it in Your code by yuorself, if needed:


Sub CopyOnlyValuesCell()
On Error Resume Next
Dim str As String
Dim arrData() As Variant
Dim arrReturnData() As Variant
Dim rng As Excel.Range
Dim lRows As Long
Dim lCols As Long
Dim i As Long, j As Long
  lRows = Selection.Rows.Count
  lCols = Selection.Columns.Count
  ReDim arrData(1 To lRows, 1 To lCols)
  ReDim arrReturnData(1 To lRows, 1 To lCols)
  Set rng = Selection
  arrData = rng.Value
 
 If Selection.Count = 1 Then
  str = ActiveCell.Value
 Else
  For i = 1 To lRows
    For j = 1 To lCols
        If j > 1 Then
         str = str & Chr(9) & (arrData(i, j))
        Else
         str = str & arrData(i, j)
        End If
    Next j
    If i > 0 Then str = str & Chr(13) & Chr(10)
  Next i
 End If
    CopyTextToClipboard (str)
  Set rng = Nothing
End Sub

CopyTextToClipboard is our function. We can do it so:



Sub CopyTextToClipboard(ByVal inText As String)
  Dim objClipboard As Object
  Set objClipboard = CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")

  objClipboard.SetText inText
  objClipboard.PutInClipboard

  Set objClipboard = Nothing
End Sub
 
 
 
Function GetTextFromClipboard() As String
  Dim objClipboard As Object
  Set objClipboard = CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")

  objClipboard.GetFromClipboard
  GetTextFromClipboard = objClipboard.GetText

  Set objClipboard = Nothing
End Function


Crack the password in Excel and uprotect modules

For  2003 XLS file, using Excel 2007 and may be 2010


  1. Backup the xls file
  2. Using a HEX editor, locate the DPB=... part
  3. Change the DPB=... string to DPx=...
  4. Open the xls file in Excel
  5. Open the VBA editor (ALT+F11)
  6. Excel discovers an invalid key (DPx) and asks whether you want to continue loading the project (basically ignoring the protection)
  7. You will be able to overwrite the password, so change it to something you can remember
  8. Save the xls file*
  9. Close and reopen the document.


If you are using a .xls You can open:

  1. Create a new simple excel file.
  2. In the VBA part, set a simple password (say - 1234).
  3. Save the file and exit. Then check the file size - see Stewbob's gotcha
  4. Open the file you just created with a hex editor.
  5. Copy the lines starting with the following keys:


  6. CMG=....
    DPB=...
    GC=...
    FIRST BACKUP the excel file you don't know the VBA password for, then open it with your hex editor, and paste the above copied lines from the dummy file.


  7. Save the excel file and exit.
  8. Now, open the excel file you need to see the VBA code in. The password for the VBA code will simply be 1234 (as in the example I'm showing here).

VBA method:


`code credited to Siwtom (nick name), a vietnamese develope
Option Explicit
Private Const PAGE_EXECUTE_READWRITE = &H40
Private Declare Sub MoveMemory Lib "kernel32" Alias "RtlMoveMemory" _
        (Destination As Long, Source As Long, ByVal Length As Long)
Private Declare Function VirtualProtect Lib "kernel32" (lpAddress As Long, _
        ByVal dwSize As Long, ByVal flNewProtect As Long, lpflOldProtect As Long) As Long
Private Declare Function GetModuleHandleA Lib "kernel32" (ByVal lpModuleName As String) As Long
Private Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, _
        ByVal lpProcName As String) As Long
Private Declare Function DialogBoxParam Lib "user32" Alias "DialogBoxParamA" (ByVal hInstance As Long, _
        ByVal pTemplateName As Long, ByVal hWndParent As Long, _
        ByVal lpDialogFunc As Long, ByVal dwInitParam As Long) As Integer
Dim HookBytes(0 To 5) As Byte
Dim OriginBytes(0 To 5) As Byte
Dim pFunc As Long
Dim Flag As Boolean
Private Function GetPtr(ByVal Value As Long) As Long
    GetPtr = Value
End Function
Public Sub RecoverBytes()
    If Flag Then MoveMemory ByVal pFunc, ByVal VarPtr(OriginBytes(0)), 6
End Sub
Public Function Hook() As Boolean
    Dim TmpBytes(0 To 5) As Byte
    Dim p As Long
    Dim OriginProtect As Long
    Hook = False
    pFunc = GetProcAddress(GetModuleHandleA("user32.dll"), "DialogBoxParamA")

    If VirtualProtect(ByVal pFunc, 6, PAGE_EXECUTE_READWRITE, OriginProtect) <> 0 Then
        MoveMemory ByVal VarPtr(TmpBytes(0)), ByVal pFunc, 6
        If TmpBytes(0) <> &H68 Then
            MoveMemory ByVal VarPtr(OriginBytes(0)), ByVal pFunc, 6
            p = GetPtr(AddressOf MyDialogBoxParam)
            HookBytes(0) = &H68
            MoveMemory ByVal VarPtr(HookBytes(1)), ByVal VarPtr(p), 4
            HookBytes(5) = &HC3
            MoveMemory ByVal pFunc, ByVal VarPtr(HookBytes(0)), 6
            Flag = True
            Hook = True
        End If
    End If
End Function
Private Function MyDialogBoxParam(ByVal hInstance As Long, _
        ByVal pTemplateName As Long, ByVal hWndParent As Long, _
        ByVal lpDialogFunc As Long, ByVal dwInitParam As Long) As Integer
    If pTemplateName = 4070 Then
        MyDialogBoxParam = 1
    Else
        RecoverBytes
        MyDialogBoxParam = DialogBoxParam(hInstance, pTemplateName, _
                           hWndParent, lpDialogFunc, dwInitParam)
        Hook
    End If
End Function


And call it:

Sub unprotected()
    If Hook Then
        MsgBox "VBA Project is unprotected!", vbInformation, "*****"
    End If
End Sub



For Unprotect worksheet in Excel:


Sub PasswordRemove()
Dim i As Integer, j As Integer, k As Integer
Dim l As Integer, m As Integer, n As Integer
Dim i1 As Integer, i2 As Integer, i3 As Integer
Dim i4 As Integer, i5 As Integer, i6 As Integer
On Error Resume Next
For i = 65 To 66: For j = 65 To 66: For k = 65 To 66
For l = 65 To 66: For m = 65 To 66: For i1 = 65 To 66
For i2 = 65 To 66: For i3 = 65 To 66: For i4 = 65 To 66
For i5 = 65 To 66: For i6 = 65 To 66: For n = 32 To 126
ActiveSheet.Unprotect Chr(i) & Chr(j) & Chr(k) & Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & Chr(i3) & Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)
If ActiveSheet.ProtectContents = False Then
MsgBox "«Password» removed " & (i) & (j) & (k) & (l) & (m) & (i1) & (i2) & (i3) & (i4) & (i5) & (i6) & (n)
ActiveWorkbook.Sheets(1).Select
' Range("da1").FormulaR1C1 = Chr(i) & Chr(j) & Chr(k) & Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & Chr(i3) & Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)
Exit Sub
End If
Next: Next: Next: Next: Next: Next
Next: Next: Next: Next: Next: Next
End Sub


воскресенье, 30 ноября 2014 г.

Как написать чат в командном файле (CMD, BAT)

Как написать чат в командном файле (CMD, BAT)



@rem BatChat
@echo off
cls
pushd "%~dp0"
echo Current DIR: "%CD%"
if "%~1" == "talk_widget" goto talker


rem ================================================

rem ////////////////////

:auth
echo Enter chat filename to connect ("abc" for example):
set /p chat=^>
echo Enter your nick:
set /p nick=^>
start call %0 talk_widget %chat% %nick%


rem ////////////////////

:listener

cls
call title "| Chat: %chat% | User: %nick% |"
if exist %chat%_history type %chat%_history
if not exist %chat% echo. 2>%chat%



:listener_loop

ping 127.0.0.1 -n 1 -w 20 > nul
set oldtext=%text%
set /p text=<%chat%
if not "%text%" == "%oldtext%" echo %text%
goto listener_loop

rem ////////////////////



rem ================================================



rem ////////////////////
rem // %2 - chat name //
rem // %3 - user nick //
rem ////////////////////

:talker
set chat=%~2
set nick=%~3

cls
call title "| Chat: %chat% | User: %nick% |"
call ::cs_in
echo (%TIME% %nick% connected)>%chat%
call ::cs_out
echo (%TIME% %nick% connected)>>%chat%_history


:talker_loop
cls
echo Dear %nick%, type message to send:
set /p msg=^>
call ::cs_in
echo [%TIME% %nick%]: %msg%>%chat%
call ::cs_out
echo [%TIME% %nick%]: %msg%>>%chat%_history
goto talker_loop
rem ////////////////////


rem ================================================


rem ////////////////////
:cs_in

if exist "%chat%_cs" ping 127.0.0.1 -n 1 -w 50 > nul
set cs_value=%RANDOM%



:cs_in_loop
echo %cs_value%>%chat%_cs
set /p ret=<%chat%_cs
if "%ret%" == "%cs_value%" exit /b
ping 127.0.0.1 -n 1 -w 10 > nul
goto :cs_in_loop

rem ////////////////////


rem ////////////////////

:cs_out
del %chat%_cs
exit /b

rem ////////////////////



rem ================================================

Парсинг Я-новостей на PHP


 Парсинг Я-новостей 


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
        <title>Парсинг Я.Новости</title>
        <meta http-equiv="content-type" content="text/html;charset=utf-8" />
</head>
<body>

<?php

function curlFunc($url){
 $ch = curl_init();
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
$result = curl_exec($ch);
 curl_close($ch);
return $result;

}



function getYandexNews($q){
            $q = str_replace(" ","+",$q);
$h = curlFunc('http://news.yandex.ru/yandsearch?text='.$q.'&rpt=nnews2');

preg_match_all('/<a onclick="(.*?)" href="(.*?)"(.*?)class="title">(.*?)<\/a>(.*?)<span class="info">(.*?)<p>(.*?)<\/p>/is', $h, $matches);

$SStr = '';
for($i=1;$i<sizeof($matches[1]);$i++){

   if(!empty($matches[2][$i])){

         $SStr .= '<li><a href="'.trim(strip_tags($matches[2][$i])).'" target="_blank">'.trim(strip_tags($matches[4][$i])).'</a><br />

         '.$matches[7][$i].'

         <small>'.$lm.'</small>

         </li>';

         }

}

return  $SStr;

}

echo getYandexNews('Zapros');
?>

</body>
</html>

Счетчик введенных символов JQUERY




<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"

        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <title>textArea</title>
    <meta http-equiv="content-type" content="text/html;charset=utf-8" />
    <meta http-equiv="Content-Style-Type" content="text/css" />
   <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script>
</head>
<body>

<div><textarea id="messageText" cols="45" rows="15"></textarea></div>

<div>Количество символов: <span id="symbolsCounter"></span></div>

 
<script type="text/javascript">
$(function() {
    var ta = $("#messageText");
    var counter = $("#symbolsCounter");
    counter.html(ta.val().length);
    if ($.browser.mozilla && $.browser.version.substr(0,3)=="1.9") {
        ta.bind("input", function() {
            updateCounter();
        });
    }
    else {
        ta.bind("keyup", function() {
            updateCounter();
        });
    }



    function updateCounter() {
        counter.html(ta.val().length);
        var split = ta.val().split("\n");
        if (split.length > 15) {
            ta.attr("rows", split.length);
        }
    }
});
</script>
</body>
</html> 

пятница, 14 ноября 2014 г.

Парсим текст и сохраняем через FTP-соединение на PHP


Парсим текст и сохраняем через FTP-соединение на PHP

 

 /* получаем содержимое нужной нам страницы в переменную $content (обратите внимание, – мы используем для этого функцию file_get_contents. Она может работать с удаленными URL только если в настройках PHP установлена опция allow_url_fopen) */
$content = file_get_contents('http://news.yandex.ru/');
// Определяем позицию строки, до которой нужно все отрезать (используем функцию strpos()).
$pos = strpos($content, '<h2>Главные новости</h2>');
/*Отрезаем все, что идет до нужной нам позиции (функция substr в данном случае принимает два параметра: строка для обработки и //номер позиции. Функция вернет строку, НАЧИНАЯ с указанной позиции) */
$content = substr($content, $pos);
// Точно таким же образом находим позицию второй строки
$pos = strpos($content, '<hr>');
// Отрезаем нужное количество символов от нулевого
$content = substr($content, 0, $pos);
// не выводим полученную строку.
// echo $content;

// Отрезаем нужное количество символов от нулевого
$content = substr($content, 0, $pos);
// преобразовываем ссылку
$content = str_replace("href=\"/society/", "href=\"http://novostey.com/society/", $content);
// преобразовываем изображение
$content = str_replace("src=\"/thumbs/", "src=\"http://novostey.com/thumbs/", $content);
// создаем файл index.html
$fps = fopen("index.html","w+");
// записываем в index.html обработанную информацию
fwrite($fps,$content);
// закрываем файл index.html
fclose($fps);
// подключаемся к FTP
// переменные для логина
$ftphost = "ftp.narod.ru";
$user = "phpelse";
$password = "phpelse7";
// открываем FTP соединение, в случае неудачи останавливаем работу сценария
$fp = ftp_connect($ftphost) or die ("Не могу соединиться c FTP сервером");
// логинимся
$connect = ftp_login($fp, $user, $password);
// проверяем успешность входа
if($connect) echo "OK – мы вошли как $user ";
else
echo "Ошибка входа на FTP сервер";
ftp_pasv($fp, TRUE);
$indexfile = fopen("index.html", "r"); // открываем нужный файл для чтения
$loadfile = ftp_fput($fp, "index.html", $indexfile, FTP_ASCII); // передаем его на FTP
fclose($indexfile); // закрываем файл
// закрываем FTP соединение
ftp_close($fp);

вторник, 28 октября 2014 г.

Комбинации клавиш в Delphi


Комбинации клавиш в Delphi

Клавиши редактора кода
Клавиша Назначение Версия
Ctrl + J   Выбор code-template. Вставка шаблона кода. Можно вставлять типовые шаблоны, а можно написать свои собственные. При нажатии Ctrl + J, будет показан список шаблонов. Либо можно набрать несколько букв из имени шаблона, чтобы ограничить выбор, либо полное имя шаблона и нажать комбинацию - шаблон сразу вставится. 5
Например набираем try и жмём. Нам предложат варианты конструкции try. Или набираем classc, жмём - получаем готовую заготовку для описания класса.
Ctrl + Shift + C   Class Completion. Одна из важнейших комбинаций при описании класса. Закончив базовое описание класса, нажимаем комбинацию. Автоматически создадутся все описанные методы в разделе implementation, для всехproperty создадутся приватные поля и сеттеры. 5
Ctrl + Shift + V   Автоматическое объявление переменной. При написании функции можно написать код, не прописывая заранее переменные в var. Потом установить курсор на переменную и нажать данную комбинацию. Автоматически будет создан раздел var (при необходимости), и в нём будет помещено описание переменной. В случае, когда по коду нельзя точно определить тип переменной, будет вызвано уточняющее окошко. Впрочем оно редко ошибается с типом и я обычно сразу подтверждаю по Enter. 2006
Ctrl + пробел Вызов CodeCompletion (того, который автоматом появляется после нажатия точки после имени объекта/класса).  5
При нажатии на пустом месте, показывает объекты/класса/функции/процедуры/методы и т.д., которые мы можем использовать в данном месте.
При нажатии в объявлении класса, показывает методы, которые можно пронаследовать от родительского класса.
Ctrl + Shift + пробел   Показывает всплывающий хинт, подсказывающий параметры функции. 5
Ctrl + Shift + Enter   Если встать на имя функции и нажать комбинацию, то будут найдены все места в проекте, где она используется. 2005
Ctrl + Shift + G   Вставить GUID
Ctrl + Shift + T   Вставляет в текущую позицию заметку ToDo. Все расставленные заметочки можно потом смотреть черезToDo-List и осуществлять навигацию по ним.  5
Для тех, кто не в курсе - ToDo означает "Нужно сделать". То есть расставляем себе заметочки, что тут нужно сто-то сделать или доработать.
Ctrl + Shift + A   Добавляет в uses нужный модуль. Например у Вас есть код, но дельфи ругается, что она не знает, что это за функция или константа и т.п. Просто ставим на неё курсор и жмём комбинацию. Дельфи сама найдёт модуль, где она объявлена и добавит его в uses 2005
Ctrl+O+O   Вставить в код директивы компилятора, соответствующие текущим настройкам проекта 5
Клавиши редактирования
Клавиша Назначение Версия
Ctrl + T   Удалить слово в позиции курсора 5
Ctrl + Y   Удалить текущую строку 5
Ctrl + Shift + Y   Удалить текст от позиции курсора до конца строки 5
Ctrl+N   Вставить строку 5
Ctrl + Shift + I   Увеличить отступ выбранного текста от левого края 5
Ctrl + Shift + U   Уменьшить отступ выбранного текста 5
Ctrl + /   Закомментировать или раскомментировать выделенный блок текста 2005
Ctrl + Shift + R   Начать/завершить запись макроса 1
Ctrl + Shift + P   Воспроизвести макрос 1
Ctrl+K+E   Перевести слово в нижний регистр 5
Ctrl+K+F   Перевести слово в верхний регистр 5
Shift + Навигация   Выделить часть кода (Shift + мышь,вверх, влево, Home и т.д) 1
Shift + Alt + Навигация   Аналогично предыдущей, но выделяет прямоугольную часть кода. 1
Ctrl+O+C   Включить режим блочного выделения 1
Ctrl+O+K   Включить режим поточного выделения 1
Ctrl + Del   Удалить выделенное 1
Ctrl + BackSpace   Стересть слово перед курсором 1
Клавиши навигации по коду
Клавиша Назначение Версия
Ctrl + F   Поиск 3
F3   Продолжение поиска 3
Ctrl + E   Инкрементный поиск. Поиск без диалога - нажимаете комбинацию и начинаете набирать текст. Навигация сама побежит по коду в поисках слова. Если слово найдено, но нужно найти в другом месте - также работает F3. 5
Alt + [   Ищет открывающую скобку для закрывающей скобки, перед которой стоит курсор 5
Alt + ]   Ищет закрывающую скобку для открывающей скобки, перед которой стоит курсор 5
Alt + Влево   Назад по истории перемещений. Возвращает в то место кода, откуда мы перешли. 7
Alt + Вправо   Вперёд по истории перемещений. Результат обратный предыдущей комбинации. Действует только после её использования. 7
Alt + Вверх   Выполняет действие, аналогичное удержанию Ctrl + клик мышкой по слову - происходит переход на его декларацию. Например, установив курсор на словоTLabel и нажав комбинацию, мы попадём туда, где описан класс TLabel. Данный переход помещается в историю перемещений. Вернуться обратно можно по Alt + Влево. 7
Ctrl + Shift + Вверх   Переход между описанием процедуры/функции/метода в и его/её реализацией 5
Ctrl + Shift + Вниз   Аналогично предыдущей 5
Ctrl + Alt + Верх   Переход к реализации предыдущего метода класса (в алфавитном порядке). То есть, просматривая код метода, мы можем перейти к реализации предыдущего (по алфавиту) метода этого же класса 2006
Ctrl + Alt + Вниз   Переход к реализации следующего метода класса (в алфавитном порядке). 2006
Ctrl + Alt + Home   Переход к реализации первого метода класса (в алфавитном порядке) 2006
Ctrl + Alt + End   Переход к реализации последнего метода класса (в алфавитном порядке) 2006
Ctrl + F12   Открывает окно со списком юнитов проекта. 1
Shift + F12   Открывает окно со списком форм 1
Ctrl + Tab   Переход к следующему открытому юниту в порядке следования их на закладках 1
Ctrl + Shift + Tab   Переход к предыдущему открытому юниту в порядке следования их на закладках 1
Ctrl + Alt + F12   Выпадающее меню со списком открытых юнитов 2006
Ctrl + F4   Закрыть текущий юнит 1
Alt + G   Перейти на строку с номером ... 1
Ctrl + Вверх   Скролит экран на строку вверх 1
Ctrl + Вниз   Скролит экран на строку вниз 1
CodeFolding   Ниже клавиши, относящиеся к сворачиванию кода в Delphi 2005 и выше 2005
Ctrl+Shift K+A   Развернуть всё 2005
Ctrl+Shift K+E   Свернуть блок кода 2005
Ctrl+Shift K+U   Развернуть блок кода 2005
Ctrl+Shift K+T   Переключение состояния свёрнутый/развёрнутый 2005
Ctrl+Shift K+O   Выключить CodeFolding 2005
Клавиши общей навигации
Клавиша Назначение Версия
F12   Переключение между окном кода и визуальным редактором формы 3
Alt + F12   Переключение на просмотр формы в текстовом виде (dfm) и обратно 3
F11   Переключиться на Object Inspector 3
Ctrl + Alt + F11   Открыть менеджер проектов 5
Shift + Alt + F11   Открыть окно структуры 2005
Ctrl + Alt + P   Переключиться на палитру инструментов 2005
Ctrl + Shift + B   Открывает на окно эксплорера проекта 5
Ctrl + Alt + V   Открыть окно лога событий 5
Ctrl + Shift + F   Найти в файлах. Производит поиск выражения в файлах проекта, в каталоге и т.п. по выбору. 5
Alt + F7   Переход к предыдущему найденному при помощи Ctrl + Shift + F 5
Alt + F8   Переход к следующему найденному при помощи Ctrl + Shift + F 5
Ctrl + Enter   При нажатии на юните из списка uses, открывает его на новой закладке. При нажатии в другом месте, происходит вызов команды Open главного меню. 5
Alt + F11   Если открыт юнит, эта комбинация покажет диалог добавления юнита, где можно будет выбрать, к каким модулям его добавить 5
Клавиши отладки
Клавиша Назначение Версия
F9   Запуск программы. (неожиданно, правда? :) ) Также продолжает выполнение программы после остановки на брекпоинтах, либо после возникновения исключений. 1
Ctrl + F9   Компиляция программы без запуска 1
Shift + F9   Билд проекта. Билд отличается от компиляции тем, что производит перекомпиляцию всех модулей проекта. Обычная компиляция компилирует только изменённые модули. Также билд увеличивает номер билда в версии программы, если в настройках указана данная опция. 5
Ctrl + Shift + F9   Запуск программы с отключенным отладчиком. Аналогично простому запуску exe файла. Функции отладки отключены. Используется, если вы хотите прогнать программу в рабочем режиме, не останавливаясь на брекпоинтах и обработанных исключениях. 2005
F5   Установить брекпоинт (точку останова). Программа, дойдя до данной точки, остановит выполнение для дальнейших инструкций 1
F4   Запустить программу и приостановить выполнение в заданной точке 1
F8   Выполнить следующий шаг программы без захода в функции/процедуры. 1
F7   Выполнить следующий шаг программы с заходом в функцию/процедуру 1
Shift + F7   Трассировка до следующей выполняемой строки 5
Shift + F8   Выполнить до возврата из функции/процедуры. Программа выполнит все действия и снова остановится после возврата из неё. 5
Ctrl + F2   Прервать выполнение программы 5
Ctrl + F7   Выполнить собственный код дельфи во время отладки. В коде можно модифицировать любые переменные, доступные в данном месте кода. 2005
Ctrl + F5   Если курсор установлен на переменной, то она будет добавлена в Watch List 5
Ctrl + Alt + W   Показывает Watch List. Предназначен для отображения текущего значений переменных и их модификации. 5
Ctrl + Shift + B   Показать список всех расставленных в проекте брекпоинтов с возможностью навигации по ним 5
Ctrl + Alt + S   Показывает стэк вызова, который показывает, откуда мы сюда пришли 5
Ctrl + Alt + L   Открывает окно локальных переменных. В нём отображаются значения всех локальных переменных функции во время отладки 5
Ctrl + Alt + T   Открывает окно тредов. Во время отладки в нём перечислены все треды приложения и их состояние 5
Ctrl + Alt + C   Открывает окно CPU. В этом окне можно смотреть и отлаживать код в ассемблерном представлении. По сути встроенный asm отладчик. Причём, используя F7 можно зайти даже в код API функций и посмотреть, что там и куда идёт. 5


Постоянные читатели

Популярные сообщения