![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Потоки [D6]
evgenij_ © (2006-08-10 13:58:00)Помогите плиз !
Такая проблемка :
Работаю с ОЛЕ => Excel := CreateOleObject('Excel.Application'); и т.д.
все хорошо, но во время работы эхеля :) моя прога типа висит.
Шо рабить? поток или как по другому? Может кто знает где можна почитать хорошую хелпу по потокам.
сенькс.
Сергей М. (2006-08-11 10:04:00) [1]
> Усли убрать Sheet.PrintPreview
Дай догадаюсь: при этом принтер по умолчанию - сетевой ?)
evvcom (2006-08-11 08:55:00) [2]И все же задумайся над:
> [11] Сергей М. © (10.08.06 16:12)
> Ужас !!
> Грабли на граблях)
> Фтопку такой код)
и
> [15] evvcom © (10.08.06 16:50)
потому как, если в DataSet у тебя будет не 3, а несколько тысяч строк, то вернешься опять к сабжевому вопросу.
evgenij_ (2006-08-10 17:30:00) [3]Да. Я уже вроде нашел.Усли убрать Sheet.PrintPreview; то нормалёк-зничит
PrintPreview хавает..
evvcom (2006-08-10 17:25:00) [4]> [19] evgenij_ (10.08.06 17:19)
Какое управление передает? По твоему коду до конца метода шагает? Если всего 3 строки, то проверить это несложно.
evgenij_ (2006-08-10 17:19:00) [5]
> А отладчик чего кажет?
он нормально передает управление ехелю
evvcom (2006-08-10 17:08:00) [6]> [17] evgenij_ (10.08.06 17:06)
А отладчик чего кажет?
Похоже последний пост сегодня, пора домой.
evgenij_ (2006-08-10 17:06:00) [7]так виснет уже когда отчет сформировался-там три строки в базе ёпрст и висит пока ехель не закрою- при чем тут 10 000 строк, ручками...
evvcom (2006-08-10 16:52:00) [8]> [14] evgenij_ (10.08.06 16:43)
> да не таскается блин
Значит не во все циклы вставил.
evvcom (2006-08-10 16:50:00) [9]> [10] evgenij_ (10.08.06 16:03)
И попробуй еще так: открываешь свой "ехель" через проводник, без своего приложения, и поле ну пусть в 10 столбцов и 10 000 строк по одной ячейке выделяешь и производишь форматирование. Всё руками! А потом еще и значения какие-нибудь вколоти таким же образом. А мы подождем... Годик, другой...
Попробовал, нет? Хотя бы пару строк? Как ты думаешь, твоей проге намного легче?
evgenij_ (2006-08-10 16:43:00) [10]да не таскается блин
Сергей М. (2006-08-10 16:29:00) [11]Ой врешь)
Теперь ты можешь как минимум потаскать мышом свою форму по столу.
evgenij_ (2006-08-10 16:18:00) [12]
> Application.Processmessages - удивись изменениям в интерфейсе)
чето воз и ныне там
Сергей М. (2006-08-10 16:12:00) [13]Ужас !!
Грабли на граблях)
Фтопку такой код)
ну да ладно ... работает и фиг с ним) ...
В тела всех фигурирующих в коде циклов вставь Application.Processmessages - удивись изменениям в интерфейсе)
evgenij_ (2006-08-10 16:03:00) [14]Гдето так
Excel := CreateOleObject('Excel.Application');
try
Excel.SheetsInNewWorkbook := 1;
WorkBook :=Excel.WorkBooks.Open(Path+'Templates\nakl.xlt');
Sheet := WorkBook.WorkSheets[1];
Sheet.Cells.VerticalAlignment := $FFFFEFF4;// xlCenter
with tmp do
try
DisableControls;
Row := 10;
Col := 2;
for i := 0 to DBGrid1.Columns.Count-1 do
if DBGrid1.Columns[i].Visible then
begin if ((i=3)or(i=4)) then Continue;
Sheet.Cells[Row, Col] := DBGrid1.Columns[i].Title.Caption;
Sheet.Cells[Row, Col].Borders[L_Top].LineStyle:= 1;
Sheet.Cells[Row, Col].Borders[L_Top].Weight := 3;
Sheet.Cells[Row, Col].Borders[L_Bot].LineStyle:= 1;
Sheet.Cells[Row, Col].Borders[L_Bot].Weight := 3;
Sheet.Cells[Row, Col].Borders[L_Left].LineStyle:= 1;
Sheet.Cells[Row, Col].Borders[L_Left].Weight := 3;
Sheet.Cells[Row, Col].Borders[L_Right].LineStyle:= 1;
Sheet.Cells[Row, Col].Borders[L_Right].Weight := 3;
Inc(Col);
end;
Inc(Row);
Last;
while NOT BOF do
begin
Col := 2;
for i := 0 to DBGrid1.Columns.Count-1 do
if DBGrid1.Columns[i].Visible then
begin
if ((i=3)or(i=4)) then Continue;
v := DBGrid1.Columns[i].Field.Value;// Fields[i].Value;
Sheet.Cells[Row, Col] := VarToStr(v);
//Sheet.Cells[Row, Col].Borders[L_Top].LineStyle:= 1;
//Sheet.Cells[Row, Col].Borders[L_Top].Weight := 2;
Sheet.Cells[Row, Col].Borders[L_Bot].LineStyle:= 1;
Sheet.Cells[Row, Col].Borders[L_Bot].Weight := 2;
Sheet.Cells[Row, Col].Borders[L_Left].LineStyle:= 1;
Sheet.Cells[Row, Col].Borders[L_Left].Weight := 2;
Sheet.Cells[Row, Col].Borders[L_Right].LineStyle:= 1;
Sheet.Cells[Row, Col].Borders[L_Right].Weight := 2;
Inc(Col);
end;
Prior;
Sheet.Rows[11].Copy;
if not bof then Sheet.Rows[11].Insert;
Sheet.Rows[11].PasteSpecial(-4122,-4142,False,False);
end; //while
finally
EnableControls;
end; //try 1
finally
Sheet.Cells.Columns.AutoFit;
// Sheet.Protect;
Excel.Visible := True;
if FileExists(Path+'Reports\nakl.xls') then DeleteFile(Path+'Reports\nakl.xls');
Excel.ActiveWorkbook.SaveAs(Path+'Reports\nakl.xls',43,'','',false,false);
Sheet.PrintPreview;
Excel.ActiveWorkbook.Close
end;//try 2
end;
Сергей М. (2006-08-10 14:50:00) [15]Показывай процедуру формирования отчета ..
evgenij_ (2006-08-10 14:46:00) [16]Форма из которой по пресу на бутон рисуется отчет в ехеле после нажатия на этот бутон принимает вид покойника- полей не видно,бутонов не видно на евенты не реагирует. Выхожу из ехеля- все ок.Вопрос тот же- шо рабить?
Сергей М. (2006-08-10 14:42:00) [17]Может тебе и Ехел на самом деле не нужен, может и потоки не нужны вовсе - может все гораздо проще и изящней можно реализовать) .. Потому и вопросы к тебе) .. Вот когда будут подробные и внятные ответы на них - тогда и "мош")
Сергей М. (2006-08-10 14:39:00) [18]Пока не объяснишь более-менее подробно свою задачу в целом - "не мош", я не телепат.
evgenij_ (2006-08-10 14:37:00) [19]
> Это все ?! Это вся работа Ехеля по-твоему ?! )
Помочь чем-то мош али нет?
Сергей М. (2006-08-10 14:15:00) [20]
> evgenij_ (10.08.06 14:07) [3]
Это все ?! Это вся работа Ехеля по-твоему ?! )