![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Здравствуйте!
Ковыряю формы, возникло несколько вопросов, которые не могу решить уже несколько дней, все параметры и код перепроверял, но видимо где-то что-то неправильно: 1. В закладке есть 4 TPanel, в каждой по 4-10 полей разного типа. Курсор при нажатии Tab в одном месте переходит неправильно, не на следующее поле в этой панели которое имеет TabOrder+1, а на следующий такой же объект TJvDBComboBox вообще в другой панели! 2. Есть две похожие формы, на обеих есть одинаковый (скопированный) объект - TDBCheckBox - в одной форме при открытии (форма без данных) - он выключен, а на другой - включен... нужно чтобы был отключен... фантастика какая-то! 3. Процедура открытия одного нового окна из двух возможных с передачей в это новое окно значения переменной, которая объявлена в том окне, но Delphi всё время ругается на код, не понимаю почему и как же написать правильно?!: Код:
Procedure ShowF(aGroupId:LongInt;aIsShift:boolean); var P:Tform; begin case aGroupId of 1: begin P:=TfBaseForm; P.Create(Application); P.VarTemp := not aIsShift; (!) не может найти в Tform переменную VarTemp ===================== вариант 2 case aGroupId of 1: begin P:=TfBaseForm.Create(Application); If aIsShift=True Then TfBaseForm.VarTemp:=False (!) Else TfBaseForm.TfBaseForm:=True; end; ругается что ждал метод ===================== вариант 3 var P:variant и string не нравится присвоение имени формы varinat, если string не работают методы формы вообще Я понимаю, что не видя проект сложно сказать наверняка, тем более, что все доступные свойства я перепроверил уже н-раз. Тем не менее, возможно Ваш профессиональный опыт поможет Вам выдвинуть предположения с чем эти баги могут быть связаны? |
#2
|
||||
|
||||
![]() Код:
var P: TfBaseForm; P := TfBaseForm.Create(Application); P.VarTemp := not aIsShift; Последний раз редактировалось ryderx34, 23.07.2011 в 23:27. |
#3
|
|||
|
|||
![]() одного нового окна из двух возможных
Указывая вначале P:= одному из двух окон, затем не получается присвоить второе окно... вот: Цитата:
Последний раз редактировалось delphicoding, 24.07.2011 в 12:06. |
#4
|
|||
|
|||
![]() 4. Как TJvDBComboBox или TDBComboBox указать из кода программы, чтобы он ВЫБРАЛ И ПОКАЗАЛ значение из своего списка? Строка cbSpisok.ItemIndex:=1 увы ничего не делает.
|
#5
|
|||
|
|||
![]() 5. Нужно назначить событие на момент формы ввода данных. Какое событие-момент подойдёт, чтобы обработка запускалась: а) при первом открытии пустой формы и б) когда данные отправляются в БД и форма ввода очищается и в) когда форма открывается загружая во все поля данные из БД ?
Какое выбрать событие формы? AfterOpen? Или лучше что-то другое? Может из событий БД? |
#6
|
||||
|
||||
![]() Цитата:
Код:
var P: TForm; begin case aGroupId of 1: begin P := TfBaseFormA.Create(Application); (P as TfBaseFormA).VarTemp := not aIsShift; end; 2: begin P := TfBaseFormB.Create(Application); (P as TfBaseFormB).VarTemp := not aIsShift; end; end; |
#7
|
|||
|
|||
![]() Я так писать не буду, тк я не могу логически понять этот бредовый код "P as TfBaseFormA". AS в анлгийском языка означает КАК, но мне не нужно КАК, мне нужно передать В форму массу значений, а не В ФОРМУ Х КАК В ФОРМУ У. В общем код отвратителен. Сделал с двумя переменными вначале, хотя это тоже кривизна. Проблема в том, что в "очень удобном Delphi" изначально плохо продуман синтаксис - надо было разделить написание объектов и свойств, тогда код бы выглядел намного лучше и не было этой проблемы, когда вроде бы как всё написано правильно, но, увы, программа так работать не может... вобщем должно быть типа такого:
Код:
var P:TForm; (ведь КЛАСС переменной - это именно ФОРМА) begin case aGroupId of 1: P:=TfBaseFormA; (уточняем название формы из которой создаём окно) 2: P:=TfBaseFormB; (также) end; P.[Create(Application)]; (о да, свойство и функция объекта это на самом деле совсем не тоже самое, что путь к объекту, поэтому СТОИЛО ОТДЕЛИТЬ СВОЙСТВА СКОБОЧКАМИ, товарищи разработчики Delphi) P.VarTemp := not aIsShift; (тут просто через точку, тк это обычный путь к объекту-переменной) |
#8
|
||||
|
||||
![]() Цитата:
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#9
|
|||
|
|||
![]() Посмотрите на любую ОС или интернет! Нигде не отделяют параметры/свойства объекта также, как путь объекта! Это очень бредовая тема из паскаля из-за которой и возникла заморочка в этой теме. Также по этой же причине в редакторе Delphi нет подсветки свойств объектов, тк из-за такого бредового синтаксиса "всё через точку" свойства очень сложно отличить от объектов! Примеры:
Есть: delphisources.ru/forum/showthread.php?p=84960#post84960 Аля Delphi: delphisources.ru/forum/showthread.php/p/84960/post/84960 Есть: C:\Windows\System32\rundll32.exe -t -d 11 +sys.dll Аля Delphi: C:\Windows\System32\rundll32\exe\t\d11\sys\dll Надеюсь понятно... Последний раз редактировалось delphicoding, 25.07.2011 в 12:19. |
#10
|
||||
|
||||
![]() Уважаемый delphicoding. Вы уже не в первой теме поносите Delphi и его синтаксис. Ну неужели же вы думаете что от ваших постов синтаксис кто нибудь изменит. Вам тогда в Embarcadero батенька надо обращаться, а не на наш форум. Синтаксис - это правила, я бы сказал устав. А устав не может быть ни хорошим ни плохим, устав требует бесприкословного исполнения.
Вам следует немножко подучить Delphi, и его объектную систему в частности. Вот то что вы написали Цитата:
Говоря грубым языком: - объект это переменная, - класс это тип. Тип это описание переменной, но никак не сама переменная. А для того чтобы программист не путал классы с объектами придумали в индетификаторах классов Delphi ставить префикс Т. Написать Код:
P:=TfBaseFormA; Код:
А:=Integer; Возможно вы раньше программировали на VB. A VB хорошо пудрит мозги, смешивая эти понятия. - Товарищ прапорщик!!! Остановите поезд!!! - Поезд СТОЙ! РАЗ! ДВА! |
#11
|
|||
|
|||
![]() Цитата:
![]() ![]() Даже если отбросить синтаксис, всё равно в Delphi увы многое нелогично и неудобно... Цитата:
Таки почему нельзя по ходу кода присвоить P:=TfBaseFormB или P:=fBaseFormB ?! Ведь согласно вашей логике A:=integer и затем МОЖНО ПРИСВОИТЬ ЧИСЛО, то есть нечто, подходящее по КЛАССУ. Тогда почему в коде не пашет конструкция вида var P:Tform begin P:=TfBaseFormB ??? |
#12
|
||||
|
||||
![]() Цитата:
Цитата:
Цитата:
- Товарищ прапорщик!!! Остановите поезд!!! - Поезд СТОЙ! РАЗ! ДВА! Последний раз редактировалось Viajero, 25.07.2011 в 13:16. |
#13
|
|||
|
|||
![]() Цитата:
Цитата:
Всё равно это не аналогично. Смотрите сами: var S:string - переменная S строка, пока-что очевидно пустая var T:TForm - переменная Т форма, пока-что очевидно пустая далее в коде: S:='текст' - заполнили строку "текстом" T:=TfBaseForm - должен был бы работать так - заполнять TForm(пустую/несуществующую) форму объектами из TfBaseForm или вкладывать форму TfBaseForm в TForm. Но не пашет же ни так ни сяк. |
#14
|
||||
|
||||
![]() Цитата:
http://www.delphisources.ru/forum/showthread.php?t=6221 Объект создаётся с помощью метода Create (который является методом класса, а не объекта) Правильно: T:= TfBaseForm.Create(Application); - Товарищ прапорщик!!! Остановите поезд!!! - Поезд СТОЙ! РАЗ! ДВА! |
#15
|
|||
|
|||
![]() Наверно надо почитать, но это сейчас невозможно.
Спасибо за терпение! ![]() Вопросы 3,4,5 решены более менее. Есть ли какие-нибудь предположения по вопросам 1,2 ? |