[ 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. foozzi

    foozzi Member

    Joined:
    13 Apr 2010
    Messages:
    195
    Likes Received:
    12
    Reputations:
    5
    а вот я так и делал, только потом текст не коректный или зачеркнутый
     
  2. Isaev

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

    Joined:
    25 Jul 2007
    Messages:
    120
    Likes Received:
    19
    Reputations:
    6
    значит криво делал... или пытаешься строку вписать длиннее, чем была
     
  3. Serezzza

    Serezzza Banned

    Joined:
    22 May 2010
    Messages:
    13
    Likes Received:
    0
    Reputations:
    0
    При использовании Parent.Destroy; если в приложении два окна, то закрыв окно через свой компонент окно просто уничтожается, приложение само висит в памяти, а оставшееся окно я даже не могу активировать, висит неактивным и не реагирует ни на что.

    Если использую Forms.Application.Close; то выдает такую ошибку
    [Error] QuitButton.pas(27): Undeclared identifier: 'Close'

    Может еще какие способы есть чтоб закрыть форму на которой находится компонент?
     
  4. AlexTheC0d3r

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

    Joined:
    25 Jul 2008
    Messages:
    388
    Likes Received:
    179
    Reputations:
    18
    Потому что не Close а Terminate
    а если просто закрыть то Parent.Destroy подойдет
     
  5. Nogir15

    Nogir15 New Member

    Joined:
    28 Nov 2010
    Messages:
    11
    Likes Received:
    0
    Reputations:
    -1
    Посмотрите и скажите!!

    unit Unit1;

    interface

    uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, StdCtrls;

    type
    TForm1 = class(TForm)
    Label1: TLabel;
    Edit1: TEdit;
    Label2: TLabel;
    Edit2: TEdit;
    Label3: TLabel;
    Edit3: TEdit;
    Label4: TLabel;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    private
    { Private declarations }
    public
    { Public declarations }
    end;

    var
    Form1: TForm1;

    implementation

    {$R *.dfm}

    procedure TForm1.Button1Click(Sender: TObject);
    var
    s,s0,x,x0,h:real;
    n,i:integer;
    begin
    x0:=StrToFloat(Edit1.Text);
    h:=StrToFloat(Edit2.Text);
    n:=StrToInt(Edit3.Text);
    s0:=0;
    x:=x0;
    i:=0;
    for i:=0to n-1do
    begin
    s0:=s0+x/((x*x+1)*(x*x+1));
    end;
    x:=x+h;
    s:=s0*h;
    Tmemo.Lines.Add+('s='+FloatToStr(s));
    end.

    на lines выдает ошибку метод идентификации ожидается.В чем причина???
     
  6. Nogir15

    Nogir15 New Member

    Joined:
    28 Nov 2010
    Messages:
    11
    Likes Received:
    0
    Reputations:
    -1
    Помогите плиз!!!!!

    Code:
    unit Unit1;
    
    interface
    
    uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, StdCtrls;
    
    type
    TForm1 = class(TForm)
    Label1: TLabel;
    Edit1: TEdit;
    Label2: TLabel;
    Edit2: TEdit;
    Label3: TLabel;
    Edit3: TEdit;
    Label4: TLabel;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    private
    { Private declarations }
    public
    { Public declarations }
    end;
    
    var
    Form1: TForm1;
    
    implementation
    
    {$R *.dfm}
    
    procedure TForm1.Button1Click(Sender: TObject);
    var
    s,s0,x,x0,h:real;
    n,i:integer;
    begin
    x0:=StrToFloat(Edit1.Text);
    h:=StrToFloat(Edit2.Text);
    n:=StrToInt(Edit3.Text);
    s0:=0;
    x:=x0;
    i:=0;
    for i:=0to n-1do
    begin
    s0:=s0+x/((x*x+1)*(x*x+1));
    end;
    x:=x+h;
    s:=s0*h;
    Tmemo.Lines.Add+('s='+FloatToStr(s));
    end.
    
    на lines выдает ошибку метод идентификации ожидается.В чем причина??? :mad:
     
    #7546 Nogir15, 9 Jan 2011
    Last edited by a moderator: 9 Jan 2011
  7. slesh

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

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    0) млять, когда же вы уже научитесь правильно называть темы
    1) млять, когда же вы уже научитесь код брать в теги.
    2) TrueBit нахера ты продублировал сообщение человека?
    3)
    - for i:=0 to n-1 do
    - memo.Lines.Add('s='+FloatToStr(s));
    - end; end.
     
  8. Nogir15

    Nogir15 New Member

    Joined:
    28 Nov 2010
    Messages:
    11
    Likes Received:
    0
    Reputations:
    -1
    все равно на после kines выдает ошибку метод идентификации ожидается
     
  9. Serezzza

    Serezzza Banned

    Joined:
    22 May 2010
    Messages:
    13
    Likes Received:
    0
    Reputations:
    0
    Если прописываю Forms.Application.Terminate то закрывается все приложение, а нужно только форму закрыть, а Parent.Destroy не подходит, если в компоненте прописать Parent.Destroy и закрыть допустим вторую форму то при повторном вызове второй формы вылетает ошибка.
     
  10. SHiNiGaMi

    SHiNiGaMi Banned

    Joined:
    3 Jan 2010
    Messages:
    382
    Likes Received:
    55
    Reputations:
    15
    Nogir15
    Code:
    Tmemo.Lines.Add+('s='+FloatToStr(s));
    
    там должно быть не Tmemo, а memo1, а его у тебя на форме нет
    Serezzza
    попробуй Form2.Close;
     
  11. foozzi

    foozzi Member

    Joined:
    13 Apr 2010
    Messages:
    195
    Likes Received:
    12
    Reputations:
    5
    да больше строчку делаю, а как зделать чтоб строчка была больше и сообщение коректно отображалось?
     
  12. Serezzza

    Serezzza Banned

    Joined:
    22 May 2010
    Messages:
    13
    Likes Received:
    0
    Reputations:
    0
    Нельзя Form2.Close; не известно будет ли у меня Form2 или не будет, мне компонент надо сделать который бы закрывал форму на которой он расположен.
     
  13. alexey-m

    alexey-m Elder - Старейшина

    Joined:
    15 Jul 2009
    Messages:
    518
    Likes Received:
    100
    Reputations:
    37
    пробуй так:
    Code:
    SendMessage(Parent.Handle, WM_CLOSE, 0, 0); 
    или 
    ShowWindow(Parent.Handle, SW_HIDE);
    
     
  14. Serezzza

    Serezzza Banned

    Joined:
    22 May 2010
    Messages:
    13
    Likes Received:
    0
    Reputations:
    0
    Спасибо! SendMessage(Parent.Handle, WM_CLOSE, 0, 0); помогло
     
  15. Isaev

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

    Joined:
    25 Jul 2007
    Messages:
    120
    Likes Received:
    19
    Reputations:
    6
    создавать новую строку в свободной области секции и менять все реферы на неё... или попробуй LikeRusXP например или Sisulizer, Radialix
     
  16. AlexTheC0d3r

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

    Joined:
    25 Jul 2008
    Messages:
    388
    Likes Received:
    179
    Reputations:
    18
    Parent.Hide;
    Parent.Visible := false;

    одно и то-же
     
  17. CheatXX

    CheatXX New Member

    Joined:
    8 Jun 2009
    Messages:
    154
    Likes Received:
    2
    Reputations:
    0
    как создать dll вместо exe?
     
  18. Isaev

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

    Joined:
    25 Jul 2007
    Messages:
    120
    Likes Received:
    19
    Reputations:
    6
    Следует воздерживаться от использования типа string в библиотечных функциях, т.к. при его использовании существуют проблемы с "разделением памяти". Подробней об этом можно прочитать (правда, на английском) в тексте пустого проекта DLL, который создает Delphi (File -> New -> DLL). Так что лучше используйте PChar, а затем при необходимости конвертируйте его в string функцией StrPas.

    Ну а теперь разберем непосредственно саму библиотеку DLL.

    Исходник проекта MYDLL.DPR
    library mydll;

    Code:
    uses SysUtils, Classes;
    
    {Определяем функцию как stdcall}
    function GetSimpleText(LangRus: Boolean): PChar; stdcall;
    begin
      {В зависимости от LangRus возвращаем русскую (True) либо английскую (False) фразу}
      if LangRus then
        Result := PChar('Здравствуй, мир!')
      else
        Result := PChar('Hello, world!');
    end;
    
    {Директива exports указывает, какие функции будут экспортированы этой DLL}
    exports GetSimpleText;
    
    begin
    end.

    Размещение в DLL ресурсов и форм

    В DLL можно размещать не только функции, но и курсоры, рисунки, иконки, меню, текстовые строки. На этом мы останавливаться не будем. Замечу лишь, что для загрузки ресурса нужно загрузить DLL, а затем, получив ее дескриптор, - загружать сам ресурс соотвествующей функцией (LoadIcon, LoadCursor, и т.д.). В этом разделе мы лишь немного затронем размещение в библиотеках DLL окон приложения (т.е. форм в Дельфи).

    Для этого нужно создать новую DLL и добавить в нее новую форму (File -> New -> DLL, а затем - File -> New Form). Далее, если форма представляет собой диалоговое окно (модальную форму (bsDialog)), то добавляем в DLL следующую функцию (допустим, форма называется Form1, а ее класс - TForm1)

    Размещение формы в DLL
    Code:
    function ShowMyDialog(Msg: PChar): Boolean; stdcall;
    
    ...
    exports ShowMyDialog;
    
    function ShowMyDialog(Msg: PChar): Boolean;
    begin
      {Создаем экземпляр Form1 формы TForm1}
      Form1 := TForm1.Create(Application);
      {В Label1 выводим Msg}
      Form1.Label1.Caption := StrPas(Msg);
      {Возвращаем True только если нажата OK (ModalResult = mrOk)}
      Result := (Form1.ShowModal = mrOk);
      {Освобождаем память}
      Form1.Free;
    end;
     
  19. CheatXX

    CheatXX New Member

    Joined:
    8 Jun 2009
    Messages:
    154
    Likes Received:
    2
    Reputations:
    0
    Cannot debug project unless a host applicatios is defined. Use the Run|Parameters.. dialog box
     
  20. Chrome~

    Chrome~ Elder - Старейшина

    Joined:
    13 Dec 2008
    Messages:
    936
    Likes Received:
    162
    Reputations:
    27
    Ну конечно же... Как ты хочешь запустить DLL на исполнение из Delphi? Твою библиотеку должна подгружать другая программа с помощью функции LoadLibrary или другими способами.
     
Thread Status:
Not open for further replies.