Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 629 • Страница 1 из 321  2  3  4  5 ... 32  >
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Member
Статус: Не в сети
Регистрация: 12.02.2004
Откуда: г. Новосибирск
Есть HTML-документ и приложение SDI
Вид наследован от CHtmlView, оно умеет само уже смотреть HTML.

Возникла следующая проблема:

Документ состоит из набора таблиц, как сделать так, чтобы каждая таблица не обрезалась при печати, а переносилась на следующую страницу?

Два дня уже :bandhead:

Заранее большой тсенкс :)



Партнер
 

Member
Статус: Не в сети
Регистрация: 12.02.2004
Откуда: г. Новосибирск
Впринципе, я уже сделал разбиение на страницы (Каждая страница представляет собой HTML-файл), осталась только проблема - как их распечатать?

Неужели никто не поможет :oops:


 

Member
Статус: Не в сети
Регистрация: 12.02.2004
Откуда: г. Новосибирск
Один из вариантов (кривоватый) но пока лучше никто не предложил ;)
В каком-нить обработчике типа OnReportPrint:
Код:
   for(int i=0;i<PageCount;i++) {
         PageName = stTempDir;
         PageName.AppendFormat("\\Page_%d.htm", i);
         IsPrint = true;
         m_bLoaded = false;
         Navigate2(PageName);
         while(!m_bLoaded) {
            theApp.PumpMessage();
         }
   }
   Navigate2(m_stMainPage);


Когда закончили загрузку страницы:
Код:
void CReportMakerView::OnNavigateComplete2(LPCTSTR strURL)
{

   if(IsPrint) {
      ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER, NULL, NULL);
      IsPrint = false;
      m_bLoaded = true;
   }
   CHtmlView::OnNavigateComplete2(strURL);
}


 

Member
Статус: Не в сети
Регистрация: 17.09.2003
Откуда: UA г.Донецк
Есть класс окна описанный в MS Visual c++ 6.0
Код:
 
class CWin:public CFrameWnd
{
public:
  int speed, green_time, red_time, flag;
  CMenu *pMenu;
  CToolBar   my_ToolBar;
  CStatusBar m_wndStatusBar;
   CWin()
   {
   Create(0, "");
   pMenu=new CMenu;
   pMenu ->LoadMenu(IDR_MENU1);
   SetMenu(pMenu);
   m_wndStatusBar.Create(this);
   my_ToolBar.Create(this);
                      // ñîçäàòü ïàíåëü èíòñòðóìåíòîâ
   my_ToolBar.LoadToolBar(IDR_EXIT);                   // âçÿòü åå èç ðåñóðñîâ
   my_ToolBar.SetBarStyle(my_ToolBar.GetBarStyle()|CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);    // íàñòðîèòü ñòèëè
   my_ToolBar.EnableDocking(CBRS_ALIGN_ANY);                // ìîæíî ëè ïàíåëè øâàðòîâêà
   EnableDocking(CBRS_ALIGN_ANY);                   // ôóíêöèè îêíà äëÿ óïðàâëåíèÿ ïàíåëüþ
   DockControlBar(&my_ToolBar);

//   m_wndStatusBar.Create(this);
}


void OnPaint();
void work();
afx_msg void OnContextMenu(CWnd*, CPoint);
void input();
void about();
void quit();
DECLARE_MESSAGE_MAP()
};
BEGIN_MESSAGE_MAP (CWin, CFrameWnd)   // îïèøåì êàðòó ñîîáùåíèé
   ON_WM_PAINT()
   ON_WM_CONTEXTMENU()
   ON_COMMAND (ID_START, work)
    ON_COMMAND (ID_INPUT, input )
   ON_COMMAND (ID_ABOUT, about )
   ON_COMMAND (ID_QUIT, quit )
   ON_COMMAND(ID_FILE_CLOSE,quit)
   ON_COMMAND(ID_ABOUT_TB,about)
END_MESSAGE_MAP()

1. Ести цикл моделирования, движения автомобиля. нужно на кaждом проходе этого цикла выводить промежуточный результат в область окна. Подскажите как это сделать
2. как сделать запуск этого цикла во нажатию кнопки на тулбаре или выборе пункта меню. (В карте сообщений кнопка описана как ID_START).

_________________
Debian Lenny/Sid
при установке линукс не пострадал ни один пингвин, полегли все дятлы


 

Member
Статус: Не в сети
Регистрация: 15.04.2004
Откуда: Москва
Ты же сам задал, что при нажатии ID_START будет вызываться метод work.
А для вывода промежуточных значений в методе work используй пару GetMessage/DispatchMessaage для отрисовки

_________________
Цель жизни - d20 по жизни...


 

Member
Статус: Не в сети
Регистрация: 16.09.2003
Откуда: Питер
И не забудь про SendMessage - посылать сообщения своему окну для перерисовки с указанием новых параметров движения твоего авто :)
А вообще переходи на WinAPi, мне оно больше нравицца нежели MFC.

_________________
реальность происходящего обманчива...


 

Member
Статус: Не в сети
Регистрация: 15.04.2004
Откуда: Москва
Саша-I
SendMessage тебя не спасет, т.к. оно только ставит сообщение в очередь, а Get/Disptach это очередь обрабатывают.

_________________
Цель жизни - d20 по жизни...


 

Member
Статус: Не в сети
Регистрация: 17.09.2003
Откуда: UA г.Донецк
Спасибо все сделал. еще один вопрос.При работе функции используеться цик, довольно таки большой, и естестыенно во время рабрты цикла окно подвисае, как этого избежать.
Саша-I
Цитата:
А вообще переходи на WinAPi, мне оно больше нравицца нежели MFC.

C удовольствием, но требуют MFC.

_________________
Debian Lenny/Sid
при установке линукс не пострадал ни один пингвин, полегли все дятлы


 

Member
Статус: Не в сети
Регистрация: 15.04.2004
Откуда: Москва
_DiseL_
Опять же, обрабатывай сообщения, например в конце цикла, или запускай его потоком.

_________________
Цель жизни - d20 по жизни...


 

Member
Статус: Не в сети
Регистрация: 12.02.2004
Откуда: г. Новосибирск
Есть еще один способ - стандартный тег
Например:
Код:
 <br style='mso-special-character:line-break; page-break-before:always'>

Но он глючный... Косяк проявляется следующим образом:

1. Рисуем таблицу
2. Вставляем после неё тэг
3. Рисуем такю же таблицу

Так вот, если размер таблицы (похоже в байтах) превышает какой-то предел (преедл зависит как от количества сток, так и от количества столбцов. У меня печатается таблица либо 5*30 либо 4*40 столбцы/строки ), то документ отказывается печататься (принтер говорит что какая-то ошибка)!
В предварительном просмотре все выглядит вполне нормально!

Кто-нить встречался с этим косяком?!


 

Заблокирован
Заблокирован
Статус: Не в сети
Регистрация: 03.09.2004
Откуда: Москва
Такая проблемка. Пишу небольшую программку на API. Так вот мне очень нужно вызвать стандартный диалог OpenFile или SaveAs. Как все просто в Builder и MFC, а тут ни в какую не хочет работать. Сделал все, как написано в MSDN, а все равно не вызывается этот диалог. :weep: Может тут мне кто поможет.

P.S.Если фрагмент с работающим исходным кодом, вообще отлично. :roll:


 

Member
Статус: Не в сети
Регистрация: 14.03.2004
Откуда: Москва
Цитата:
пля, извини, чувак, но мы тут не ясновидцы и не экстрасенсы. Может, ты все-таки приведешь код, а?

Цитата:
Гюльчитай, открой кусек кода, а?

_________________
ФИЗТЕХ- рулез, ФАКИ - сила, Кванты тоже хорошо


 

Babrick
Могу только на Delphi подсказать, если тебе надо...

Код:
procedure ShowOpenDlg;
Var
  OpenDlg: TOpenDialog;
begin
  OpenDlg:=TOpenDialog.Create(Self);
  OpenDlg.Filter:='Текстовый файлик (*.txt)|*.txt';
  If OpenDlg.Execute then ShowMessage(OpenDlg.FileName);
