IPB

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Reply to this topicStart new topic
> Или я дурак или одно из двух, Простой вопрос по Дэлфи
Throutle
сообщение 20 Apr 2012, 21:19
Сообщение #1

Freedom Fighter
Сообщений: 1 852
Спасибо сказали: 4031 раз




Задача чуть-чуть сложнее, но это не суть... Заткнулся на кусочке где нужно шэйп раз в шаг таймера двигать на 1 вверх или вниз и на 1 влево или вправо, вроде всё должно быть просто, но не работает: постоянно движется вверх-влево... Никак не пойму в чём может быть проблема...

Код
procedure TForm1.Timer1Timer(Sender: TObject);
begin
randomize;
if random(1)>0 then Shape1.Top:=Shape1.Top+1 else Shapes.Top:=Shapes[1].Top-1;
randomize;
if random(1)>0 then Shape1.Top:=Shape1.Top+1 else Shapes.Top:=Shapes[1].Top-1;
end;


--------------------
In this wild and woolly universe of ours, there are only three things you can count on: your brains, your bros, and your bike!
Go to the top of the pageAdd Nick
 
+Quote Post
Guevara-chan
сообщение 20 Apr 2012, 21:51 (Сообщение отредактировал Guevara-chan - 20 Apr 2012, 21:51)
Сообщение #2

•●Revolucionario●•
Сообщений: 2 467
Спасибо сказали: 5936 раз




Тебя совсем не смущает, что вариант ф-ии 'random' для целых значений выдает диапазон от 0 до аргумента - 1 ?


--------------------
life MOV.I #life+1, *life
האם יש זמן לעצור ?
Go to the top of the pageAdd Nick
 
+Quote Post
tolich
сообщение 20 Apr 2012, 21:52
Сообщение #3

😸🧡✊✌️
Сообщений: 16 411
Спасибо сказали: 3262 раза




random(2) надо.


--------------------
Я слежу за тобой!
* tolic.narod.ru

Цитата
Всегда приятно осознавать, что кто-то делает что-то хуже, чем делал бы ты, если бы умел.
Борис "Бонус" Репетур, "От винта!", выпуск 38.
Go to the top of the pageAdd Nick
 
+Quote Post
Guevara-chan
сообщение 20 Apr 2012, 21:58 (Сообщение отредактировал Guevara-chan - 20 Apr 2012, 22:01)
Сообщение #4

•●Revolucionario●•
Сообщений: 2 467
Спасибо сказали: 5936 раз




">0" не надо. И еще автору кода хорошо бы проспаться, как по мне: "Shapes.Top:=Shapes[1].Top-1;" - это как-то совсем угнетающе...


--------------------
life MOV.I #life+1, *life
האם יש זמן לעצור ?
Go to the top of the pageAdd Nick
 
+Quote Post
tolich
сообщение 20 Apr 2012, 22:08
Сообщение #5

😸🧡✊✌️
Сообщений: 16 411
Спасибо сказали: 3262 раза




>> ">0" не надо.
Как раз надо. Или "=0", или "=1", или "<1". Это Pascal, здесь Integer нельзя использовать вместо Boolean.


--------------------
Я слежу за тобой!
* tolic.narod.ru

Цитата
Всегда приятно осознавать, что кто-то делает что-то хуже, чем делал бы ты, если бы умел.
Борис "Бонус" Репетур, "От винта!", выпуск 38.
Go to the top of the pageAdd Nick
 
+Quote Post
Throutle
сообщение 20 Apr 2012, 22:22
Сообщение #6

Freedom Fighter
Сообщений: 1 852
Спасибо сказали: 4031 раз




Цитата(Guevara-chan @ 20 Apr 2012, 22:58) *
">0" не надо. И еще автору кода хорошо бы проспаться, как по мне: "Shapes.Top:=Shapes[1].Top-1;" - это как-то совсем угнетающе...


Скован в выборе способа, сказали таким макаром двигать...
По поводу проспаться не помешало бы, но и сделай скидку на то, что я этим занимаюсь первый год по 1 часу раз в две недели, с толпой народа...

Цитата(tolich @ 20 Apr 2012, 23:08) *
>> ">0" не нада
Как раз надо. Или "=0", или "=1", или "<1". Это Pascal, здесь Integer нельзя использовать вместо Boolean.


Угу тут нтак не кати,разве только окольными путями.

Так как правильното будет?


--------------------
In this wild and woolly universe of ours, there are only three things you can count on: your brains, your bros, and your bike!
Go to the top of the pageAdd Nick
 
+Quote Post
tolich
сообщение 20 Apr 2012, 22:45 (Сообщение отредактировал tolich - 20 Apr 2012, 22:46)
Сообщение #7

😸🧡✊✌️
Сообщений: 16 411
Спасибо сказали: 3262 раза




Я давно писал на Delphi и совсем не помню, можно ли там перегружать operator []. Если нельзя, то к одной и той же переменной ты обращаешься с индексом и без, я не знаю, какое обращение правильное.


--------------------
Я слежу за тобой!
* tolic.narod.ru

Цитата
Всегда приятно осознавать, что кто-то делает что-то хуже, чем делал бы ты, если бы умел.
Борис "Бонус" Репетур, "От винта!", выпуск 38.
Go to the top of the pageAdd Nick
 
+Quote Post
gamecreator
сообщение 20 Apr 2012, 23:32
Сообщение #8

Яблочный произвол!
Сообщений: 11 080
Спасибо сказали: 3988 раз




насколько я помню, в дельфи нельзя перегружать ничего
Go to the top of the pageAdd Nick
 
+Quote Post
hippocamus
сообщение 20 Apr 2012, 23:53
Сообщение #9

допустим, мяў
Сообщений: 24 074
Спасибо сказали: 13377 раз




В Делфи начиная с 2006 перегружать операторы можно. Только зачем?
Но попробуй убрать один randomize. А лучше оба из цикла. Сбрось генератор 1 раз при инициализации.


--------------------
Вокруг столько фильмов, книг, музыки - а природа какая невероятная!
Если тебе скучно жить - ты совсем дурак. (Татьяна Черниговская)
Go to the top of the pageAdd Nick
 
+Quote Post
Etoprostoya
сообщение 20 Apr 2012, 23:58
Сообщение #10

Etoslozhnostatus
Сообщений: 8 576
Спасибо сказали: 15974 раза




Цитата
Или я дурак или одно из двух

А где опрос?


--------------------
- Да ну!?
- Horn of the Argali гну!


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
gamecreator
сообщение 21 Apr 2012, 00:02
Сообщение #11

Яблочный произвол!
Сообщений: 11 080
Спасибо сказали: 3988 раз




если бы ты учил матан (конкретно - пределы), то знал бы почему его нет smile.gif
Go to the top of the pageAdd Nick
 
+Quote Post
Guevara-chan
сообщение 21 Apr 2012, 09:41 (Сообщение отредактировал Guevara-chan - 21 Apr 2012, 10:27)
Сообщение #12

•●Revolucionario●•
Сообщений: 2 467
Спасибо сказали: 5936 раз




Цитата
Или "=0", или "=1", или "<1". Это Pascal, здесь Integer нельзя использовать вместо Boolean.

А, ну да, Вирт центрального процессора же... Тогда "=0", там хоть можно обойтись and reg, reg вместо cmp reg, imm. Байт, но приятно.

Цитата(tolich @ 21 Apr 2012, 00:45) *
Если нельзя, то к одной и той же переменной ты обращаешься с индексом и без, я не знаю, какое обращение правильное.

И самое смешное, что ровно до этого автор пишет: "Shape1.Top:=Shape1.Top+1". Кстати говоря, это называется "Inc(Shape1.Top)".


--------------------
life MOV.I #life+1, *life
האם יש זמן לעצור ?
Go to the top of the pageAdd Nick
 
+Quote Post
gamecreator
сообщение 21 Apr 2012, 11:04
Сообщение #13

Яблочный произвол!
Сообщений: 11 080
Спасибо сказали: 3988 раз




Цитата(Guevara-chan @ 21 Apr 2012, 09:41) *
Байт, но приятно.
это уже от оптимизации зависит. емнип, рандом выдает int16, так что как минимум 2 байта там будет.
Go to the top of the pageAdd Nick
 
