Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 23.07.2011, 21:11
delphicoding delphicoding вне форума
Активный
 
Регистрация: 04.07.2011
Сообщения: 206
Репутация: -461
Вопрос Несколько простейших вопросов по формам

Здравствуйте!

Ковыряю формы, возникло несколько вопросов, которые не могу решить уже несколько дней, все параметры и код перепроверял, но видимо где-то что-то неправильно:
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  
Старый 23.07.2011, 23:25
Аватар для ryderx34
ryderx34 ryderx34 вне форума
Активный
 
Регистрация: 22.01.2010
Сообщения: 211
Версия Delphi: 7, 2010
Репутация: 1349
По умолчанию

Код:
var 
  P: TfBaseForm;

P := TfBaseForm.Create(Application);
P.VarTemp := not aIsShift;

Последний раз редактировалось ryderx34, 23.07.2011 в 23:27.
Ответить с цитированием
  #3  
Старый 24.07.2011, 11:53
delphicoding delphicoding вне форума
Активный
 
Регистрация: 04.07.2011
Сообщения: 206
Репутация: -461
По умолчанию

одного нового окна из двух возможных
Указывая вначале P:= одному из двух окон, затем не получается присвоить второе окно... вот:
Цитата:
var P:TfBaseFormA;
begin
case aGroupId of
1: P:=TfBaseFormA; (!)
2: P:=TfBaseFormB;
end;
P.Create(Application);
P.VarTemp := not aIsShift;
также не пашет, ругается, что в указанной строке - Incompatible types: 'TfBaseFormA' and '(class of TfBaseFormA)'. - даже простым языком это звучит как бред, уж не говоря про код... короче я фигею от этой тупой ситуации и уже не представляю себе как правильно это реализовать ?!?!?!

Последний раз редактировалось delphicoding, 24.07.2011 в 12:06.
Ответить с цитированием
  #4  
Старый 24.07.2011, 13:48
delphicoding delphicoding вне форума
Активный
 
Регистрация: 04.07.2011
Сообщения: 206
Репутация: -461
По умолчанию

4. Как TJvDBComboBox или TDBComboBox указать из кода программы, чтобы он ВЫБРАЛ И ПОКАЗАЛ значение из своего списка? Строка cbSpisok.ItemIndex:=1 увы ничего не делает.
Ответить с цитированием
  #5  
Старый 24.07.2011, 17:09
delphicoding delphicoding вне форума
Активный
 
Регистрация: 04.07.2011
Сообщения: 206
Репутация: -461
По умолчанию

5. Нужно назначить событие на момент формы ввода данных. Какое событие-момент подойдёт, чтобы обработка запускалась: а) при первом открытии пустой формы и б) когда данные отправляются в БД и форма ввода очищается и в) когда форма открывается загружая во все поля данные из БД ?
Какое выбрать событие формы? AfterOpen? Или лучше что-то другое? Может из событий БД?
Ответить с цитированием
  #6  
Старый 24.07.2011, 17:46
Аватар для ryderx34
ryderx34 ryderx34 вне форума
Активный
 
Регистрация: 22.01.2010
Сообщения: 211
Версия Delphi: 7, 2010
Репутация: 1349
По умолчанию

Цитата:
Сообщение от delphicoding
одного нового окна из двух возможных
А, ну тогда:
Код:
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  
Старый 24.07.2011, 18:06
delphicoding delphicoding вне форума
Активный
 
Регистрация: 04.07.2011
Сообщения: 206
Репутация: -461
По умолчанию

Я так писать не буду, тк я не могу логически понять этот бредовый код "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  
Старый 24.07.2011, 21:14
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Цитата:
Сообщение от delphicoding
Я так писать не буду, тк я не могу логически понять этот бредовый код ...
Это не бредовый код, это приведение к типу, читайте справку прежде чем высказывать бредовые слова.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #9  
Старый 25.07.2011, 12:13
delphicoding delphicoding вне форума
Активный
 
Регистрация: 04.07.2011
Сообщения: 206
Репутация: -461
По умолчанию

Посмотрите на любую ОС или интернет! Нигде не отделяют параметры/свойства объекта также, как путь объекта! Это очень бредовая тема из паскаля из-за которой и возникла заморочка в этой теме. Также по этой же причине в редакторе 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  
Старый 25.07.2011, 12:18
Аватар для Viajero
Viajero Viajero вне форума
Активный
 
Регистрация: 14.06.2011
Адрес: РБ
Сообщения: 214
Версия Delphi: Delphi 7 FB 2.5
Репутация: 5849
По умолчанию

Уважаемый delphicoding. Вы уже не в первой теме поносите Delphi и его синтаксис. Ну неужели же вы думаете что от ваших постов синтаксис кто нибудь изменит. Вам тогда в Embarcadero батенька надо обращаться, а не на наш форум. Синтаксис - это правила, я бы сказал устав. А устав не может быть ни хорошим ни плохим, устав требует бесприкословного исполнения.
Вам следует немножко подучить Delphi, и его объектную систему в частности. Вот то что вы написали
Цитата:
ведь КЛАСС переменной - это именно ФОРМА
вот это действительно бред. Форма это объект. А вы хоть понимаете разницу между классом и объектом.
Говоря грубым языком:
- объект это переменная,
- класс это тип.
Тип это описание переменной, но никак не сама переменная.
А для того чтобы программист не путал классы с объектами придумали в индетификаторах классов Delphi ставить префикс Т.

Написать
Код:
P:=TfBaseFormA;
тоже самое что
Код:
А:=Integer;
А может быть равно 1 или 2 или 25, но не Integer, т к Integer это описание.

Возможно вы раньше программировали на VB. A VB хорошо пудрит мозги, смешивая эти понятия.
__________________
- Товарищ прапорщик!!! Остановите поезд!!! - Поезд СТОЙ! РАЗ! ДВА!
Ответить с цитированием
  #11  
Старый 25.07.2011, 12:33
delphicoding delphicoding вне форума
Активный
 
Регистрация: 04.07.2011
Сообщения: 206
Репутация: -461
По умолчанию

Цитата:
Синтаксис - это правила, я бы сказал устав. А устав не может быть ни хорошим ни плохим, устав требует бесприкословного исполнения.
Красавчик стиль аватарки выдерживаешь?
Даже если отбросить синтаксис, всё равно в Delphi увы многое нелогично и неудобно...
Цитата:
вот это действительно бред. Форма это объект. А вы хоть понимаете разницу между классом и объектом.
Выдернули часть фразы, там была речь о "var P=TForm" из чего получается, что переменной P присваивается КЛАСС ФОРМА, точно как при var T:string переменой T присваивается КЛАСС СТРОКА. Всё понятно?

Таки почему нельзя по ходу кода присвоить P:=TfBaseFormB или P:=fBaseFormB ?! Ведь согласно вашей логике A:=integer и затем МОЖНО ПРИСВОИТЬ ЧИСЛО, то есть нечто, подходящее по КЛАССУ. Тогда почему в коде не пашет конструкция вида var P:Tform begin P:=TfBaseFormB ???
Ответить с цитированием
  #12  
Старый 25.07.2011, 12:56
Аватар для Viajero
Viajero Viajero вне форума
Активный
 
Регистрация: 14.06.2011
Адрес: РБ
Сообщения: 214
Версия Delphi: Delphi 7 FB 2.5
Репутация: 5849
По умолчанию

Цитата:
Ведь согласно вашей логике A:=integer
Почитайте лучше, я как раз писал, что так делать ни в коем разе нельзя.
Цитата:
А может быть равно 1 или 2 или 25, но не Integer, т к Integer это описание.
И зачем вы задаёте вопросы на форуме, если и так лучше всех всё знаете. Вам же конкретно отвечают, как должно быть согласно правилам и синтаксису Delphi.
Цитата:
переменной P присваивается КЛАСС ФОРМА
Форма это не класс, а объект, ещё раз вам говорю, и переменной класс присваиватся не может.
__________________
- Товарищ прапорщик!!! Остановите поезд!!! - Поезд СТОЙ! РАЗ! ДВА!

Последний раз редактировалось Viajero, 25.07.2011 в 13:16.
Ответить с цитированием
  #13  
Старый 25.07.2011, 18:57
delphicoding delphicoding вне форума
Активный
 
Регистрация: 04.07.2011
Сообщения: 206
Репутация: -461
По умолчанию

Цитата:
как должно быть согласно правилам и синтаксису Delphi.
Вы не правильно меня поняли. Я же с этим не спорю! Ну да, правила, ну да, синтаксис - ну да, такие какие сделали. Я просто утверждаю, что многое в синтаксисе сделано криво!
Цитата:
Форма это не класс, а объект, ещё раз вам говорю, и переменной класс присваиватся не может.
Глупость какая-то, зачем так делать-то?! И можно ли как-то вообще в Delphi создавать переменные определяемые КЛАССАМИ? Или классы определяются только в отдельном юните в первой строке вида TfBaseForm = class(TForm) но нигде более???

Всё равно это не аналогично. Смотрите сами:
var S:string - переменная S строка, пока-что очевидно пустая
var T:TForm - переменная Т форма, пока-что очевидно пустая
далее в коде:
S:='текст' - заполнили строку "текстом"
T:=TfBaseForm - должен был бы работать так - заполнять TForm(пустую/несуществующую) форму объектами из TfBaseForm или вкладывать форму TfBaseForm в TForm. Но не пашет же ни так ни сяк.
Ответить с цитированием
  #14  
Старый 25.07.2011, 19:10
Аватар для Viajero
Viajero Viajero вне форума
Активный
 
Регистрация: 14.06.2011
Адрес: РБ
Сообщения: 214
Версия Delphi: Delphi 7 FB 2.5
Репутация: 5849
По умолчанию

Цитата:
T:=TfBaseForm - должен был бы работать так - заполнять TForm(пустую/несуществующую) форму объектами из TfBaseForm или вкладывать форму TfBaseForm в TForm. Но не пашет же ни так ни сяк.
Я же говорю, почитать вам надо что-нибудь
http://www.delphisources.ru/forum/showthread.php?t=6221
Объект создаётся с помощью метода Create (который является методом класса, а не объекта)
Правильно:
T:= TfBaseForm.Create(Application);
__________________
- Товарищ прапорщик!!! Остановите поезд!!! - Поезд СТОЙ! РАЗ! ДВА!
Ответить с цитированием
  #15  
Старый 25.07.2011, 20:25
delphicoding delphicoding вне форума
Активный
 
Регистрация: 04.07.2011
Сообщения: 206
Репутация: -461
По умолчанию

Наверно надо почитать, но это сейчас невозможно.
Спасибо за терпение!

Вопросы 3,4,5 решены более менее.

Есть ли какие-нибудь предположения по вопросам 1,2 ?
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 23:43.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025