:: Visual Foxpro, Foxpro for DOS
Re: Экспорт в Excel
Vedmak
Автор

Сообщений: 5973
Откуда: CiTY
Дата регистрации: 30.10.2003
lulgu
Прям не тема по программированию, а состязание писателей.

давно слежу


------------------
Говорить стоит лишь для тех, кто слушает.
Ratings: 0 negative/0 positive
Re: Экспорт в Excel
Ydin

Сообщений: 7648
Откуда: Киев
Дата регистрации: 16.12.2005
andrewk
Похоже, не прокатило.
Лулгу?
Ratings: 0 negative/0 positive
Re: Экспорт в Excel
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
andrewk
А получается, из-за этой проблемы придётся в нём менять _mEd_Cut и _mEd_Copy на свои пункты меню
Обычно на это просто забивают. Чего можно ждать от системы писанной 30 лет назад, и уже лет 10 как снятой с поддержки?
Для буфера обмена есть свой АПИ, через него можно узнать какие форматы данных в этом самом буфере имеются, и через него же можно поместить туда текст в правильной кодировке, а точнее в юникоде (а можно и не только текст - можно и rtf и картинки). Почитай МСДН для деталей, если очень уж интересно...

akvvohinc
Перед тем, как что-то скопировать в буфер, ничего не проверяя, запомни значение текущей раскладки, выстави русскую раскладку (ActivateKeyboardLayout), скопируй и верни раскладку.
Конечно же так делать не надо Гораздо правильнее просто через АПИ положить текст сразу в юникоде. Или во всех требуемых форматах, ANSI тоже иногда бывает востребован, а то как сама система "синтезирует" отсутствующие форматы по имеющимся - не всегда получается правильно.


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Экспорт в Excel
akvvohinc

Сообщений: 4224
Откуда: Москва
Дата регистрации: 11.11.2008
andrewk
А получается, из-за этой проблемы придётся в нём менять _mEd_Cut и _mEd_Copy на свои пункты меню с такими шоткатами, откуда вызывать свою процедуру, там получать выделенный текст из активного контрола (а для этого ещё нужно узнать какой контрол активен), проверять/менять раскладку, пихать это в буфер, возвращать раскладку...

Нет, все гораздо проще (на примере Cut):

1) Перемещается системный Cut (совсем убрать нельзя, но, может, кто подскажет, как)
RELEASE PAD _MED_CUT OF _MEDIT
DEFINE PAD _MED_CUT OF _MSM_SYSTM PROMPT 'Original Cut' && тут убрано в меню Help, но в принципе без разницы, куда его "спрятать"

2) Ему на замену создается свой Cut в меню _MEDIT
DEFINE PAD MY_ED_CUT OF _MEDIT PROMPT 'Cut' BEFORE _MED_COPY KEY Ctrl-X,'Ctrl+X'

3) Ему присваивается процедура из 4 строк, которая
- сохранит текущую раскладку
- выставит русскую
- вызовет системный Cut
- вернет сохраненную раскладку

ON SELECTION PAD MY_ED_CUT OF _MEDIT DO Cut_Copy_Proc WITH .T.

Собственно процедура, выполняющаяся по выбору Cut:
FUNCTION Cut_Copy_Proc
LPARAMETERS f_cut
LOCAL layoutold
m.layoutold = kb('r')
= SYS(1500, ICASE(m.f_cut,'_MED_CUT','_MED_COPY'), '_MSM_SYSTM')
= kb(m.layoutold)

Она же может быть использована для Copy.

Функция KB - интерфейс к win32api-функции ActivateKeyboardLayout, которая устанавливает нужную раскладку (здесь параметр 'r' для русской), сохраняя значение предыдущей.

Вот и всё, что, на мой взгляд, нужно сделать, чтобы пункты Cut и Copy всегда работали при русской раскладке.



Исправлено 1 раз(а). Последнее : akvvohinc, 14.02.20 00:57
Ratings: 0 negative/0 positive
Re: Экспорт в Excel
akvvohinc

