Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
 Аватар для Aleator
102 / 87 / 17
Регистрация: 04.05.2011
Сообщений: 1,330

Перевод из Delpli try, finally и Clipboard

30.09.2015, 18:19. Показов 1351. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Прошу помощи для проверки (и возможно исправления) переведённой мной функции из Delphe:
Исходный код:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
procedure THexDump.PasteFromClipboard;
var
 MyHandle: THandle;
 TextPtr: PChar;
 MyString:string;
 Addr,i:integer;
begin
 Changed := True;
 Addr := CursorAddress shr 1;
 if WordMode then Addr := Addr and $1FFFFE;
 try
  MyHandle := Clipboard.GetAsHandle(CF_TEXT);
  TextPtr := GlobalLock(MyHandle);
  i := 0;
  while True do
  begin
   if TextPtr[i] = #0 then break;
   if TextPtr[i] <= ' ' then
   begin
    i := i + 1;
    Continue;
   end
   else
   begin
    MyString := '$'+TextPtr[i];
    i := i + 1;
    if((TextPtr[i] = #0)or(TextPtr[i] <= ' ')) then
    begin
     break;
    end;
    MyString := MyString + TextPtr[i];
    Buffer[Addr] := StrToInt(MyString);
      Mismatch[Addr] := False;
    addr := addr + 1;
    if addr > hdEndAdr then break;
    i := i + 1;
   end;
  end;
  GlobalUnlock(MyHandle);
 finally
 end;
 OnChange;
 Paint;
end;
Мой перевод:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
void __fastcall THexDump::PasteFromClipboard() {
   THandle MyHandle;
   PChar TextPtr;
   AnsiString MyString;
   int Addr,i;
 
   Changed = true;
   Addr = CursorAddress >> 1;
   if (WordMode)
      Addr = Addr & 0x1FFFFE;
 
   Clipboard()->Open();
    try {
       MyHandle = Clipboard()->GetAsHandle(CF_TEXT);
      TextPtr = (PChar)GlobalLock((HGLOBAL)MyHandle);
      //  MyHandle = Clipboard->GetAsHandle(CF_TEXT);
       // TextPtr = GlobalLock(MyHandle);
 
       i = 0;
       while (true) {
           if (TextPtr[i] == '\0')          // #0
               break;
           if (TextPtr[i] <= ' ') {
               i = i + 1;
               continue;
           }
           else {
               MyString = "$" + TextPtr[i];
               i = i + 1;
               if ((TextPtr[i] == '\0')|(TextPtr[i] <= ' ')) {
                   break;
               }
               MyString = MyString + TextPtr[i];
               Buffer[Addr] = StrToInt(MyString);
               Mismatch[Addr] = false;
               Addr = Addr + 1;
               if (Addr > hdEndAdr)
                   break;
               i = i + 1;
           }
      }
      GlobalUnlock((HGLOBAL)MyHandle);
       // GlobalUnlock(MyHandle);
       // _finally
    
    }
    catch (...) {
      Clipboard()->Close();
      throw;
   }
   Clipboard()->Close();
 
    OnChange();
    Paint();
}
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.09.2015, 18:19
Ответы с готовыми решениями:

Класс Clipboard - ошибка «Requested Clipboard operation did not succeed»
Пытаюсь скопировать текст программно таким образом: Clipboard.SetText(&quot;something&quot;) Вместо выполнения поручения, он напрочь отказывается...

Ошибка при работе с Clipboard: "Сannot open clipboard. Отказано в доступе."
Хотел написать программу для автоматической замены текста в буфере обмена, но при обращении к буферу получаю ошибку &quot;Сannot open...

Try finally vs using
Всем привет, сегодня на работе обсуждали следующее: Что лучше использовать? п.с. при условии что метод Dispose не фаерит ошибку. ...

6
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33403 / 21513 / 8236
Регистрация: 22.10.2011
Сообщений: 36,914
Записей в блоге: 12
30.09.2015, 20:33
Лучший ответ Сообщение было отмечено Aleator как решение

Решение

Ни про открытие ни про закрытие ClipBoard-а в коде на Дельфи ничего нет. Дословно - так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
void __fastcall THexDump::PasteFromClipboard()
{
    THandle MyHandle;
    PChar TextPtr;
    AnsiString MyString;
    int Addr, i;
 
    Changed = true;
    Addr = CursorAddress >> 1;
    if (WordMode)
        Addr = Addr & 0x1FFFFE;
 
    try
    {
        MyHandle = Clipboard()->GetAsHandle(CF_TEXT);
        TextPtr = (PChar)GlobalLock((HGLOBAL)MyHandle);
 
        i = 0;
        while (true)
        {
            if (TextPtr[i] == '\0')
                break;
            if (TextPtr[i] <= ' ')
            {
                i = i + 1;
                continue;
            }
            else
            {
                MyString = "$" + TextPtr[i];
                i = i + 1;
                if ((TextPtr[i] == '\0') || (TextPtr[i] <= ' ')) // Внимательнее!!! Это логическая операция
                {
                    break;
                }
                MyString = MyString + TextPtr[i];
                Buffer[Addr] = StrToInt(MyString);
                Mismatch[Addr] = false;
                Addr = Addr + 1;
                if (Addr > hdEndAdr)
                    break;
                i = i + 1;
            }
        }
        GlobalUnlock((HGLOBAL)MyHandle);
    }
    __finally
    {
 
    }
    OnChange();
    Paint();
}
1
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
02.10.2015, 15:20
А понту в пустой секции __finally ? это не верно, по крайней мере не дословно.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33403 / 21513 / 8236
Регистрация: 22.10.2011
Сообщений: 36,914
Записей в блоге: 12
02.10.2015, 15:37
Это то, что было в Дельфийской версии. Если компонент работает - не вижу смысла ничего менять.
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
02.10.2015, 15:45
В дельфийской версии finally не пустой.

Delphi
1
2
3
4
5
finally
 end;
 OnChange;
 Paint;
end;
0
Модератор
 Аватар для D1973
9928 / 6465 / 2457
Регистрация: 21.01.2014
Сообщений: 27,420
Записей в блоге: 3
02.10.2015, 18:39
Он там как раз пустой
Delphi
1
2
3
4
try
 //там много чего
finally
end;
А вот это
Delphi
1
2
OnChange;
Paint;
Это уже вне блока try... finally
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
02.10.2015, 19:41
А да точно, ну тогда изначальный код беспонтовый.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.10.2015, 19:41
Помогаю со студенческими работами здесь

Try finally
try ... exit; ... finally сообщение end; если случится exit то я увижу сообщение то что в finally? а если вместо exit...

Ругается на finally
Здрасьте. Работаю с сетью. Стянул с офф. сайта пример для получания stream-потока данных с сервера. Тупо скопировал код и вставил в...

try/finally и делегат
есть примерный код boolean status = m_device.start(); if (status) { m_timer...

Конструкция try..except..finally
Здравствуйте форумчане. С наступившим всех. Сейчас занимаюсь изучением языка питон. Прочитал про данную конструкцию, только не очень...

Зачем нужен finally?
Я знаю для чего используется finally, но я не понимаю зачем использовать его если можно после try{} catch(Exception e){} просто написать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru