Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 29.03.2011, 03:58
crash94 crash94 вне форума
Прохожий
 
Регистрация: 08.07.2009
Адрес: Архангельск
Сообщения: 26
Версия Delphi: 7
Репутация: 10
По умолчанию GUI к консолькой программе

Доброй ночи...Подскажите как написать GUI оболочку для консольного приложения...
Консольная программа представляет из себя компилятор плагинов для amxmodx....

Сам компилятор можно скачать и поглядеть http://rghost.ru/4978168

Вот как-то так....
Ответить с цитированием
  #2  
Старый 29.03.2011, 05:25
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,088
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Запускаешь компилятор, консоль вывода переправляешь к себе в Memo, например. Запускать придется через CreateProcess.
Ответить с цитированием
  #3  
Старый 29.03.2011, 08:58
Аватар для Vayrus
Vayrus Vayrus вне форума
Исполняемый Ретровирус
 
Регистрация: 09.08.2008
Адрес: Umbrella Corporation
Сообщения: 743
Репутация: 1293
По умолчанию

В простейшем случае можно выводить в файл, а уже оттуда подгружать в Мемо, а в нормальном варианте придется плясать с бубном и пайпами, в нете (Гугл) примеров много, но они заточены в основном под Д7.
Ответить с цитированием
  #4  
Старый 29.03.2011, 09:23
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

вот пример 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
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 09:44.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025