Здравствуйте еще раз, эксперты У меня тут возник вопросик: как можно работать на Delphi с ADO так, чтобы программа работала без BDE. Я пробовал, но все равно на "чистом" компьютере программа вызывает ошибку
Здравствуйте, andix! Нет. Ответ отправлен: 24.04.2003, 15:58 Отправитель: Stein
Вопрос № 604
Уважаемые эксперты, Мне нужно вывести график XY с 4 четвертями. Скажите пожалуйста как с помощью TChart вывести оси пересекающиеся по центру и положительные и отрицательные деления. И как выводить саму кривую(функции и методы)? Спасибо!!
Доброе время суток, dude! А чем Вас не устраивает Canvas. Если устраивает, то методы LineTo(x,y) и MoveTo(x,y). А функцию выводить можно по-разному: поточечно, сплошной линией. Если первое, то SetPixel или PutPixel (к сожалению, точно непомню). Второе: LineTo, MoveTo. Ну а координаты расчитывать несложно, конечно, всё зависимости от уравнения. см. приложение. А вообще советую поискать в сети исходники, таких задачек.
Приложение: Ответ отправлен: 25.04.2003, 11:28 Отправитель: Дима Мусиенко
Вопрос № 605
Здравствуйте, эксперты! У меня вопрос: можно ли в ColorBox русифицировать названия цветов? Заранее спасибо!
Добрый день, andix! Исправляй компонент, или ищи готовый в и-нете. Ответ отправлен: 25.04.2003, 15:06 Отправитель: Stein
Вопрос № 607
Здравствуйте уважаемые эксперты ! Помогите пожалуйста получить ответы на следующие вопросы: 1) я хочу сделать, чтобы моя программа запускалась планировщиком по расписанию. Как программно сделать проверку, находится ли уже программа в памяти, чтобы вторая копия не запускалась ? 2) программа сидит в памяти. Пользователи при завершении работы с Windows не закрывают ее кнопкой, просто забывают о программе. А по кнопке выполняются действия для правильного закрытия программы. Как мне в программе отловить момент, когда завершают работу с Windows и выполнить нужные действия ? 3) как из моей программы запускать другие приложения, например Word с нужным мне документом ? 4) как программно нажимать кнопки на форме ? Буду благодарен любой информации, особенно кускам кода. Оболочка
Delphi 3. Радик.
Здравствуйте, Радик. Про копии. 1. ... Uses syncobjs; ... Var CheckEvent: TEvent; ... procedure TForm1.FormCreate( Sender: TObject ); begin CheckEvent:= TEvent.Create( nil, false, true, 'MYPROGRAM_CHECKEXIST' ); If CheckEvent.WaitFor( 10 ) <> wrSignaled then begin // Сюда попадаем если одна копия уже запущена. Можно, например, сообщить об этом пользователю. Self.Close; // Здесь можно завершить программу или сделать еще что-нибудь. end; end; 2. program Project1; uses Forms, Windows, Unit1 in 'Unit1.pas' {Form1}; {$R *.RES} var hwnd: THandle; begin hwnd := FindWindow('TForm1', 'Form1'); if hwnd = 0 then begin Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; end else SetForegroundWindow(hwnd) end. 3. program pds; uses Windows, Forms, Main
in 'MAIN.PAS' {MainForm}, const MemFileSize=127; MemFileName='one_example'; var MemHnd:HWND; {$R *.RES} begin MemHnd:=CreateFileMapping(HWND($FFFFFFFF),nil, PAGE_READWRITE,0,MemFileSize, MemFileName); if GetLastError<>ERROR_ALREADY_EXISTS then begin Application.Initialize; with TForm1.Create(nil) do try Show; Update; Application.CreateForm(TMainForm, MainForm); finally Free; end; Application.Run; end else Application.MessageBox('Приложение уже запущено (возможно оно свёрнуто на панели задач): Нажмите кнопку ОК для продолжения работы','Производственно-диспетчерская служба',MB_OK); CloseHandle(MemHnd); end. 4. Избежать запуск второй копии можно еще проще (может быть): в *.dpr файле ActivatePrevInstance('TForm1','Значение Caption ') 5. program Previns; uses WinTypes, WinProcs, SysUtils, Forms, Uprevins
in 'UPREVINS.PAS' {Form1}; {$R *.RES}
type PHWND = ^HWND;
function EnumFunc(Wnd:HWND; TargetWindow:PHWND): bool; export; var ClassName : array[0..30] of char; begin Result := true; if GetWindowWord(Wnd,GWW_HINSTANCE) = hPrevInst then begin GetClassName( Wnd, ClassName, 30 ); if StrIComp( ClassName, 'TApplication' ) = 0 then begin TargetWindow^ := Wnd; Result := false; end; end; end;
procedure GotoPreviousInstance; var PrevInstWnd : HWND; begin PrevInstWnd := 0; EnumWindows( @EnumFunc, Longint( @PrevInstWnd ) ); if PrevInstWnd <> 0 then if IsIconic( PrevInstWnd ) then ShowWindow( PrevInstWnd, SW_RESTORE ) else BringWindowToTop( PrevInstWnd ); end;
begin if hPrevInst <> 0 then GotoPreviousInstance else begin Application.CreateForm(TForm1, Form1); Application.Run; end; end. Количество
запущенных копии программы. program CrtApp;
begin SavePrevInst := hPrevInst; NumInstances := 0; While hPrevInst <> 0 do begin GetInstanceData(hPrevInst,Ofs(hPrevInst),SizeOf(hPrevInst)); Inc(NumInstances); end; Writeln('Уже запущено ',NumInstances,' копий программы'); hPrevInst := SavePrevInst; end. Про программное нажатие. // для WINNT К сожалению работает хорошо, только когда фокус у вызывающего окна, в противном случае может глючить procedure TForm1.SetKey(Key:Integer); begin keybd_event(Key,0,KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,0); keybd_event(Key,0,KEYEVENTF_EXTENDEDKEY,0); keybd_event(Key,0,KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,0); end;
Применение SetKey(VK_SCROLL); SetKey(VK_CAPITAL); Про запуск программ. Просто можно запустить файл с параметрами, как из Run. Запустить можно или OpenFile(тра ля ля)-прочитай в хэлпе по win32api. Можно CreateProcess, блин, есть ещё проще, что-то не помню, другие эксперты напишут точно! Про закрытие программы. Обрабатывай на форме событие OnClose и OnCloseQuery. PS Извиняюся за орфографию(спешу).
Ответ отправлен: 28.04.2003, 16:17 Отправитель: Stein
Доброе время суток, Кирилл! Ты это серьёзно??? А на рынок за компактом сходить влом??? http://www.borland.com/products/downloads/download_delphi.html З.Ы. По ссылке Delphi 7.0, но можешь там-же поискать 6.0 Ответ отправлен: 30.04.2003, 21:09 Отправитель: Илья
Форма отправки вопроса
Внимание!
Форма может работать некорректно в почтовых программах "Microsoft Outlook"
и "Microsoft Outlook Express". В программе The Bat!
подобные формы не работают вообще!
После нажатия на кнопку "Отправить", будет открыто второе окно. Заметьте,
что в некоторых браузерах могут стоять запреты на открытие других
окон, а также "чрезмерное" кэширование данных,
при этом факт отправки Вашего вопроса стоит под сомнением.
Мы рекомендуем открывать рассылку в программе Internet
Explorer 5.0+ или отправлять вопросы с сайта по адресу:
http://rusfaq.ru/cgi-bin/Message.cgi.