Современные решения

для защиты Windows приложений

и восстановления исходного кода

Visual Basic 6.0 - resorce file


Re: resorce file

From: Alexander Asyabrik <belmis [@] mail.belpak.by>


Привет, Andrey.

Вы, было дело, писали 5 ноября 2003 г., 14:34:


AP> Есть у меня файл ресурсов с тремя таблицами, в которых содержится набор

AP> записей на трех языках - английском, русском и украинском. При запуске проги

AP> из среды разработки выбор языка из файла ресурсов в зависимости от

AP> региональных настроек происходит корректно. Hо при запуске уже откомпиленной

AP> программы независимо от рег. настроек у меня всегда загружается англоязычная

AP> версия.


Странно, но у меня всегда было в точности наоборот :)
Hадо проверить, сохраняется ли структура ресурсов в откомпилированном
файле. Когда-то я пытался Manifest(24) цеплять к VB5 проекту, так в
экзешнике всегда оказывались некорректные данные для такого ресурса.

AP> Если кто-то занимался локализации прог на ВБ с испльзованием файла ресурсов,

AP> подскажите, плиз, где грабли. Hе против буду послушать об альтернативных

AP> вариантах обеспечения локализации приложений.


Похоже, что нормальный (с указанием языка ресурса) способ для VB и
является нестандартным. Документация предлагает только способ прямого
указания языка в UI (загрузка ресурсов с разными номерами).
Books Online для пятой версии VB содержит пример. Он несложный и я
позволю себе его процитировать (почти все тут уже с VB6).

=====================8<==============================================

This sample application has been designed to illustrate support for
resource files in Visual Basic. The application contains three forms,
a standard module, and a resource file. When you run the Automated
Teller Machine (Atm.vbp) sample application, an opening screen lets
you perform a bank transaction in one of several languages, including
German, French, Italian, and Spanish. The following code from the
FrmInput.frm file loads resources stored in the Atm32.res file, which
contains the localized strings for all languages.
Sub Form_Load()
imgFlag = LoadResPicture(I, vbResBitmap)
Caption = LoadResString(I)
lblPINCode = LoadResString(1 + I)
fraAccount = LoadResString(2 + I)
optChecking.Caption = LoadResString(3 + I)
optSavings.Caption = LoadResString(4 + I)
lblAmount = LoadResString(5 + I)
cmdOK.Caption = LoadResString(6 + I)
SetCursor cmdOK
End Sub

Sub cmdOK_click()
' Display a process message.
MsgBox LoadResString(7 + I)
frmAmountWithdrawn.Show vbModal
Unload Me
End Sub

At run time, this code reads the appropriate section of the resource
file, based on an offset that is initialized when the user makes a
language selection in the opening screen. The offset is a public
variable declared in the standard module that indicates how far from a
starting point a particular item is located. In the ATM sample
application, the offset variable is I.
In the resource file, resource identifiers 16 through 47 are reserved
for English, 48 through 79 are reserved for French, 80 through 111 are
reserved for German, and so on. Each language contains the localized
entries that make up the data block of the sample application. This
block currently contains the eleven resources that are particular to
each language.
This sample application, which contains several data blocks,
introduces an alternative to a language-specific resource file using
only one data block. Depending on the nature of the application you
are developing, you may consider using one resource file per language
version of your application or a single resource file containing all
the localized data blocks.
The design of the Automated Teller Machine sample application presents
several advantages beyond the ones outlined earlier in the chapter:
T The application can grow in scope by providing service in more
languages. Simply add the same data block to the resource file and
localize it as needed. If you decide to add a language, you may have
to add a button to the opening screen.
T The application can grow in size if you want to extend your
application by, for instance, allowing the ATM users to make deposits.
Simply allow for wider identifier ranges (160 for example) for each
language in the resource file. Currently, the identifiers range from
16 to 47, 48 to 79, and so on.

=====================8<==============================================

PS Помнится, когда-то я интересовался настройками для украинской винды
и вроде бы выяснил, что для ресурсов нет такого языка, как украинский.
Или я чего путаю?

--
С уважением, Alexander
5:42:19 PM
* Origin: Talk.Mail.Ru (2:5020/400)

Re: VB6: Events & CreateObject()

Мы где-то виделись, A.?

05 Nov 03 16:14:26 в RU.VISUAL.BASIC A. Skrobov -> мне:


СТ>>> Подскажите пожалуйста, как к объекту, созданному при помощи

СТ>>> функции Set MyObj = CreateObject("MyLibName.MyClassName")

СТ>>> приделать обработчик события?

DK>> Dim WithEvents MyObj As MyLibName.MyClassName

СТ>>> Раннее связывание не предлагать :-)

DK>> Hе будем.

AS> Мне показалось, или ты именно его и предложил?


Hе показалось. "Это был тонкий-тонкий английский юмор". (с)

Однако, вернемся к нашим баранам. Чтобы имплементировать dispinterface, нужно
либо иметь соответствующий интерфейс в референсах (но это опять будет
аналогично раннему связыванию), либо перехватывать IDispatch::Invoke. Как
реализуется последнее, можно посмотреть в примере extender hook с сайта edanmo
(www.domaindlx.com/e_morcillo).

Всего хорошего!
Дмитрий Козырев aka Master

* Origin: Дорогу осилит идущий. (2:5023/11.148)

MSFlexGrid, del row ?

[_**_] Зуб за зуб , за два - скулу ,не так ли All ?
/_np:JetAudio on!_/
_*========================================================*_
Подскажите как в MSFexGrid удалить определенную строку ?
Где можно почитать на эту тему ?
/_========================================================_/
[/__/] Пока, All, счастливого тебе коннекта ! ...
* Origin: www.yahooeyoo.com (2:5012/2.241)

Re: VB6: Events & CreateObject()

From: "A. Skrobov" <tyomitch [@] r66.ru>


Hello, Dmitriy!
You wrote in conference fido7.ru.visual.basic to "A.Skrobov" <fido7.ru.visual.basic [@] talk.ru>to A. Skrobov on Wed, 05 Nov 2003

20:03:06 +0300:

СТ>>>> Раннее связывание не предлагать :-)

DK>>> Hе будем.

AS>> Мне показалось, или ты именно его и предложил?

DK> Hе показалось. "Это был тонкий-тонкий английский юмор". (с)

;-))

DK> Однако, вернемся к нашим баранам. Чтобы имплементировать dispinterface,

DK> нужно либо иметь соответствующий интерфейс в референсах (но это опять будет

DK> аналогично раннему связыванию), либо перехватывать IDispatch::Invoke.

DK> Как реализуется последнее, можно посмотреть в примере extender hook с сайта

DK> edanmo (www.domaindlx.com/e_morcillo).

Да ну! Просто заимплементить IConnectionPointContainer и всё. Сам как-то от нечего делать такое писал. Правда, так и не заработало
:-)


With best regards, A. Skrobov. E-mail: tyomitch [@] r66.ru
--
* Origin: Talk.Mail.Ru (2:5020/400)

Re: VB6: Events & CreateObject()

Мы где-то виделись, A.?

05 Nov 03 22:04:02 в RU.VISUAL.BASIC A. Skrobov -> мне:


DK>> Однако, вернемся к нашим баранам. Чтобы имплементировать dispinterface,

DK>> нужно либо иметь соответствующий интерфейс в референсах (но это опять

DK>> будет аналогично раннему связыванию), либо перехватывать

DK>> IDispatch::Invoke. Как реализуется последнее, можно посмотреть в примере

DK>> extender hook с сайта edanmo (www.domaindlx.com/e_morcillo).

AS> Да ну! Просто заимплементить IConnectionPointContainer и всё. Сам как-то

AS> от нечего делать такое писал.


Поясни, пожалуйста. Я думал, что при подключении обработчика ивентов
передается интерфейс IDispatch, в который и уходят вызовы событий. А на самом
деле как?

А еще я думал, что IConnectionPointContainer нужен для объекта, который
генерирует ивенты, а не наоборот. ;)

AS> Правда, так и не заработало :-)


;)

Всего хорошего!
Дмитрий Козырев aka Master

* Origin: Дорогу осилит идущий. (2:5023/11.148)

двоичное представление числа и сдвиг

Привет, Genrih!

05 Nov 03 00:08, Genrih Rudenok wrote to All:

GR> какие есть варианты преобразования десятичного или 16тиричного числа в

GR> двоичное представление ? туда и обратно

перебирать 1, 10, 100 и т.д. в двоичной и пробовать вычитать от переводимого
числа. если получается вычесть - пишем 1, в противном случае 0.

