9 / 9 / 0
Регистрация: 13.07.2012
Сообщений: 127
|
||||||||||||||||||
1 | ||||||||||||||||||
showmodal and radiogroup delphi13.07.2012, 18:49. Показов 1826. Ответов 14
Метки нет (Все метки)
добрый вечер. не можете подсказать где ошибка?
( Задание при нажание на кнопку "выравнивания" выходило новое окно, на которой расположено RadioGroup с вариантами : выравнить по левому, о правому краю или по центру, а так же есть две кнопки Ok, No. так вот у меня почему то не открывает это окно, выдает ошибку)
0
|
13.07.2012, 18:49 | |
Ответы с готовыми решениями:
14
RadioGroup в Delphi Работа с RadioGroup в Delphi radiogroup delphi программа не работает RadioGroup в Delphi |
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
|
|||||||||||
13.07.2012, 21:32 | 2 | ||||||||||
У формы свойства Alignment - нет. Разве что вы используете переменную с таким именем на форме AlignmentDlg.
Как я понимаю:
0
|
9 / 9 / 0
Регистрация: 13.07.2012
Сообщений: 127
|
|
13.07.2012, 21:50 [ТС] | 3 |
ммм.... если я все так сделаю, то у меня выходит ошибка "Access violation at address 0045B3EA in module ' MDI_proj.exe'. Read pf address 00000000."
0
|
9 / 9 / 0
Регистрация: 13.07.2012
Сообщений: 127
|
|
13.07.2012, 23:01 [ТС] | 5 |
это форма, которая должна открыться при нажание выравнивать.
unit alig_dlg; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Buttons; type TalignmentDlg = class(TForm) BitBtn1: TBitBtn; BitBtn2: TBitBtn; RadioGroup1: TRadioGroup; //function AlignmentChr(i: integer): TAlignment; { function AlignmentChr(i:integer):Talignment; } private // function AlignmentChr(i:integer):Talignment; { Private declarations } public { Public declarations } Alignment : TAlignment; function Execute: Boolean; end; var alignmentDlg: TalignmentDlg; // alignment:Talignment; implementation {$R *.dfm} function AlignmentChr(i: Integer): TAlignment; begin case i of 0: Result := taLeftJustify; 1: Result := taRightJustify; 2: Result := taCenter; end; // case end; function TAlignmentDlg.Execute: Boolean; begin if AlignmentDlg.ModalResult = idOK then begin Alignment := AlignmentChr(RadioGroup1.ItemIndex); Result := True; end else Result := False; end end. а вот это форма на которой нажимают unit ch_text; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls, ExtCtrls,alig_dlg; type TForm2 = class(TForm) OpenDialog1: TOpenDialog; SaveDialog1: TSaveDialog; Panel1: TPanel; Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; FontDialog1: TFontDialog; ColorDialog1: TColorDialog; Memo1: TMemo; procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button3Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form2: TForm2; {function TalignmentDlg.execute: boolean; function AlignmentChr(i:integer):Talignment; begin case i of 0: result:=taleftJustify; 1: result:=taRightJustify; 2: result:=tacenter end end; begin if alignmentdlg.ModalResult=mrOk then begin alignment:=alignmentchr(radioGroup1.itemIndex); result:=true end else resuLt:= false end;} implementation {$R *.dfm} procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction); var flag:integer; begin flag:=messageDlg('сохранить файл ',mtWarning,[mbyes,mbNo],0); if flag = mrYes then if savedialog1.execute then memo1.lines.savetofile(savedialog1.filename); action:=cafree end; procedure TForm2.Button1Click(Sender: TObject); begin if fontdialog1.Execute then memo1.Font:= fontdialog1.Font end; procedure TForm2.Button2Click(Sender: TObject); begin if colordialog1.Execute then memo1.Color:= colordialog1.Color end; procedure TForm2.Button4Click(Sender: TObject); begin form2.Close end; procedure TForm2.Button3Click(Sender: TObject); begin alignmentDlg.showmodal; if AlignmentDlg.Execute then Memo1.Alignment := AlignmentDlg.Alignment end; end. Добавлено через 4 минуты самое удивительное, то что если создать приложение на котором будет одно главное и одно дочернее окно, то все шикарно работает... а вот в мое случае я создаю главное, с главного перехожу создать текст файл и... то есть на другую форму. и с той формы я должен нажать и у откроется выравнивание, ( по крайне мере должно)
0
|
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
|
|
13.07.2012, 23:45 | 6 |
Чтобы оформить код тегами: выделяешь текст, а в панели редактора щелкаешь слово Delphi.
Теперь ещё выложи, пожалуйста, код из файла project.dpr. Добавлено через 17 минут У меня выдаёт сообщение: Cannot make a visible window modal. если пытаюсь сделать ShowModal при том, что это окно не скрыто. Т.е. изначально поставил Visible=True Не такое сообщение выдаётся?
0
|
9 / 9 / 0
Регистрация: 13.07.2012
Сообщений: 127
|
|
13.07.2012, 23:47 [ТС] | 7 |
если я не ошибся то ты просил этот файл выложить
object alignmentDlg: TalignmentDlg Left = 192 Top = 124 Width = 382 Height = 252 Caption = #1074#1099#1088#1072#1074#1085#1080#1074#1072#1085#1080#1103 Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'MS Sans Serif' Font.Style = [] FormStyle = fsMDIChild OldCreateOrder = False Position = poDefault Visible = True PixelsPerInch = 96 TextHeight = 13 object BitBtn1: TBitBtn Left = 288 Top = 24 Width = 75 Height = 25 TabOrder = 0 Kind = bkOK end object BitBtn2: TBitBtn Left = 280 Top = 56 Width = 75 Height = 25 TabOrder = 1 Kind = bkCancel end object RadioGroup1: TRadioGroup Left = 16 Top = 16 Width = 257 Height = 169 Caption = #1074#1099#1088#1072#1074#1085#1080#1090#1100'...' ItemIndex = 0 Items.Strings = ( #1087#1086' '#1083#1077#1074#1086#1084#1091' '#1082#1088#1072#1102 #1087#1086' '#1087#1088#1072#1074#1086#1084#1091' '#1082#1088#1072#1102 #1087#1086' '#1094#1077#1085#1090#1088#1091) TabOrder = 2 TabStop = True end end
0
|
9 / 9 / 0
Регистрация: 13.07.2012
Сообщений: 127
|
|
14.07.2012, 00:02 [ТС] | 9 |
да, у меня стоит true/
Добавлено через 2 минуты я пробовал, ведь у меня в FormStyle стоит fsMDIchild, оно и не дает изменить Добавлено через 4 минуты ты не можешь прислать как бы ты сделал эту программу.
0
|
9 / 9 / 0
Регистрация: 13.07.2012
Сообщений: 127
|
|
14.07.2012, 01:33 [ТС] | 11 |
главная fsMDIForm
0
|
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
|
|
14.07.2012, 09:49 | 12 |
Поморочился я с этими MDI формами. Ничего с ними не получилось.
Советую поставить все формы fsNormal. Сделать Visible вспомогательных форм = False. Т.е. они не будут показываться сразу при запуске. А дальше работаешь с ними как и раньше (ShowModal). Ещё столкнулся с тем, что после таких изменений при запуске формы становились другого размера, чем в дизайнере. Установил свойство Scaled=False и всё стало нормально.
1
|
9 / 9 / 0
Регистрация: 13.07.2012
Сообщений: 127
|
|
14.07.2012, 16:18 [ТС] | 13 |
спасибо за помощь, я разобрался.... но то что ты сказал, это будет работать только для случая, например если с главного окна ты переходишь на дочерний, НОс дочернего уже не перейдешь на другую дочерную, так как ты не сможешь изменить значение visidle на true. а если это сделаешь тебе родительское окно сообщит об ошибке.
я сейчас выложу код... может я ошибаюсь, можешь проверить это код главного окна unit MainForm; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Menus,ch_text,cp_pic; type TForm1 = class(TForm) MainMenu1: TMainMenu; file1: TMenuItem; N1: TMenuItem; N2: TMenuItem; N3: TMenuItem; N4: TMenuItem; N5: TMenuItem; N6: TMenuItem; OpenDialog1: TOpenDialog; procedure N2Click(Sender: TObject); procedure N3Click(Sender: TObject); procedure N4Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure N6Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.N2Click(Sender: TObject); var newForm: TForm2; begin newForm:=Tform2.create(application); newForm.ShowModal end; procedure TForm1.N3Click(Sender: TObject); var newForm: TForm3; begin newForm:=TForm3.create(application); with newForm.Image1.Canvas do begin Brush.Color:=clwhite; Rectangle(0,0,width,height); Brush.Style:=bsSolid end end; procedure TForm1.N4Click(Sender: TObject); var openFormText:TForm2; openFormImage:TForm3; aFile,ext:string; begin if opendialog1.Execute then begin aFile:=opendialog1.FileName; ext:= extractfileext(aFile); if ext='.txt' then begin openFormText:=TForm2.create(application); openFormText.memo1.Lines.loadfromfile(aFile) end else begin openFormImage:=TForm3.create(application); openFormImage.Image1.Picture.LoadFromFile(aFile) end end; end; procedure TForm1.FormCreate(Sender: TObject); begin Form1.Close end; procedure TForm1.N6Click(Sender: TObject); begin Form1.Close end; end. это код дочернего окна, которое открывается для работы с текстом unit ch_text; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls, ExtCtrls,alig_dlg; type TForm2 = class(TForm) OpenDialog1: TOpenDialog; SaveDialog1: TSaveDialog; Panel1: TPanel; Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; FontDialog1: TFontDialog; ColorDialog1: TColorDialog; Memo1: TMemo; procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button3Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form2: TForm2; {function TalignmentDlg.execute: boolean; function AlignmentChr(i:integer):Talignment; begin case i of 0: result:=taleftJustify; 1: result:=taRightJustify; 2: result:=tacenter end end; begin if alignmentdlg.ModalResult=mrOk then begin alignment:=alignmentchr(radioGroup1.itemIndex); result:=true end else resuLt:= false end;} implementation {$R *.dfm} procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction); var flag:integer; begin flag:=messageDlg('ñîõðàíèòü ôàéë ',mtWarning,[mbyes,mbNo],0); if flag = mrYes then if savedialog1.execute then memo1.lines.savetofile(savedialog1.filename); action:=cafree end; procedure TForm2.Button1Click(Sender: TObject); begin if fontdialog1.Execute then memo1.Font:= fontdialog1.Font end; procedure TForm2.Button2Click(Sender: TObject); begin if colordialog1.Execute then memo1.Color:= colordialog1.Color end; procedure TForm2.Button4Click(Sender: TObject); begin form2.Close end; procedure TForm2.Button3Click(Sender: TObject); var NewForm:TalignmentDlg; begin newForm:=TalignmentDlg.Create(application); newForm.showmodal; case newForm.RadioGroup1.ItemIndex of 0: Memo1.Alignment := taLeftJustify; 1: Memo1.Alignment := taRightJustify; 2: Memo1.Alignment := taCenter; end; // alignmentDlg.showmodal; // if AlignmentDlg.Execute then // Memo1.Alignment := AlignmentDlg.Alignment end; end. это окна выравниварие текста unit alig_dlg; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Buttons; type TalignmentDlg = class(TForm) BitBtn1: TBitBtn; BitBtn2: TBitBtn; RadioGroup1: TRadioGroup; private { Private declarations } public { Public declarations } Alignment : TAlignment; end; var alignmentDlg: TalignmentDlg; implementation {$R *.dfm} end.
0
|
9 / 9 / 0
Регистрация: 13.07.2012
Сообщений: 127
|
|
14.07.2012, 21:07 [ТС] | 14 |
MDI приложение
0
|
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
|
|
14.07.2012, 23:47 | 15 |
Не пойму, что тут не работает.
Я считал текстовый файл. Открылось другое окно и в нём в Memo отобразился текст. потом нажимал кнопку выранять. Открывалась вторая форма. Я ставил нужный вариант, нажимал Ok и всё выравнивалось. А у тебя, что - не работает? Ещё вопрос. Тебе нужно работать именно с MDI формами? Если задание такое - это хуже.
1
|
14.07.2012, 23:47 | |
14.07.2012, 23:47 | |
Помогаю со студенческими работами здесь
15
showmodal ShowModal Ошибка ShowModal отказ от Showmodal Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |