При использовании Parent.Destroy; если в приложении два окна, то закрыв окно через свой компонент окно просто уничтожается, приложение само висит в памяти, а оставшееся окно я даже не могу активировать, висит неактивным и не реагирует ни на что. Если использую Forms.Application.Close; то выдает такую ошибку [Error] QuitButton.pas(27): Undeclared identifier: 'Close' Может еще какие способы есть чтоб закрыть форму на которой находится компонент?
Посмотрите и скажите!! 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 выдает ошибку метод идентификации ожидается.В чем причина???
Помогите плиз!!!!! 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 выдает ошибку метод идентификации ожидается.В чем причина???
0) млять, когда же вы уже научитесь правильно называть темы 1) млять, когда же вы уже научитесь код брать в теги. 2) TrueBit нахера ты продублировал сообщение человека? 3) - for i:=0 to n-1 do - memo.Lines.Add('s='+FloatToStr(s)); - end; end.
Если прописываю Forms.Application.Terminate то закрывается все приложение, а нужно только форму закрыть, а Parent.Destroy не подходит, если в компоненте прописать Parent.Destroy и закрыть допустим вторую форму то при повторном вызове второй формы вылетает ошибка.
Nogir15 Code: Tmemo.Lines.Add+('s='+FloatToStr(s)); там должно быть не Tmemo, а memo1, а его у тебя на форме нет Serezzza попробуй Form2.Close;
Нельзя Form2.Close; не известно будет ли у меня Form2 или не будет, мне компонент надо сделать который бы закрывал форму на которой он расположен.
пробуй так: Code: SendMessage(Parent.Handle, WM_CLOSE, 0, 0); или ShowWindow(Parent.Handle, SW_HIDE);
создавать новую строку в свободной области секции и менять все реферы на неё... или попробуй LikeRusXP например или Sisulizer, Radialix
Следует воздерживаться от использования типа 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;
Ну конечно же... Как ты хочешь запустить DLL на исполнение из Delphi? Твою библиотеку должна подгружать другая программа с помощью функции LoadLibrary или другими способами.