GR> и еще есть число десятичное или 16тиричное - как по умному сделать

GR> сдвиг бинарный - потипу: если смотреть в двоичном то выглядит

GR> так 01110001 -> 00111000 -> 00011100 -> 00001110 -> 00000111 ->

GR> 00000011 -> 00000001

деление на 2 - сдвиг вправо
умножение на 2 - сдвиг влево

С уважением, Nick!
np: кулеры, винты, уличный шум, etc.

* Origin: Ловись коннект большой и маленький! (2:5038/15.1)

Ошибка программы

Рад приветствовать тебя, All!

Применительно к Access, что необходимо для _появления_ сообщения о недопустимости операции с дальнейшим выходом из программы?


Victor

* Origin: И дым копченостей нам сладок и приятен (2:5030/1247.16)

Re: хранить имя формы в переменной - уточнения

From: "Александр 'SUre' Подкопаев" <podkopaev [@] lsid.ru>



"Dmitriy Kozyrev" <Dmitriy.Kozyrev [@] p148.f11.n5023.z2.fidonet.org>

сообщил/сообщила в новостях следующее:
news:824989704 [@] p148.f11.n5023.z2.ftn...
> Мы где-то виделись, Александр?

>

> 05 Nov 03 11:15:15 в RU.VISUAL.BASIC Александр 'SUre' Подкопаев -> All:

>

> АSП> Осваиваю язык, и возник вот такой вопрос - можно ли положить имя

формы в
> АSП> переменную, чтобы потом через эту переменную можно было работать с

> АSП> формой? Hу, что-то типа ссылочной переменной в С - переменная одна, а

> АSП> ссылаться может на разные объекты(формы).

>

> Dim f As Form

> Set f = frmMain

> f.Visible = False

> Set f = frmDiagram

> f.Visible = True

Спасибо за пример, он работает, но не так, как бы мне хотелось.

Hашел в тырьнете пример практически того, что мне нужно -
Form1 содержит список, тыкаешь мышой - открывается форма.
куски кода:
Private Sub Form_Load()
List1.AddItem ("Form1")
List1.AddItem ("Form2")
End SUb

Private Sub List1_Click()
Dim frm As Form

Set frm = forms(List1.ListIndex)
frm.Show
End Sub

Пример работает, если при старте программы я делаю так:
Form2.Show
Form2.Hide
Form1.Show

Иначе ругается при попытке открыть Form2 - складывается впечатление, что
forms содержит только один элемент - активную форму(Form1).
Толи я что-то не понял, толи предварительно нужно в коллекцию froms загнать
все формы?
А почему их там нет?

Что мне хотелось бы: есть набор форм, есть последовательность вызова форм,
меняющаяся от контекста.
Как я хотел сделать - массив с именами форм + массив, описывающий
последовательность их вызова (типа, закрыли форму ?1 - открыть форму ?8).

Пример выше доказывает выполнимость, но нужно каким-то образом
проинициализировать коллекцию forms.
Как - непонятно?

Вообще-то, пишется все на Embedded VisualTools 9eVB 3.0), может быть, это
его "специфика" ?
Если здесь офтопик, куда пойти?
Мне доступна еще ru.embedded, но там, похоже, одни "паяльники".
* Origin: Togliatti Telecom News Server (2:5020/400)

Re: MSFlexGrid, del row ?

Мы где-то виделись, Michail?

05 Nov 03 22:41:22 в RU.VISUAL.BASIC Michail Bocharov -> All:


MB> Подскажите как в MSFexGrid удалить определенную строку ?


.RemoveItem

По названию можно было догадаться. ;)

MB> Где можно почитать на эту тему ?


В MSDN смотрел? По-моему, документацию по FG они туда включили.

Всего хорошего!
Дмитрий Козырев aka Master

* Origin: Дорогу осилит идущий. (2:5023/11.148)

Re: Ошибка программы

Мы где-то виделись, Victor?

06 Nov 03 09:53:00 в RU.VISUAL.BASIC Victor Tikhomirov -> All:


VT> Применительно к Access, что необходимо для _появления_ сообщения о

VT> недопустимости операции с дальнейшим выходом из программы?


Hаверное, какая-либо недопустимая операция.

Всего хорошего!
Дмитрий Козырев aka Master

* Origin: Дорогу осилит идущий. (2:5023/11.148)