Сообщений: 4224
Откуда: Москва
Дата регистрации: 11.11.2008
Igor Korolyov
Конечно же так делать не надо. Гораздо правильнее просто через АПИ положить текст сразу в юникоде.

Поясни, пожалуйста.
В некотором объекте (окне) Фокса я выделяю блок текста и нажимаю Ctrl-C.
Перехожу во внешний текстовый редактор и вставляю его туда, при этом хочу, чтобы кириллица осталась кириллицей независимо от того, какая раскладка у меня была в Фоксе в момент нажатия Ctrl-C.

Что, как и в какой момент я должен превратить в юникод?
(если это важно - редактор (Multi-Edit), которым я пользуюсь как для Фокса, так и для прочих нужд, с юникодом не знаком)



Исправлено 1 раз(а). Последнее : akvvohinc, 14.02.20 01:14
Ratings: 0 negative/0 positive
Re: Экспорт в Excel
lulgu

Сообщений: 1838
Дата регистрации: 30.11.2016
Функция SYS(1500, cSystemItemName, cMenuName) позволяет запускать пункты системного меню прямо из кнопок.
Кнопочное меню ничем не хуже BAR-меню.
Ratings: 0 negative/0 positive
Re: Экспорт в Excel
akvvohinc

Сообщений: 4224
Откуда: Москва
Дата регистрации: 11.11.2008
lulgu
Функция SYS(1500, cSystemItemName, cMenuName) позволяет запускать пункты системного меню прямо из кнопок.
Кнопочное меню ничем не хуже BAR-меню.
Это теория или можешь показать работающий пример?
Мне кажется, я когда-то пробовал убирать системные пункты в свое меню, но что-то в таком виде не срасталось, и по SYS(1500, ) пункт в этом случае не отрабатывал.
Ratings: 0 negative/0 positive
Re: Экспорт в Excel
of63

Сообщений: 25256
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
() Я не смог получить полезные свойства от "меню", не хватило обьектности. Меню строил от наития, рытался, чтобы они были прислонены к фоме... Это всё не надо. Операторам (ждевченкам с улицы) это все равно, главное - удобство, и непромашка.
Ratings: 0 negative/0 positive
Re: Экспорт в Excel
lulgu

Сообщений: 1838
Дата регистрации: 30.11.2016
akvvohinc
lulgu
Функция SYS(1500, cSystemItemName, cMenuName) позволяет запускать пункты системного меню прямо из кнопок.
Кнопочное меню ничем не хуже BAR-меню.
Это теория или можешь показать работающий пример?
Мне кажется, я когда-то пробовал убирать системные пункты в свое меню, но что-то в таком виде не срасталось, и по SYS(1500, ) пункт в этом случае не отрабатывал.

Попробуй при запуске убрать системное меню в стек:
PUSH MENU _MSYSMENU
SET SYSMENU TO

а при выходе восстановить его:
POP MENU _MSYSMENU
SET SYSMENU TO DEFAULT
Ratings: 0 negative/0 positive
Re: Экспорт в Excel
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
akvvohinc
Что, как и в какой момент я должен превратить в юникод?
(если это важно - редактор (Multi-Edit), которым я пользуюсь как для Фокса, так и для прочих нужд, с юникодом не знаком)
- Текст который ты хочешь поместить в буфер обмена, который будет записан в блок глобальной памяти, передаваемый в функцию SetClipboardData()
- Тогда, когда ты хочешь его поместить в буфер обмена, примерно между вызовами OpenClipboard()/EmptyClipboard() и SetClipboardData()
SetClipboardData может вызываться несколько раз с указанием различных "форматов" - в т.ч. CF_TEXT, CF_OEMTEXT и CF_UNICODETEXT - естественно для первых двух форматов текст надо не в юникод переводить, а оставлять в ANSI или переводить в OEM кодовую страницу (866 для русского языка).
Как работает мульти-эдит я не в курсе, не в курсе даже вин-приложение это, или досовское "обычные" текстовые редакторы берут для вставки данные в формате CF_UNICODETEXT.


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Экспорт в Excel
akvvohinc

