[ Delphi / Pascal ] — начинающим: задаем вопросы (архивная - 2015)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by banned, 6 May 2007.

Thread Status:
Not open for further replies.
  1. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    form1 - основное окно
    form2 - окро авторизации

    в первой форме проверяешь авторизован или нет.
    Если нет то
    form2.show;
    form1.enabled:=false;

    в форме авторизации прописываешь в обработчике onCanClose результат false если неавторизован. Если авторизован то true. также в onClose ставишь form1.enabled:=true;
     
    1 person likes this.
  2. crystalbit

    crystalbit Elder - Старейшина

    Joined:
    6 Jun 2008
    Messages:
    212
    Likes Received:
    88
    Reputations:
    8
    Form1 - наше окно
    Form2 - окно авторизации

    из первой - Form1.ShowModal;
    и первая форма будет ждать, пока вторая не закроется
    также на Form2 кнопкам можно присвоить ModalResult, тогда они будут закрывать форму (без всяких Close), а в первой форме мы будем знать какая кнопка была нажата во второй (Form2.ModalResult)
     
    1 person likes this.
  3. FindeR

    FindeR Elder - Старейшина

    Joined:
    15 Nov 2006
    Messages:
    623
    Likes Received:
    138
    Reputations:
    20
    Зачем 2 формы-то? Не проще посередине прям над объектами формы повесить либо фрейм с inputbox'ами, либо какой-нибудь groupbox с ними же. Ну а дальше, как и отписался народ выше, блочить всё, что нужно, пока не авторизуешься, а далее делать фрейму\групбоксу visible:=false...
     
  4. winstrool

    winstrool ~~*MasterBlind*~~

    Joined:
    6 Mar 2007
    Messages:
    1,412
    Likes Received:
    904
    Reputations:
    863
    как можно передать какое либо значение пхп скрипту?
     
    _________________________
  5. FindeR

    FindeR Elder - Старейшина

    Joined:
    15 Nov 2006
    Messages:
    623
    Likes Received:
    138
    Reputations:
    20
    К примеру, на форму idHTTP закинь (в инди клиентс ищи), в uses добавь IdMultipartFormData
    далее
    IdHTTP1.Post('http://bla-bla.ru/index.php', data)
    где data: TIdMultiPartFormDataStream
    в дату добавляем data.AddFormField('имя параметра','значение параметра')
     
  6. winstrool

    winstrool ~~*MasterBlind*~~

    Joined:
    6 Mar 2007
    Messages:
    1,412
    Likes Received:
    904
    Reputations:
    863
    как это всё можно реализовать не используя формы?
     
    _________________________
  7. FindeR

    FindeR Elder - Старейшина

    Joined:
    15 Nov 2006
    Messages:
    623
    Likes Received:
    138
    Reputations:
    20
    Ну, видимо, как-то так, если с инди...

    Code:
     program Project1;
    {$APPTYPE CONSOLE}
    uses
      SysUtils,
      IdHTTP,
      IdComponent,
      classes;
    
    var
    IdHTTP1: TIdHTTP;
    Data: TStringList;
    
    begin
    Data := TStringList.Create;
    IdHTTP1:= TIdHTTP.Create(nil);
    {$R *.res}
    Data.add('bla-bla');
    IdHTTP1.Post('http://sait.ru' ,Data);
    end.
    
    Хотя, в сторону сокетов тоже глянуть можно :)
     
    1 person likes this.
  8. DiSi

    DiSi Member

    Joined:
    7 Dec 2007
    Messages:
    0
    Likes Received:
    19
    Reputations:
    0
    подскажите)

    Как прописать путь к файлу лежашим в 1ной папке с Проджект1?
    (полный путь вида С:......../.... не подходит)


    кто не понял)
    у мну есть флеш аниме, и когда я в нем пишу путь к файлу он создает полный путь(с именем диска и папок) при етом если я переименую диск или 1 из папок флеш не находиться(((
     
    #2588 DiSi, 26 Jan 2009
    Last edited: 26 Jan 2009
  9. crystalbit

    crystalbit Elder - Старейшина

    Joined:
    6 Jun 2008
    Messages:
    212
    Likes Received:
    88
    Reputations:
    8
    Code:
    ExtractFilePath(ParamStr(0))+'anime.swf'
     
    1 person likes this.
  10. ZET36

    ZET36 Elder - Старейшина

    Joined:
    8 Oct 2007
    Messages:
    250
    Likes Received:
    49
    Reputations:
    0
    Здравствуйте, как выполнить через делфи нужную Dos команду, например я хочу выполнить
    Code:
    md c:\SSS
    как нее ковырялся с ShellExecute и WinExec не получается
     
  11. LEE_ROY

    LEE_ROY Elder - Старейшина

    Joined:
    9 Nov 2006
    Messages:
    450
    Likes Received:
    188
    Reputations:
    26
    ShellExecute(hInstance,"open","md.exe","c:\SSS", null,sw_sownormal);
    шото в этом роде
     
  12. ZET36

    ZET36 Elder - Старейшина

    Joined:
    8 Oct 2007
    Messages:
    250
    Likes Received:
    49
    Reputations:
    0
    LEE_ROY увы непомогает
     
  13. W!z@rD

    W!z@rD Борец за русский язык

    Joined:
    12 Feb 2006
    Messages:
    973
    Likes Received:
    290
    Reputations:
    43
    ShellExecute(0, nil, 'mkdir', 'c:\111'. nil, sw_hide)
     
    1 person likes this.
  14. desTiny

    desTiny Elder - Старейшина

    Joined:
    4 Feb 2007
    Messages:
    1,006
    Likes Received:
    444
    Reputations:
    94
    http://www.delphirus.com/article32.html
     
    1 person likes this.
  15. A2GIL

    A2GIL Elder - Старейшина

    Joined:
    31 Aug 2007
    Messages:
    84
    Likes Received:
    59
    Reputations:
    -3
    WinExec и ShellExecute немного не то. С их помощью можно выполнять команды DOS (типа rundl32 xx.dl, бла бла ), вызывать процедуры запуска файлов с параметрами. Но для того, чтобы выполнить консольную команду можно создать поток, запускающий консольную программу. Подключаем только уже написанный для этого модуль.

    Code:
    //Подключаем модуль в Uses
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      StdCtrls, ExtCtrls, ComCtrls, [COLOR=Blue]CmdLine[/COLOR];
    
    type
      TForm1 = class(TForm)
        btnRun: TButton;
        btnWrite: TButton;
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
      private
        { Private declarations }
      public
        { Public declarations }
        [COLOR=Yellow]procedure DoCommand(_lpcmd:string);[/COLOR]
      end;
    
    var
      Form1: TForm1;
      [COLOR=Yellow]CmdCom   :TRedirectThread;[/COLOR]
    
    implementation
    {$R *.dfm}
    
    
    procedure TForm1.DoCommand(_lpcmd:string);
    var
     _data:string;
    begin
      if CmdCom<>nil then
       begin
         _data :=_lpcmd+#13#10;
         CharToOem(@_data[1],@_data[1]);
         CmdCom.WriteData(_data);
        end;
    end;
    
    
    procedure TForm1.FormCreate(Sender: TObject);
    begin
        CmdCom:= TRedirectThread.Create(true);
        CmdCom.RunProgram :='cmd';
        CmdCom.Params :='';
        CmdCom.FreeOnTerminate := true;
        CmdCom.Resume;
    end;
    
    procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      if CmdCom<>nil then
       CmdCom.Terminate();
    end;
    
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    [COLOR=Yellow] DoCommand('mkdir c:\121');[/COLOR] // задаем командную строку
    end;
    
    end.

    Модуль CmdLine
     
  16. noveek

    noveek New Member

    Joined:
    29 Dec 2008
    Messages:
    45
    Likes Received:
    4
    Reputations:
    1
    progressbar1

    Привет всем обьясните пожалуйсто как можно сделать в таком коде чтобы при выборе файла который отправлять работал Progressbar1 никак не пойму как нужно его сюда вставить да ещё чтобы по окончании передачи файла возникало окно типо Файл успешно передан !

    procedure TForm1.Button4Click(Sender: TObject);
    begin
    if OpenDialog1.Execute then idUDPClient1.Send(OpenDialog1.FileName) //выбираем и отправляем файл

    end;

    end.
     
  17. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    То, что ты делаешь - это не файл отправляет, а имя файла.
    Для того чтобы отправить файл тебе нужно сделать примерно так:
    progressbar1.max = размер файла
    затем файл блоками читаешь и отправляешь. И в прогрессбар ставишь сколько уже отправил данных
     
  18. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    Тебе нужно самому постоить HTTP запрос. Вид запроса для отсылки файла примерно такой:
    Code:
    POST /test.php? HTTP/1.1
    Host: site.ru
    Content-Length: 185
    Content-Type: multipart/form-data; boundary=----------HRMPqBFF7FBJH4xJX2p87i
    
    ------------HRMPqBFF7FBJH4xJX2p87i
    Content-Disposition: form-data; name="userfile"; filename="myfilename.txt"
    Content-Type: text/plain
    
    TEST TEST
    
    ------------HRMPqBFF7FBJH4xJX2p87i--
    
    
    ----------HRMPqBFF7FBJH4xJX2p87i - это уникальный разделитель который невстречается в передаваемых данных. ты модешь генерить его сам.
    каждая строчка заканчивается на #13#10

    В дельфе этот запрос будет строиться примерно так:
    1) генери boundary типа ------------HRMPqBFF7FBJH4xJX2p87i
    2) data:=boundary+#13#10+'Content-Disposition: form-data; name="userfile"; filename="'+filename+'"'+#13#10+'Content-Type: text/plain'+#13#10#13#10+filedata+#13#10#13#10+boundary+'--'+#13#10;
    3) pack:='POST /'+script+' HTTP/1.1'#13#10+Host: '+host+#13#10+'Content-Length: '+inttostr(length(data))+#13#10+'Content-Type: multipart/form-data; boundary='+boundary+#13#10#13#10+data;
    4) СОединяйся с сервером каких угодно способом и шли ему pack
     
    #2598 slesh, 29 Jan 2009
    Last edited: 29 Jan 2009
  19. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    Тогда копай тут:
    в IdHttp есть модуль IdMultipartFormData
    А нем есть класс TIdMultiPartFormDataStream;
    в этом классе есть процедура AddFile которая добавляет файл
    Через idHTTP1.Post можно послать как раз данные из TIdMultiPartFormDataStream
    Надеюсь понял какая последовательность всего

    Если быть точным то это выглядит примерно так:
    Code:
    uses  IdMultipartFormData;
    
    procedure TForm1.Button1Click(Sender: TObject);
    var
     d:TIdMultiPartFormDataStream;
    begin
     d:=TIdMultiPartFormDataStream.Create;
     d.AddFile('userfile','c:\test.txt','text/plain');
     idHTTP1.Post('/index.php?',d);
    end;
    
     
    #2599 slesh, 29 Jan 2009
    Last edited: 29 Jan 2009
  20. FindeR

    FindeR Elder - Старейшина

    Joined:
    15 Nov 2006
    Messages:
    623
    Likes Received:
    138
    Reputations:
    20
    Регистрирую хоткеи.
    alt - MOD_ALT, ctrl - MOD_CONTROL...
    а tab у нас как "называется"?:)
     
Thread Status:
Not open for further replies.