+Quote Post
FBX
сообщение 21 Apr 2012, 11:39
Сообщение #14

🐓🐓🐓🐓🐓🐓🐓
Сообщений: 1 845
Спасибо сказали: 1570 раз




Цитата
Inc(Shape1.Top)

Вроде так нельзя делать, т.к. это property, реализованный через сеттеры и геттеры, а может в новых дельфях можно, я даже и не знаю.


--------------------
using namespace fbx;


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
Guevara-chan
сообщение 21 Apr 2012, 11:56 (Сообщение отредактировал Guevara-chan - 21 Apr 2012, 12:08)
Сообщение #15

•●Revolucionario●•
Сообщений: 2 467
Спасибо сказали: 5936 раз




Цитата
емнип, рандом выдает int16, так что как минимум 2 байта там будет.

Изменяет:

Цитата(http://www.delphibasics.ru/Random.php)
function Random ( LimitPlusOne : Integer ) : Integer

...А Integer нынче приравнян к Int32...

Цитата
Вроде так нельзя делать, т.к. это property, реализованный через сеттеры и геттеры, а может в новых дельфях можно, я даже и не знаю.

AFAIR эту проблемe решили вводом полновесной перегрузки: INC же оператором считается ?


--------------------
life MOV.I #life+1, *life
האם יש זמן לעצור ?
Go to the top of the pageAdd Nick
 
+Quote Post
Berserker
сообщение 21 Apr 2012, 12:21
Сообщение #16

Immortal
Сообщений: 1 468
Спасибо сказали: 1153 раза




Цитата
Вирт центрального процессора же

Это неудачный юмор?

По теме: одно из двух.

Цитата
Вроде так нельзя делать, т.к. это property, реализованный через сеттеры и геттеры, а может в новых дельфях можно, я даже и не знаю.

Верно. И INC - предопределённая процедура.


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
gamecreator
сообщение 21 Apr 2012, 12:40
Сообщение #17

Яблочный произвол!
Сообщений: 11 080
Спасибо сказали: 3988 раз




Цитата(Berserker @ 21 Apr 2012, 12:21) *
Это неудачный юмор?
наверно все же намек на то, что особенности синтаксиса языка каким-то макаром влияют на результирующий код. тот же inc должен работать со свойствами, имеющими сет и гет одновременно и являющимися по сути синтаксическим сахаром.


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
Guevara-chan
сообщение 21 Apr 2012, 13:33 (Сообщение отредактировал Guevara-chan - 21 Apr 2012, 13:53)
Сообщение #18

•●Revolucionario●•
Сообщений: 2 467
Спасибо сказали: 5936 раз




Цитата
Это неудачный юмор?

Это recordatio stultitia. Причем бессмысленной и беспощадной. Кстати, коли уж мы заговорили о булевой логике:

Код
Macro RandomSgn() : (1 | -Random(1)) : EndMacro
; Выдает единицу со случайным знаком.

...Так что никаких (y)if(f)’ов там, по большому счету, не нужно. Но сможет ли ОП адаптировать такой сложный код ?

Цитата
И INC - предопределённая процедура.

Вроде местный аналог макрокоманды, если не ошибаюсь.


--------------------
life MOV.I #life+1, *life
האם יש זמן לעצור ?
Go to the top of the pageAdd Nick
 
+Quote Post
Berserker
сообщение 21 Apr 2012, 13:56
Сообщение #19

Immortal
Сообщений: 1 468
Спасибо сказали: 1153 раза




Цитата
Это recordatio stultitia. Причем бессмысленной и беспощадной.

А если на русском? Это такой язык, который не японский, латинский и не английский.

Цитата
...И никаких (y)if(f)’ов здесь, по большому счету, не нужно.

Макросы? Помилуй, Хрона, начни уже читать о проектировании языков программирования, безопасной разработке программного обеспечения и доказательном программирования. Иначе всю жизнь вокруг тактов, байтов и низкоуровневых вещей ходить будешь.
Код
FUNCTION RandSign: INTEGER;
BEGIN
  RESULT := 1 - 2 * Random(2);
END;


Цитата
Вроде местный аналог макрокоманды, если не ошибаюсь.

Ошибаешься. Это предопределённая процедура System.INC. Она раскрывается компилятором в коде, но это деталь реализации определённого компилятора.

Цитата
наверно все же намек на то, что особенности синтаксиса языка каким-то макаром влияют на результирующий код. тот же inc должен работать со свойствами, имеющими сет и гет одновременно и являющимися по сути синтаксическим сахаром.

INC это предопределённая процедура, принимающая аргумент по ссылке (VAR). Свойства по ссылке передаваться не могут по понятным причинам. В конечном итоге они могут вести к функциям.


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
Guevara-chan
сообщение 21 Apr 2012, 14:02 (Сообщение отредактировал Guevara-chan - 21 Apr 2012, 14:05)
Сообщение #20

•●Revolucionario●•
Сообщений: 2 467
Спасибо сказали: 5936 раз




Цитата
А если на русском?

Хирт - вуй. Все по аналогии (же).

Цитата
Макросы ? Помилуй, Хрона, начни уже читать о проектировании языков программирования, безопасной разработке программного обеспечения и доказательном программирования.

Ну, почитала: http://nemerle.org/Macros

Цитата
Она раскрывается компилятором в коде, но это деталь реализации определённого компилятора.

Тогда, простите, может еще к System.Pi следует относиться как функции ?

Цитата
Свойства по ссылке передаваться не могут по понятным причинам.

По ссылке, в данном случае, может быть передан адрес соотв. поля в памяти.
...Я уж не говорю, что вообще-то должны, ибо на то оно и ЯВУ. Абстракция.


--------------------
life MOV.I #life+1, *life
האם יש זמן לעצור ?
Go to the top of the pageAdd Nick
 
+Quote Post
Berserker
сообщение 21 Apr 2012, 14:08 (Сообщение отредактировал Berserker - 21 Apr 2012, 14:12)
Сообщение #21

Immortal
Сообщений: 1 468
Спасибо сказали: 1153 раза




Цитата
Хирт - вуй. Все по аналогии (же).

Не вижу смысла в дальнейшей беседе.

Цитата
Тогда, простите, к System.Pi следует относиться как функции ?

А как она объявлена? FUNCTION Pi : EXTENDED;

Цитата
По ссылке, в данном случае, может быть передан адрес соотв. поля в памяти.

Покажу лишь простой пример:

PROPERTY A: INTEGER READ fA;

INC(A); // нельзя, свойство недоступно на запись

PROPERTY A: INTEGER READ fA WRITE fA;

INC(A); // предположим, что можно, но...

PROPERTY A: INTEGER READ GetA WRITE fA; // изменилось определение

Весь код мёртвый, модульность и раздельная компиляция не работают. Было поле, стала функция. Поэтому даже не самые умные люди такие простые вещи понимают при разработке языков. За сим откланиваюсь, имея столько свободного времени, ликбезом можно заниматься самостоятельно.


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
gamecreator
сообщение 21 Apr 2012, 14:33
Сообщение #22

Яблочный произвол!
Сообщений: 11 080
Спасибо сказали: 3988 раз




Цитата(Berserker @ 21 Apr 2012, 13:56) *
безопасной разработке программного обеспечения
ок, замени макрос на inline. те же яйца, только в профиль.
Цитата(Berserker @ 21 Apr 2012, 13:56) *
INC это предопределённая процедура, принимающая аргумент по ссылке (VAR). Свойства по ссылке передаваться не могут по понятным причинам. В конечном итоге они могут вести к функциям.
но сделать инкремент универсальным можно же. propertySet(propertyGet()+1)
Цитата(Guevara-chan @ 21 Apr 2012, 14:02) *
Тогда, простите, может еще к System.Pi следует относиться как функции ?
уже представил компилятор, в котором пи = 4
Цитата(Guevara-chan @ 21 Apr 2012, 14:02) *
По ссылке, в данном случае, может быть передан адрес соотв. поля в памяти.
компилятор не оптимизирует, операторы не универсальны. вообще бардак. о какой передаче после этого может быть речь?
Go to the top of the pageAdd Nick
 
+Quote Post
Guevara-chan
сообщение 21 Apr 2012, 14:43 (Сообщение отредактировал Guevara-chan - 21 Apr 2012, 21:24)
Сообщение #23

•●Revolucionario●•
Сообщений: 2 467
Спасибо сказали: 5936 раз




Цитата
Не вижу смысла в дальнейшей беседе.

А в чем ты видишь смысл, позволь полюбопытствовать ? В вырожденной перегрузке long word’а под названием ‘Boolean’, коею компилятор даже не желает по-тихому обработать, чтобы никто не знал ? Даже, пожалуй, не поленюсь дать пример:

Код
If ReadFile(0, “имя_файла”); Открываем файл на чтение. Если получилось...
; [Читаем данные]
Closefile(0); ...Закрываем файл.
Else; [Выводим ошибку]
Endif

...Да, ‘ReadFile’ в данном случае возвращает какой-то свой код, о значении которого я могу не задумываться. Теперь попробуй то же самое на Delphi.

Цитата
А как она объявлена?

Такие подробности должны волновать доказательного программиста, коий принципиально не в курсе о байтах и тактах ?

Цитата
Весь код мёртвый, модульность и раздельная компиляция не работают.

А если все INC'и из примера заменить на A := A + 1, то он оживет обратно ?

Цитата
уже представил компилятор, в котором пи = 4

Есть немного: http://www.bestwtf.com/2010/11/explaining-why-pi-is-4.html

Цитата
компилятор не оптимизирует, операторы не универсальны. вообще бардак. о какой передаче после этого может быть речь?

После берсеркерского траура по модульности я вообще в способностях Delphi к работе с ООП сомневаться начала...
Но вообще помимо Get/Set простым полям можно просто еще ввести автоконструируемое по умолчанию AccessPtr.

...Что я, собственно, пытаюсь сказать: инструмент разработки должен либо самостоятельно решать технические неувязки (HLL:Prolog,REBOL,Nemerle,etc), либо предоставить свободу работы с ними программисту (MLL:PureBASIC,C,FORTH,etc). Одно из двух, иначе получается полное Delphi.


--------------------
life MOV.I #life+1, *life
האם יש זמן לעצור ?
Go to the top of the pageAdd Nick
 
+Quote Post
Throutle
сообщение 21 Apr 2012, 18:50
Сообщение #24

Freedom Fighter
Сообщений: 1 852
Спасибо сказали: 4031 раз




Цитата(Berserker @ 21 Apr 2012, 14:56) *
Код
FUNCTION RandSign: INTEGER;
BEGIN
  RESULT := 1 - 2 * Random(2);
END;


Вот такая функция вполне вписывается в пройденную на данный момент часть обучения, попробую как будут делфя под рукой (дома не ставлю этого монстра)...

З.Ы. Единственный кто понял вопрос правильно... Хотя бы потому что был интересен ответ не на профессиональном уровне и даже не на моём, а на уровне текущей части обучения... СПС!


--------------------
In this wild and woolly universe of ours, there are only three things you can count on: your brains, your bros, and your bike!
Go to the top of the pageAdd Nick
 
+Quote Post
Guevara-chan
сообщение 21 Apr 2012, 18:56 (Сообщение отредактировал Guevara-chan - 21 Apr 2012, 21:54)
Сообщение #25

•●Revolucionario●•
Сообщений: 2 467
Спасибо сказали: 5936 раз




Цитата
Единственный кто понял вопрос правильно...

Вообще-то он просто "перевел" за тебя мой пример, но да как будет угодно. Тему закрывать ?


--------------------
life MOV.I #life+1, *life
האם יש זמן לעצור ?
Go to the top of the pageAdd Nick
 
+Quote Post
pHOMM
сообщение 21 Apr 2012, 19:41
Сообщение #26

Что же Вы , Маэстры, ну-ка гряньте нам что-нибудь !!!
Сообщений: 226
Спасибо сказали: 171 раз




А не проще не делать привязку к знаку а просто
Код
if random(2) = 1 then
shape1.top := shape1.top + 1
else shape1.top := shape1.top - 1;
if random(2) = 1 then
shape1.left := shape1.left + 1
else shape1.left := shape1.left - 1;

Randomize делается 1 раз на старте программы - традиционно в FormCreate

Также можно упростить код из 1 поста до вида:
Код
shape1.left := shape1.left + RandSign; // Berserker's randsign
shape1.top := shape1.top + RandSign;


Обсуждение о булеане считаю оффтопом, давайте не холиварить, каждый инструмент для своей задачи (в паскале, собственно, низкий порог вхождения без неявностей типа скрытого каста инта в бул, который если нужен, всегда можно сделать Ord(bool) или даже непосредственно Integer(bool)) Инк-обсуждение тоже оффтоп ))