Сообщений: 4224
Откуда: Москва
Дата регистрации: 11.11.2008
lulgu
Попробуй при запуске убрать системное меню в стек:
PUSH MENU _MSYSMENU
SET SYSMENU TO

а при выходе восстановить его:
POP MENU _MSYSMENU
SET SYSMENU TO DEFAULT
Не понял саму идею - с какой целью убирать системное меню.
Системное меню должно быть - ибо пользователи не простят.

Ну, и последовательность восстанавливающих команд мне непонятна:
Зачем восстанавливать меню из стека, чтобы тут же накрыть его меню по умолчанию?
Тут либо первое, либо второе.

А вообще я полагал, что речь идет о создании пользовательского меню одновременно с системным.
То есть я проверял такой способ убрать/скрыть пункты системного меню - убрать их в пользовательское меню, которое пользователь не увидит, но добиться, чтобы SYS(1500) в таком варианте их вызвал, мне не удалось.
Ratings: 0 negative/0 positive
Re: Экспорт в Excel
akvvohinc

Сообщений: 4224
Откуда: Москва
Дата регистрации: 11.11.2008
Igor Korolyov
- Текст который ты хочешь поместить в буфер обмена, который будет записан в блок глобальной памяти, передаваемый в функцию SetClipboardData()
- Тогда, когда ты хочешь его поместить в буфер обмена, примерно между вызовами OpenClipboard()/EmptyClipboard() и SetClipboardData()
Не дошло.

Текст, который я хочу сохранить в буфер, я только что выделил на экране, и настала пора нажать Ctrl-C (или меню Copy).
Что конкретно надо сделать в этот момент для реализации твоего плана?
Ratings: 0 negative/0 positive
Re: Экспорт в Excel
mеdstraх

Сообщений: 275
Дата регистрации: 25.01.2020
Вы меня извините, что я влезаю не по делу.
Но я просто в ахуе удивлен. Люди, которые десятки лет работают в профессии - просят помощи и объяснений
у человека, который в эту профессию заглядывает свысока раз в пятилетку.
У ИК скиллы конечно, все дела, но вам самим то не стремно бежать к папочке "помоги, святой отец, я не знаю как"?
Ладно бы нубы какие-то.
Скажу про себя - если я что-то не могу решить, то это в категории нерешаемых, какие-то позывы (было такое) всегда
разбивались о чужое незнание.
Ratings: 0 negative/0 positive
Re: Экспорт в Excel
akvvohinc

Сообщений: 4224
Откуда: Москва
Дата регистрации: 11.11.2008
Если это, как я полагаю, мне, то ответ прост.

Если я сталкиваюсь с чем-то новым, то вижу два способа решить проблему:
1) ничего не читать, никого не спрашивать, а копать самому пока, быть может, что-то и получится;
2) ну, а между читать/искать где-то самому или спросить у того, кто знает, принципиальной разницы не вижу - в любом случае тебе помог чужой совет или опыт, и разница лишь во времени решения проблемы.

Варианты, когда ты что-то прочитал, а до остального дошел сам - это уже детали. Значит, твоя проблема просто была меньше, чем ты сначала полагал.

mеdstraх
Скажу про себя - если я что-то не могу решить, то это в категории нерешаемых
Если под "решить" ты имеешь в виду действия по варианту 1), то тебе можно только позавидовать - отлично, когда твои проблемы не выходят за пределы твоих знаний.

Если же при этом тебе приходится применять и вариант 2) в любой форме, то я бы не сказал, что эту проблему ты решил сам.
Ratings: 0 negative/0 positive
Re: Экспорт в Excel
mеdstraх

Сообщений: 275
Дата регистрации: 25.01.2020
akvvohinc
Если под "решить" ты имеешь в виду действия по варианту 1), то тебе можно только позавидовать - отлично, когда твои проблемы не выходят за пределы твоих знаний.

Если же при этом тебе приходится применять и вариант 2) в любой форме, то я бы не сказал, что эту проблему ты решил сам.
Ну мне слегка стыдно спрашивать у коллег в интернете, когда вся инфа рядом, только не поленись - найди и подними. Это звучит как "да мне лень чота там искать - пацаны, сделайте это за меня"
Хотя честно признаюсь - пару лет назад мне пришлось просить помощи у коллег по поводу одного нетривиального алгоритма (спасибо Boba, я не забыл), но по итогам все равно запилил сам.
Ratings: 0 negative/0 positive
Re: Экспорт в Excel
akvvohinc

Сообщений: 4224
Откуда: Москва
Дата регистрации: 11.11.2008
mеdstraх
Это звучит как "да мне лень чота там искать - пацаны, сделайте это за меня"
Не всегда это "лень", просто интересов в жизни больше, чем времени на их удовлетворение - чем-то приходится жертвовать.
Если проблемы по всем направлениям решать исключительно по варианту 1, то - да, возможно, удовлетворишь свое эго, но позже можешь пожалеть о потерянном времени из-за выбора не самого эффективного способа обучения.

Да обычно никто и не просит "Сделайте это за меня!".
- "Подскажите, направьте!.."
Тому, кто уже знает, это обычно ничего не стоит (в плане потерянного времени).

Во всяком случае, я, если кому-то помогаю, не думаю, что спрашивающий лентяй (даже в Help по Фоксу надо еще суметь сориентироваться).
Ведь даже в самом элементарном, как тебе кажется, случае, всегда найдется кто-то, кто сталкивается с ним впервые.
Ratings: 0 negative/0 positive
Re: Экспорт в Excel
akvvohinc

Сообщений: 4224
Откуда: Москва
Дата регистрации: 11.11.2008
Цитата:
но по итогам все равно запилил сам
Тут главное, на мой взгляд, быть в ладу самому с собой - если тебе принципиально сделать все "без подсказки", то так и нужно стараться делать.

У меня такого принципа нет, я не буду "страдать морально", если попрошу помощи у конкретного человека, а не анонимно в безликой всемирной паутине, поэтому могу этим пользоваться. Не буду также переживать, если кто-то из моих знакомых узнает, что я попросил "помощь зала" - сейчас, когда, можно сказать, "пенсия ломится", время дороже.

Не думаю, что можно утверждать, что так лучше/правильнее, а так хуже - это индивидуально. Но я бы все же сравнивал эффективность.



Исправлено 1 раз(а). Последнее : akvvohinc, 15.02.20 08:02
Ratings: 0 negative/0 positive
Re: Экспорт в Excel
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
akvvohinc
Не дошло. Текст, который я хочу сохранить в буфер, я только что выделил на экране, и настала пора нажать Ctrl-C (или меню Copy).
Что конкретно надо сделать в этот момент для реализации твоего плана?

Больше половины из примера не нужно, но основные шаги для работы с буфером обмена там описаны, и перевести это в фокс можно без проблем.
Как получить из просто текста текст в UNICODE, полагаю не нужно объяснять.
docs.microsoft.com


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Экспорт в Excel
akvvohinc

Сообщений: 4224
Откуда: Москва
Дата регистрации: 11.11.2008
Igor Korolyov
Больше половины из примера не нужно, но основные шаги для работы с буфером обмена там описаны, и перевести это в фокс можно без проблем.
Спасибо большое!
Попробую разобраться на досуге.
Жаль, что используемый мною вариант в принципе делает то, что мне нужно - когда есть стимул, копается легче.
Ratings: 0 negative/0 positive
Re: Экспорт в Excel
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Просто надо вовремя переходить на более современные и живые системы, где хотя бы поддерживается юникод нормально, в т.ч. и для работы с буфером обмена.
А для антиквариата - если работает костыль, то смысл переписывать на что-то более правильное невелик. Ну по крайней мере это вмешательство (переключение языка ввода для твоего же приложения) не разрушительно - в отличие от генерации экселевского отчёта, которая затирает буфер обмена (при том делает это где-то в середине процесса).


------------------
WBR, Igor
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 17 (Гостей: 17)

© 2000-2024 Fox Club 
Яндекс.Метрика