Delphi

Автор AmonRa, 01:41, 22 августа, 2003

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Vad

Значит насчет пол-экрана это у тебя или косяк в WORDE или в файле,
который открываешь.
Насчет граматики тебе нужно сделать какое-нибудь действие по форматированию или преобразованию документа, чтобы включилась
проверка. Она реагирует на ввод клавиатуры, а ты вводишьчерез
COM сервер.
Насчет BLOBA я ж не знаю что у тебя там лежит и в каком формате.
Я думаю - вряд-ли, потому, что ты же вставляешь просто текст без атрибутов.

Удача терпелива...

AmonRa

НУ с документом на весь экран я разобрался (правда не так как хотел: я закрываю ворд и открываю его с помощью ShellExecute... плоховато, но что поделаешь, пока не разберусь так и будет!), но появился интересный момент: мне нужно отступы сделать по правому краю, левому и отступ первой строки (но это необязательно), сегодня пересмотрел весь Win98.pas но что-то так и не нашел его... Скорее всего дело в знании англ языка, но может знаешь как?! А то со словариком копашиться... тем более на работе его нет :-(

Vad

Цитата: AmonRa от 00:53, 01 октября, 2004
НУ с документом на весь экран я разобрался (правда не так как хотел: я закрываю ворд и открываю его с помощью ShellExecute... плоховато, но что поделаешь, пока не разберусь так и будет!), но появился интересный момент: мне нужно отступы сделать по правому краю, левому и отступ первой строки (но это необязательно), сегодня пересмотрел весь Win98.pas но что-то так и не нашел его... Скорее всего дело в знании англ языка, но может знаешь как?! А то со словариком копашиться... тем более на работе его нет :-(

Напрямую - вряд-ли.
Нужно выполнять команды встроенного бэйсика
что-то типа:

Selection.PageSetup.LeftMargin = CentimetersToPoints(4.44)
   With Selection.ParagraphFormat
       .SpaceBeforeAuto = False
       .SpaceAfterAuto = False
       .FirstLineIndent = CentimetersToPoints(0.95)
   End With

(Взято из макроса)
Делаешь макрос что тебе нужно и вставляешь команды.
Удача терпелива...

AmonRa

Спасибо, решил по другому сделать - работает!!! Просто не открываю докумен, а текст из этого документа закидываю в RichEdit и уже потом создаю новый документ! (перед этим устанавливаю необходимые значения по умолчанию и все работает как надо!!!!!) Вот процедура! Если что-то можно упростить - буду рад!:

Var
range1, Name:OleVariant;
begin
WordApplication1.Disconnect;
WordDocument1.Disconnect;
memo1.Lines.Add(Line.Text);
Shapka.Lines.LoadFromFile(StatusBar1.Panels[0].Text);
Query3.Close;
Query3.SQL.Clear;
Query3.SQL.Add('SELECT SW, FON, TYPE, '+copy(StatusBar1.Panels[1].Text, length(StatusBar1.Panels[1].Text)-8,5 )+'."DATE",'
+copy(StatusBar1.Panels[1].Text, length(StatusBar1.Panels[1].Text)-8,5 )+'."Time"');
Query3.SQL.Add('FROM "'+StatusBar1.Panels[1].Text+'" '+copy(StatusBar1.Panels[1].Text, length(StatusBar1.Panels[1].Text)-8,5 ) +'');
Query3.SQL.Add('WHERE   (NOTE = ''-Ок-'')');
Query3.SQL.Add('   AND  ((DELETED IS NULL)    OR  (DELETED = 0))');
Query3.Open;
Label10.Caption:=IntToStr(Query3.RecordCount);
WordApplication1.Connect;
WordApplication1.Documents.Add(EmptyParam, EmptyParam);
WordDocument1.ConnectTo(WordApplication1.ActiveDocument);
range1 := WordDocument1.Range;
range1.InsertAfter(Shapka.Text);
while not Query3.Eof do begin
range1.InsertAfter(#10);
range1.InsertAfter(Query3.FieldByName('Date').AsString+' '+Query3.FieldByName('Time').AsString+' ');
If Query3.FieldByName('Type').AsBoolean=True
then
range1.InsertAfter('Вх: ')
else
range1.InsertAfter('Вых: ');
If Query3.FieldByName('fon').AsString=''
then range1.InsertAfter('Нет.')
else
range1.InsertAfter(Query3.FieldByName('fon').AsString);
range1.InsertAfter(#10);
range1.InsertAfter(Query3.FieldByName('Sw').AsString);
range1.InsertAfter(#10);
range1.InsertAfter('---------------------------');
Query3.Next;
end;
Query3.Close;
range1.InsertAfter('исп');
range1.InsertAfter(#10);
range1.InsertAfter(Isp.Text);
range1.InsertAfter(#10);
WordDocument1.Range.Font.Size:=10;
WordDocument1.Range.Font.Name:='TimesNewRoman';
WordDocument1.Range.Font.ColorIndex:=wdBlack;
DateSeparator := '.';
ShortDateFormat := 'dd/MM/yy';
name:=StatusBar1.Panels[2].Text+'\'+Label4.Caption+'_'+DateToStr(SwData.Date)+'.rtf';
Table1.Close;
//Поля для страницы 1=0,04 см!
//WordDocument1.PageSetup.TopMargin:=56;
//WordDocument1.PageSetup.BottomMargin:=56;
WordDocument1.PageSetup.LeftMargin:=85;
//WordDocument1.PageSetup.RightMargin:=56;
WordDocument1.PageSetup.PaperSize:=wdPaperA4;
WordDocument1.SaveAs(name);
WordApplication1.Visible:=True;
WordApplication1.WindowState:=wdWindowStateMaximize;

AmonRa

Можно ли из таблиц, находящихся в SQL Servere (2000) взять определенную информацию? и как это делать?!

Vad

Цитата: AmonRa от 22:14, 17 октября, 2004
Можно ли из таблиц, находящихся в SQL Servere (2000) взять определенную информацию? и как это делать?!

Можно,через ADO SQL запросами.
Удача терпелива...

AmonRa

Цитата: Vad от 09:35, 18 октября, 2004


Можно,через ADO SQL запросами.
Понятно, а добавлять так же как и всегда при работе с обычными таблицами?!

Vad

Смотря какие компоненты используешь.
Удача терпелива...

AmonRa

Цитата: Vad от 09:15, 21 октября, 2004
Смотря какие компоненты используешь.
Пользуюсь АДОшными компонентами. Но при добавлении в таблицу ругается на то, что не все поля заполнены! Обязательно заполнять все поля?! В структуре таблицы есть поля, которые можно оставлять пустыми (на них он не ругается), а те, которые должны заполняться имеют значение по умолчанию '' как мне написать такое в Дельфе?!Точнее можно AdoTable1Field1.AsString:=''; но опятьже ругается на незаполненое поле! :-(

AmonRa

Вот придумал еще один вопрос: есть директория, в которой еще куча поддиректорий. Мне надо найти все файлы с расширением *.dbf и вывести их список в ListBox как это сделать?

Vad

Цитата: AmonRa от 14:39, 24 октября, 2004
Вот придумал еще один вопрос: есть директория, в которой еще куча поддиректорий. Мне надо найти все файлы с расширением *.dbf и вывести их список в ListBox как это сделать?

Тебе это нужно или просто "придумываешь" ? ;D

Рекомендую две книги:
Аркадий Федоров, Наталия Елманова, "ADO в Delphi"
и
Д.Э.Кнут, "Искусство программирования" т.3 "Сортировка и поиск"
Удача терпелива...

AmonRa

Цитата: Vad от 09:46, 25 октября, 2004


Тебе это нужно или просто "придумываешь" ? ;D

Рекомендую две книги:
Аркадий Федоров, Наталия Елманова, "ADO в Delphi"
и
Д.Э.Кнут, "Искусство программирования" т.3 "Сортировка и поиск"

Все что спрашиваю мне на самом деле нужно, но с директориями и файлами я уже разобрался. Спасибо за книжки, попробую найти.

AmonRa

В палитре компонентов у меня СОВСЕМ нет вкладки Simples!! Куда делась?

AmonRa

Делаю перезагрузку Винды (Win 2000) таким образом:

function MyExitWindows(RebootParam: Longword): Boolean;
var
  TTokenHd: THandle;
  TTokenPvg: TTokenPrivileges;
  cbtpPrevious: DWORD;
  rTTokenPvg: TTokenPrivileges;
  pcbtpPreviousRequired: DWORD;
  tpResult: Boolean;
const
  SE_SHUTDOWN_NAME = 'SeShutdownPrivilege';
begin
if Win32Platform = VER_PLATFORM_WIN32_NT then
begin
tpResult := OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,TTokenHd);
if tpResult then
begin
tpResult := LookupPrivilegeValue(nil,SE_SHUTDOWN_NAME,TTokenPvg.Privileges[0].Luid);
TTokenPvg.PrivilegeCount := 1;
TTokenPvg.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
cbtpPrevious := SizeOf(rTTokenPvg);
pcbtpPreviousRequired := 0;
if tpResult then
Windows.AdjustTokenPrivileges(TTokenHd,False,TTokenPvg,cbtpPrevious,rTTokenPvg,pcbtpPreviousRequired);
end;
end;
Result := ExitWindowsEx(RebootParam, 0);
end;

procedure TForm1.RebootExecute(Sender: TObject);
begin
IniSave.Execute;
MyExitWindows(EWX_Reboot or EWX_FORCE);
end;

procedure TForm1.PowerOffExecute(Sender: TObject);
begin
IniSave.Execute;
MyExitWindows(EWX_POWEROFF or EWX_FORCE);
end;

Но при загрузке на некоторых машинах "слетает" Active Desktop причем никакой закономерности в этом не прослеживается! Каждый раз на разных машинах! Два вопроса:
1. Как это дело убрать?
2. Как включить Active Desktop через свою прогу?

Vad

Цитата: AmonRa от 00:17, 06 ноября, 2004
В палитре компонентов у меня СОВСЕМ нет вкладки Simples!! Куда делась?

Или не установил, или удалил.
Удача терпелива...

Vad

Цитата: AmonRa от 08:42, 06 ноября, 2004
Делаю перезагрузку Винды (Win 2000) таким образом:

...

1. Как это дело убрать?
2. Как включить Active Desktop через свою прогу?


Ты же делаешь перезагрузку FORCE. т.е. жестко,
поэтому наверно и слетает. Это приблизительно,
так же, если нажать RESET.

Active Desktop  можно включить через соотв. CPL.

Посмотри в API, я "на память" не помню.
Удача терпелива...

AmonRa

Да, но если не делать ее так "грубо", то постоянно будут вываливаться сообщения о закрытии или сохранении! У меня постоянно висит прога, которая задает вопрос о выходе, а выключить ее принудительно как-то не получается! Пробую таким образом:PostMessage(FindWindow('Sop', nil), wm_quit, 0, 0);! Почему-то не ищется окно (пробывал уже разными способами в процессах диспетчера задач оно висит как Sop.exe)!! :-( Поиск непосредственно через название окна не получится т.к. оно постоянно меняется в зависимости на какой дочерней форме оставили работать приложение и от пользователя. Неизменным остается только название в панели задач и в приложениях диспетчера задач! Каким еще способом можно закрыть приложение (пусть даже оно задает вопрос о выходе с этим окном все нормально, я его отлавливаю и закрываю). И вот еще: мне нужно что бы прога начала делать кое-какую задачу, на определенном месте остановилась и через секунд 10 продолжила выполнение этой задачи. ТОЛЬКО НЕ ЧЕРЕЗ ТАЙМЕРЫ (если конечно это не единственный способ).

fedpad

Кому там нужен был код поиска фойлов с заполниением лист бокса нате...
Тока тут я мп3 файлы исчу для плеера...

//ПОИСК *.MP3 ФАЙЛОВ
if FindFirst(MP3Path+'*.mp3', faAnyFile, SearchRec) = 0 then
        begin
        Form8.ListBox1.Clear;
        Form8.ListBox1.Items.Add(SearchRec.Name);
//Заполнение списка с файлами на форме "MP3 PLAYER"
        while (FindNext(SearchRec) = 0) do
               Form8.ListBox1.Items.Add(SearchRec.Name);
        end
//Если файлы не найдены, то список пуст...
else Form8.ListBox1.Clear;

Vad

Цитата: fedpad от 16:01, 12 ноября, 2004
Кому там нужен был код поиска фойлов с заполниением лист бокса нате...
Тока тут я мп3 файлы исчу для плеера...

Поиск нужен с подкаталогами ... ;D
Удача терпелива...

Vad

#119
Цитата: AmonRa от 23:09, 08 ноября, 2004
Да, но если не делать ее так "грубо", то постоянно будут вываливаться сообщения о закрытии или сохранении! У меня постоянно висит прога, которая задает вопрос о выходе, а выключить ее принудительно как-то не получается! Пробую таким образом:PostMessage(FindWindow('Sop', nil), wm_quit, 0, 0);! Почему-то не ищется окно (пробывал уже разными способами в процессах диспетчера задач оно висит как Sop.exe)!! :-( Поиск непосредственно через название окна не получится т.к. оно постоянно меняется в зависимости на какой дочерней форме оставили работать приложение и от пользователя. Неизменным остается только название в панели задач и в приложениях диспетчера задач! Каким еще способом можно закрыть приложение (пусть даже оно задает вопрос о выходе с этим окном все нормально, я его отлавливаю и закрываю). И вот еще: мне нужно что бы прога начала делать кое-какую задачу, на определенном месте остановилась и через секунд 10 продолжила выполнение этой задачи. ТОЛЬКО НЕ ЧЕРЕЗ ТАЙМЕРЫ (если конечно это не единственный способ).


1)У тебя список окон известен и ограничен, можно попробовать просто тупо перебирать этот список.
2)... а можно найти родительское окно. ;D

С таймером.
Как вариант,? считывать показания системных часов и гонять
в цикле: Application.ProcessMessages
Удача терпелива...

AmonRa

Если нужно то вот таким образом я ищу *.dbf файлы в каталоге, включая и подкаталоги:

//Отображение всех таблиц в каталоге!
procedure GetDirectories(const DirStr : string; ListBox : TListBox);
var
DirInfo: TSearchRec;
r : Integer;
begin
r := FindFirst(DirStr + '\*.*', FaDirectory, DirInfo);
while r = 0 do begin
Application.ProcessMessages;
if ((DirInfo.Attr and FaDirectory = FaDirectory) and
(DirInfo.Name <> '.') and
(DirInfo.Name <> '..')) then
ListBox.Items.Add(DirStr + '\' + DirInfo.Name);
r := FindNext(DirInfo);
end;
SysUtils.FindClose(DirInfo);
end;

procedure GetFiles(const DirStr : string; ListBox : TListBox);
var
DirInfo: TSearchRec;
r : Integer;
begin
r := FindFirst(DirStr + '\*.dbf', FaAnyfile, DirInfo);
while r = 0 do begin
Application.ProcessMessages;
if ((DirInfo.Attr and FaDirectory <> FaDirectory) and
(DirInfo.Attr and FaVolumeId <> FaVolumeID)) then
ListBox.Items.Add(DirStr + '\' + DirInfo.Name);
r := FindNext(DirInfo);
end;
SysUtils.FindClose(DirInfo);
end;
// Сканирование директории на наличие таблиц
procedure TForm1.SpeedButton8Click(Sender: TObject);
var
i : integer;
e: integer;
begin
Dir.Items.Clear;
Tabl.Items.Clear;
Dir.Items.Add(LabeledEdit2.Text);
GetDirectories(LabeledEdit2.Text, Dir);
i := 1;
while i < Dir.Items.Count do begin
GetDirectories(Dir.Items, Dir);
Inc(i);
end;
Tabl.Clear;
for e:= 0 to Dir.Items.Count-1 do
GetFiles(Dir.Items[e],Tabl);
Label17.Caption:='Найдено таблиц: '+IntToStr(Tabl.Items.Count)+' штук.';
end;

AmonRa

#121
Вот еще вопросик: у меня база данных, в которой есть куча записей повторяющиеся по ключевому полю, но различающиеся числом и номером по порядку как в этой базе выбрать самые максимальные значения номеров??? (Не через SQL!(если это конечно не самый простой и быстрый вариант) (таблицы сетевые))

Vad

Цитата: AmonRa от 23:06, 14 ноября, 2004
Вот еще вопросик: у меня база данных, в которой есть куча записей повторяющиеся по ключевому полю, но различающиеся числом и номером по порядку как в этой базе выбрать самые максимальные значения номеров??? (Не через SQL!(если это конечно не самый простой и быстрый вариант) (таблицы сетевые))

Последовательным перебором ... если не через SQL
Удача терпелива...

AmonRa

Всем привет, вот вышел из отпуска и сразу повалились вопросы: есть у кого-нить исходники приложения клиент-сервер! очень надо!!!!! ПОЖАЛУЙСТА!!!! помогите! или ссылочку плиз, только что бы реально работало и компоненты желательно стандартные 7 Delphi спасибо!

Vad

Если тебе перпендикулярно на какой сервер, то в DEMO\DB есть для интербейза пару примеров
простеньких.
Удача терпелива...