Темку можно и не закрывать, чувствую, что не один вопрос ещё будет


--------------------
Это всё я : кодинГ, мэпмейкинГ, скриптинГ

Инфо о моих проектах, в основном геройских, http://phomm.narod.ru
Раздел моей тактической игры Интакт http://forum.df2.ru/index.php?showforum=135


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
gamecreator
сообщение 21 Apr 2012, 20:01
Сообщение #27

Яблочный произвол!
Сообщений: 11 080
Спасибо сказали: 3988 раз




Цитата(pHOMM @ 21 Apr 2012, 19:41) *
в паскале, собственно, низкий порог вхождения без неявностей типа скрытого каста инта в бул
в c# же вообще неявных кастов не бывает, обязательная запись способа передачи параметра при вызове функций, сборщик мусора и нет параметров по умолчанию. куда дружелюбнее к новичкам, чем паскаль.


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
feanor
сообщение 21 Apr 2012, 20:31
Сообщение #28

laughed as one fey
Сообщений: 12 167
Спасибо сказали: 20596 раз




Цитата
в c# же вообще неявных кастов не бывает

Расширяющие же, не? Или они не в счет?
Go to the top of the pageAdd Nick
 
+Quote Post
gamecreator
сообщение 21 Apr 2012, 21:39
Сообщение #29

Яблочный произвол!
Сообщений: 11 080
Спасибо сказали: 3988 раз




хм, почему-то я думал они только для классов работают. но по крайней мере они не теряют информацию
Go to the top of the pageAdd Nick
 
+Quote Post
Guevara-chan
сообщение 21 Apr 2012, 21:58 (Сообщение отредактировал Guevara-chan - 21 Apr 2012, 22:00)
Сообщение #30

•●Revolucionario●•
Сообщений: 2 467
Спасибо сказали: 5936 раз




Не поленилась, вот, дизассемблировать свой вариант RandomSgn:

Код
push dword 0x1
call dword 0x4054fb
mov ebx, eax
neg ebx
or ebx, 0x1

...и, дабы уж сразу, аналог by Berserker...

Код
push dword 0x1
call dword 0x4054fb
mov ebx, eax
add ebx, ebx
neg ebx
inc ebx

Дело, в принципе, хозяйское (+/- операнд). Suum cique.


--------------------
life MOV.I #life+1, *life
האם יש זמן לעצור ?
Go to the top of the pageAdd Nick
 
+Quote Post
gamecreator
сообщение 21 Apr 2012, 22:45
Сообщение #31

Яблочный произвол!
Сообщений: 11 080
Спасибо сказали: 3988 раз




не пойму зачем оно переносит в ebx, если результат функции все равно в eax возвращать.
Go to the top of the pageAdd Nick
 
+Quote Post
Guevara-chan
сообщение 21 Apr 2012, 23:00 (Сообщение отредактировал Guevara-chan - 22 Apr 2012, 09:27)
Сообщение #32

•●Revolucionario●•
Сообщений: 2 467
Спасибо сказали: 5936 раз




Цитата(gamecreator @ 21 Apr 2012, 23:45) *
не пойму зачем оно переносит в ebx, если результат функции все равно в eax возвращать.

У компилятора PB, увы, много фобий касательно регистра EAX. Это - одна из них.


--------------------
life MOV.I #life+1, *life
האם יש זמן לעצור ?
Go to the top of the pageAdd Nick
 
+Quote Post
Throutle
сообщение 25 May 2012, 21:17
Сообщение #33

Freedom Fighter
Сообщений: 1 852
Спасибо сказали: 4031 раз




Ещё 1 вопросик, незнаю как бы нагуглить, потому решил спросить...

В form1 на клик по кнопке происходит form2.show; в form2 на клик по кнопке происходит form2.hide; form1.show;...

Так всё работает как надо, а вот если в form1 делать не form2.show а form2.showmodal, то после нажатия в form2 нужной кнопки она скрывается, но фокус form1 не возвращается...

Вот собственно и вопрос: как вернуть фокус первой форме, если вторая открыта из него в модальном режиме?


--------------------
In this wild and woolly universe of ours, there are only three things you can count on: your brains, your bros, and your bike!
Go to the top of the pageAdd Nick
 
+Quote Post
Guevara-chan
сообщение 26 May 2012, 11:37 (Сообщение отредактировал Guevara-chan - 26 May 2012, 12:00)
Сообщение #34

•●Revolucionario●•
Сообщений: 2 467
Спасибо сказали: 5936 раз




http://msdn.microsoft.com/en-us/library/wi...1(v=vs.85).aspx ? Ну или местное SetFocus...


--------------------
life MOV.I #life+1, *life
האם יש זמן לעצור ?
Go to the top of the pageAdd Nick
 
+Quote Post
Throutle
сообщение 26 May 2012, 13:38
Сообщение #35

Freedom Fighter
Сообщений: 1 852
Спасибо сказали: 4031 раз




Всё, вопрос снят, прослушал, что закрывать не hide`ом, а всего-навсего close`ом )


--------------------
In this wild and woolly universe of ours, there are only three things you can count on: your brains, your bros, and your bike!
Go to the top of the pageAdd Nick
 
+Quote Post
Throutle
сообщение 30 May 2012, 21:18 (Сообщение отредактировал Throutle - 30 May 2012, 21:18)
Сообщение #36

Freedom Fighter
Сообщений: 1 852
Спасибо сказали: 4031 раз




И снова я...

Нужно ограничить пользователя при вводе данных в стринггрид: ввод минуса не в первую позицию, ввод второго минуса, ввод чисел перед минусом.
Для эдита я решал это так:

Код
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
case key of
'0'..'9', #8:
if (Edit1.SelStart=0)and(pos('-',Edit1.Text)>0)
then Key:=#0;
'-':
  if (Edit1.SelStart<>0)or(pos('-',Edit1.Text)>0)
  then Key:=#0;
else
Key:=#0;
end;
end;


А в стринггриде нет селстарта, потому единственное что работает так же это запрет ввода 2-го минуса:

Код
'-':
  if pos('-',StringGrid1.Cells[StringGrid1.Col,StringGrid1.Row])>0
  then Key:=#0;


Не подскажете, что можно сделать для оставшихся 2-х ситуаций?


--------------------
In this wild and woolly universe of ours, there are only three things you can count on: your brains, your bros, and your bike!
Go to the top of the pageAdd Nick
 
+Quote Post
tolich
сообщение 30 May 2012, 21:47
Сообщение #37

😸🧡✊✌️
Сообщений: 16 411
Спасибо сказали: 3262 раза




На всякий ввод пользователя тут же пробуй преобразовать его в число, а затем на равенство строке '-'. Если оба теста проваливаются, тут же возврашай предыдущий текст. Qt-шный QIntValidator именно так работает.


--------------------
Я слежу за тобой!
* tolic.narod.ru

Цитата
Всегда приятно осознавать, что кто-то делает что-то хуже, чем делал бы ты, если бы умел.
Борис "Бонус" Репетур, "От винта!", выпуск 38.


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
FBX
сообщение 30 May 2012, 23:11
Сообщение #38

🐓🐓🐓🐓🐓🐓🐓
Сообщений: 1 845
Спасибо сказали: 1570 раз




Может что-то типа такого? http://forum.boolean.name/showthread.php?t=5561


--------------------
using namespace fbx;


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 18 August 2025 - 17:41
Copyright by Алексей Крючков
Strategy Gamez by GrayMage
Programming by Degtyarev Dmitry
  Яндекс.Метрика