end;


 

Member
Статус: Не в сети
Регистрация: 24.09.2003
Откуда: г. Кострома
вот так на мфс, хотя наверно тебе не это нужно
это диалог для сохранения файла
CFileDialog fd(FALSE,"dat",NULL,OFN_OVERWRITEPROMPT,"*.dat",this);
if(fd.DoModal() == IDOK)
{

//делаем что нужно
}

для открытия нужно так:
CFileDialog fd(FALSE,"dat",NULL,OFN_OVERWRITEPROMPT,"*.dat",this);

напиши кусок кода который не работает


 

Advanced member
Статус: Не в сети
Регистрация: 09.06.2003
Откуда: USSR
Babrick 110% ты просто не правильно его вызываеш
вот кусок из моей одной проги, давно писал, просто нашел на винте
Код:
   OPENFILENAME ofn;  // older version
   memset(&ofn, 0, sizeof(ofn));
   CString filename;
   char newfile[255];
   m_Edit2.GetWindowText(filename);   
   filename.Replace("\"","");
   ofn.lStructSize = sizeof(ofn);
   ofn.hwndOwner = m_hWnd;
   ofn.lpstrFile = filename.GetBuffer(255);
   ofn.nMaxFile = 255;
   ofn.Flags=OFN_FILEMUSTEXIST;

   if (GetOpenFileName(&ofn))
   {
      GetShortPathName(ofn.lpstrFile,newfile,255);
      m_Edit2.SetWindowText(newfile);
   }



 

Заблокирован
Заблокирован
Статус: Не в сети
Регистрация: 03.09.2004
Откуда: Москва
Ray Adams странно, скпировал я этот кусок кода и все равно не работает. Я в отчаянии :bandhead:


 

Advanced member
Статус: Не в сети
Регистрация: 09.06.2003
Откуда: USSR
Babrick Код в студию! :)


 

Заблокирован
Заблокирован
Статус: Не в сети
Регистрация: 03.09.2004
Откуда: Москва
Все, мне недавно прислали рабочий код и вот что выяснил: если я инициализирую структуру так, то все работает

OPENFILENAME ofn;
char FileName[100];
сhar szFilters[80]="GrafFiles\0*.grf\0";
char szFileTitle[15];
FileName[0]='\0';

memset(&ofn,0,sizeof(OPENFILENAME));
ofn.lStructSize=sizeof(OPENFILENAME);
ofn.hwndOwner=hWnd;
ofn.lpstrFilter=szFilters;
ofn.nFilterIndex=1;
ofn.lpstrFile=FileName;
ofn.nMaxFile=(int)sizeof(FileName);
ofn.lpstrFileTitle=szFileTitle;
ofn.nMaxFileTitle=sizeof(szFileTitle);
GetOpenFileName(&ofn);

Я нашел только одно отличие между присланным мне кодом, и тем кодом который написал я, а именно

char *str;
str = new char[200];
.....
ofn.lpstrFile=str;
ofn.nMaxFile=(int)sizeof(str);

Еще позже выяснилось, что достаточно просто закомментировать строчку str = new char[200]; чтобы все заработало. :insane: Так вот, не могу понять, в чем же собственно дело? Что страшного в том, чтобы под указатель выделить память для целого массива. Какие будут мнения, господа программисты?


 

Member
Статус: Не в сети
Регистрация: 14.03.2004
Откуда: Москва
(int)sizeof(str)=4
А не длина строки. Ботай С ;-)

_________________
ФИЗТЕХ- рулез, ФАКИ - сила, Кванты тоже хорошо


 

Заблокирован
Заблокирован
Статус: Не в сети
Регистрация: 03.09.2004
Откуда: Москва
nickyoz :hi:
И тут физтехи :beer:

А вот и нифига. Даже если я напишу ofn.nMaxFile=200; то все равно ничего не изменится, по прежнему работать не будет.


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 629 • Страница 1 из 321  2  3  4  5 ... 32  >
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan