![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Доброй ночи...Подскажите как написать GUI оболочку для консольного приложения...
Консольная программа представляет из себя компилятор плагинов для amxmodx.... Сам компилятор можно скачать и поглядеть http://rghost.ru/4978168 Вот как-то так.... |
#2
|
|||
|
|||
![]() Запускаешь компилятор, консоль вывода переправляешь к себе в Memo, например. Запускать придется через CreateProcess.
|
#3
|
||||
|
||||
![]() В простейшем случае можно выводить в файл, а уже оттуда подгружать в Мемо, а в нормальном варианте придется плясать с бубном и пайпами, в нете (Гугл) примеров много, но они заточены в основном под Д7.
|
#4
|
||||
|
||||
![]() вот пример GUI консоли. запускает cmd. для побаловаться можно вводить dos-команды: dir, ver, blablabla...
Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TReadThread = class(TThread) private buf: array [0..255] of Char; dummy: Cardinal; procedure UpdateForm; protected procedure Execute; override; public constructor Create; end; TFormMain = class(TForm) MemoConsole: TMemo; EditText: TEdit; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure EditTextKeyPress(Sender: TObject; var Key: Char); private hPipeInputRead: THandle; hPipeInputWrite: THandle; hPipeOutputRead: THandle; hPipeOutputWrite: THandle; hProcess: THandle; readthread: TReadThread; public end; var FormMain: TFormMain; implementation {$R *.dfm} procedure TFormMain.FormCreate(Sender: TObject); var securityattributes: TSecurityAttributes; startupinfo: TStartupInfo; processinformation: TProcessInformation; begin securityattributes.nLength:=SizeOf(TSecurityAttributes); securityattributes.lpSecurityDescriptor:=nil; securityattributes.bInheritHandle:=True; CreatePipe(hPipeInputRead, hPipeInputWrite, @securityattributes, 0); CreatePipe(hPipeOutputRead, hPipeOutputWrite, @securityattributes, 0); ZeroMemory(@startupinfo, SizeOf(TStartupInfo)); ZeroMemory(@processinformation, SizeOf(TProcessInformation)); startupinfo.cb:=SizeOf(TStartupInfo); startupinfo.dwFlags:=STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES; startupinfo.wShowWindow:=SW_HIDE; startupinfo.hStdInput:=hPipeInputRead; startupinfo.hStdOutput:=hPipeOutputWrite; startupinfo.hStdError:=hPipeOutputWrite; CreateProcess(nil, PChar('cmd'), nil, nil, True, CREATE_NEW_CONSOLE, nil, nil, startupinfo, processinformation); hProcess:=processinformation.hProcess; readthread:=TReadThread.Create; end; procedure TFormMain.FormDestroy(Sender: TObject); begin TerminateProcess(hProcess, 0); CloseHandle(hProcess); CloseHandle(hPipeInputRead); CloseHandle(hPipeInputWrite); CloseHandle(hPipeOutputRead); CloseHandle(hPipeOutputWrite); readthread.Terminate; readthread.WaitFor; readthread.Free; end; procedure TFormMain.EditTextKeyPress(Sender: TObject; var Key: Char); var buf: array [0..255] of Char; dummy: Cardinal; begin if Key=#13 then begin StrPCopy(buf, EditText.Text+#13#10); WriteFile(hPipeInputWrite, buf, Length(EditText.Text)+2, dummy, nil); EditText.Clear; end; end; { TReadThread } constructor TReadThread.Create; begin inherited Create(True); FreeOnTerminate:=False; Resume; end; procedure TReadThread.Execute; begin while not Terminated do if ReadFile(FormMain.hPipeOutputRead, buf, 256, dummy, nil) then Synchronize(UpdateForm); end; procedure TReadThread.UpdateForm; begin OemToAnsiBuff(buf, buf, dummy); FormMain.MemoConsole.Text:=FormMain.MemoConsole.Text+Copy(buf, 1, dummy); end; end. http://data.cod.ru/95453 Пишу программы за еду. __________________ |