Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

fORM

1.9K
09 февраля 2004 года
Solomon
70 / / 24.12.2003
Господа!
Подскажите, не было ли у кого похожего случая -
1) есть Form1, из которой динамически создается Form2 кликом на Cheke(соответственно Checked = true создает, Checked = false уничтожает). Однако form2 - Dialog, которую пользователь может закрыть еще и нажав border icon. Можно ли сделать так, что закрывая ее таким образом, в Form1 было Check1->Checked = false?
2) Загрузка bmp возможна в том числе и через LoadFromResurseName/ID. Ресурс имеется в виду .res? У Архангельского красноречиво написано, что первое - "загрузка файла из ресурса по имени", а второе - "по идентификатору". Однако, попробовав вариант мз справки, ничего не получилось. Ведь если таких картинок несколько десятков, и они должны храниться в одной директории с .exe лучше бы их засунуть в один файл...
247
09 февраля 2004 года
wanja
1.2K / / 03.02.2003
Цитата:
Originally posted by Solomon
Господа!
Подскажите, не было ли у кого похожего случая -
1) есть Form1, из которой динамически создается Form2 кликом на Cheke(соответственно Checked = true создает, Checked = false уничтожает). Однако form2 - Dialog, которую пользователь может закрыть еще и нажав border icon. Можно ли сделать так, что закрывая ее таким образом, в Form1 было Check1->Checked = false?


Сделяй в обработчике onClose Form2

Form1->Checked=false;

Цитата:

2) Загрузка bmp возможна в том числе и через LoadFromResurseName/ID. Ресурс имеется в виду .res? У Архангельского красноречиво написано, что первое - "загрузка файла из ресурса по имени", а второе - "по идентификатору". Однако, попробовав вариант мз справки, ничего не получилось. Ведь если таких картинок несколько десятков, и они должны храниться в одной директории с .exe лучше бы их засунуть в один файл...


Они должны быть в экзешнике, который пытается их загрузить.

1.9K
09 февраля 2004 года
Solomon
70 / / 24.12.2003
Цитата:
Originally posted by wanja

Они должны быть в экзешнике, который пытается их загрузить.



Спасибо! Однако, почему, когда я удаляю bmp из одноименной директории, в момент загрузки он мне пишет messageBox "Не возможно загрузить файл *.bmp"? И после ОК делаеь пустую рамку?

348
09 февраля 2004 года
Saris
389 / / 14.03.2003
Цитата:
Originally posted by Solomon


Спасибо! Однако, почему, когда я удаляю bmp из одноименной директории, в момент загрузки он мне пишет messageBox "Не возможно загрузить файл *.bmp"? И после ОК делаеь пустую рамку?


А ты их динамически грузишь или в процессе проектирования?

1.9K
09 февраля 2004 года
Solomon
70 / / 24.12.2003
Цитата:
Originally posted by Saris

А ты их динамически грузишь или в процессе проектирования?


после динамического создания новой формы -
Image1->Picture->Bitmap->LoadFromFile("*.bmp");
Кстати, а как сделать внутри какой-то процедуры, например, Buttom-click, после операторов
if(........)
{
if(........)
{
........
}
}
повторное нажатие Button1?
То есть, если быди выполнены все операторы if и нажата Button1? Я пробовал дальше писать
if(Button1->OnClick())
, но..... лажа

348
09 февраля 2004 года
Saris
389 / / 14.03.2003
Цитата:
Originally posted by Solomon

после динамического создания новой формы -
Image1->Picture->Bitmap->LoadFromFile("*.bmp");


Поэтому и матерится. Ты пытаешься загрузить внешний файл, а ты его уже удалил.

Цитата:
Originally posted by Solomon

Кстати, а как сделать внутри какой-то процедуры, например, Buttom-click, после операторов
if(........)
{
if(........)
{
........
}
}
повторное нажатие Button1?
То есть, если быди выполнены все операторы if и нажата Button1? Я пробовал дальше писать
if(Button1->OnClick())
, но..... лажа


Button1->Click();

1.9K
09 февраля 2004 года
Solomon
70 / / 24.12.2003
Цитата:
Originally posted by Saris

Поэтому и матерится. Ты пытаешься загрузить внешний файл, а ты его уже удалил.



Да, так вот я потому и спрашивал - если таких .bmp несколько десятков, есть ли способ их запихнуть в какой-то один ресурс? Или хотя бы во внутреннюю папку?

348
09 февраля 2004 года
Saris
389 / / 14.03.2003
Цитата:
Originally posted by Solomon


Да, так вот я потому и спрашивал - если таких .bmp несколько десятков, есть ли способ их запихнуть в какой-то один ресурс? Или хотя бы во внутреннюю папку?


Их можно загрузить например в ImageList, правда тогда они будут внутри EXE'шника. А во внутреннюю подпапку их запихнуть проблем я думаю не составит.

1.9K
11 февраля 2004 года
Solomon
70 / / 24.12.2003
Цитата:
Originally posted by Saris

Про Button1->Click();


если вот здесь -
void __fastcall TForm2::Button1Click(TObject *Sender)
{
if(Form1->Speed1->Down)
{
if(Form1->RadioGr->ItemIndex == 0)
{
if(Form1->Radio1->ItemIndex == 0)
{
if(RadioCh1->ItemIndex == -1)
{Application->MessageBox("Выберите одно из трех значений!",
"MB - выбор значения", MB_ICONWARNING);}
if(RadioCh1->ItemIndex == 0)
{Label1->Caption = “…";
Image1->Picture->Bitmap->LoadFromFile("Sh+.bmp.");
RadioCh1->Visible = false;}
if(RadioCh1->ItemIndex == 1 || RadioCh1->ItemIndex == 2)
{Label1->Caption = "…";
Image1->Picture->Bitmap->LoadFromFile("Sh-.bmp.");
RadioCh1->Visible = false;}

Button1->Click();

}
}
}
}
выставить как ты написал, то все просто зависнет, может ты имел в виду что-то другое?

2)

Цитата:
А во внутреннюю подпапку их запихнуть проблем я думаю не составит.


для динамически создаваемой формы? Я пробовал - если их нет в одной директории в exe, то он "матерится", варианты есть?

348
11 февраля 2004 года
Saris
389 / / 14.03.2003
Конечно зависнет, ты же в обработчике OnClick кнопки Button1 вызываешь её же нажатие. Поэтому её просто циклит.

А ты к картинкам путь правильно пишешь???
1.9K
12 февраля 2004 года
Solomon
70 / / 24.12.2003
Цитата:
Originally posted by Saris

А ты к картинкам путь правильно пишешь???


А какой путь? такой?
Image1->Picture->Bitmap->LoadFromFile(.../pictures/"*.bmp");
я так написал, а он мне - нельзя найти файл Pictures*.bmp!

2)Скажи еще такую вещь - объявляю я int-переменные в динамически-создаваемой форме (вверху, после TForm *TForm). Когда форма унижтожается методом Close(); все значения этих переменных сохраняются, и когда запускаешь эту форму заново, значения их прибавляются к предыдущим. Если же их объявить внутри процедуры void __fastcall TForm2::Button1Click(TObject *Sender)
{
int a;
int b;
int c;
if(Form1->Speed1->Down)
{
if(Form1->RadioGr->ItemIndex == 0)
{
if(Form1->Radio1->ItemIndex == 0)
{
if(RadioCh1->ItemIndex == -1)
{Application->MessageBox("Выберите одно из трех значений!",
"MB - выбор значения", MB_ICONWARNING);}
if(RadioCh1->ItemIndex == 0)
{Label1->Caption = “…";
Image1->Picture->Bitmap->LoadFromFile("Sh+.bmp.");
RadioCh1->Visible = false;
a++;
b++;
Form1->Edit1->Caption = IntToStr(a);
Form1->Edit2->Caption = IntToStr(b);}
if(RadioCh1->ItemIndex == 1 || RadioCh1->ItemIndex == 2)
{Label1->Caption = "…";
Image1->Picture->Bitmap->LoadFromFile("Sh-.bmp.");
RadioCh1->Visible = false;
a++;
c++;
Form1->Edit1->Caption = IntToStr(a);
Form1->Edit2->Caption = IntToStr(c);}
}

}
}
}
}
, то области действия не хватает на другие подциклы if()(?) А надо, чтобы все значения обнулировались.
Коненчно понимаю, что вопроса простой, но...

348
13 февраля 2004 года
Saris
389 / / 14.03.2003
Для начала, после того как закрываешь форму, освобождай выделенную память. Тогда ничего остаться не должно.

А у тебя есть файл с названием *.bmp ???

Попробуй так:
Image1->Picture->Bitmap->LoadFromFile("путь к файлу"+zzz.bmp);
1.9K
13 февраля 2004 года
Solomon
70 / / 24.12.2003
Цитата:
Originally posted by Saris
Для начала, после того как закрываешь форму, освобождай выделенную память. Тогда ничего остаться не должно.

А у тебя есть файл с названием *.bmp ???

Попробуй так:
Image1->Picture->Bitmap->LoadFromFile("путь к файлу"+zzz.bmp);



Да-да, уже пробовал!
Кажется , никакого пути кроме простого LOadFrom нет. Смотрел я Архангельского - при уничтожении формы можно прописывать в OnClose() Action = caFree; , тогда освобождается память, также можно писать delete Form2;, однако все это не работает!
Причем очень странно!
Что значит вот это сообщение -

Project raised exception class EAccessViolation with message “Access Violation at address 400EE72E in module VCL60.BPL”. Read of address “FFFFFFFF”. Process stopped. Use Step or Run to continue. ?
В справке я смотрел - написано, что либо exeption lanquage либо exeption OS! Это может быть связано с тем, что язык интерфейса русский? И чаво тогда делать? Это сообщение возникает, когда во вновь созданной динамической форме кликаешь на кнопки.
эТо может быть связанго с памятью?

348
13 февраля 2004 года
Saris
389 / / 14.03.2003
Цитата:
Originally posted by Solomon


Да-да, уже пробовал!
Кажется , никакого пути кроме простого LOadFrom нет. Смотрел я Архангельского - при уничтожении формы можно прописывать в OnClose() Action = caFree; , тогда освобождается память, также можно писать delete Form2;, однако все это не работает!
Причем очень странно!
Что значит вот это сообщение -

Project raised exception class EAccessViolation with message “Access Violation at address 400EE72E in module VCL60.BPL”. Read of address “FFFFFFFF”. Process stopped. Use Step or Run to continue. ?
В справке я смотрел - написано, что либо exeption lanquage либо exeption OS! Это может быть связано с тем, что язык интерфейса русский? И чаво тогда делать? Это сообщение возникает, когда во вновь созданной динамической форме кликаешь на кнопки.
эТо может быть связанго с памятью?



Странно, напиши, код которым ты создаёшь форму и её уничтожаешь. И ещё, ты кнопки динамически создаёшь??? Это происходит только при кликах на кнопках или ещё когда??? Язык интерфейса тут не причём.

1.9K
13 февраля 2004 года
Solomon
70 / / 24.12.2003
Цитата:
Originally posted by Saris


Странно, напиши, код которым ты создаёшь форму и её уничтожаешь. И ещё, ты кнопки динамически создаёшь??? Это происходит только при кликах на кнопках или ещё когда??? Язык интерфейса тут не причём.



Ну вот код buttona главной формы, которая создает вторую форму:

void __fastcall TForm1::StartClick(TObject *Sender)
{

if(Form1->Speed1->Down == true)
{
if(Radio1->ItemIndex == 0)
{
if(Level->ItemIndex == 0)
{Application->CreateForm(__classid(TFormKQ), &FormKQ); //создание новой формы FormKeyQuestion - здесь должны быть вопросы, отвечая на которые и нажав кнопку Button1 создается третья форма - FormKeyAnswer, которая показывает, правильный ли ответ
FormKQ->Visible = true;
FormKQ->Image1->Picture->LoadFromFile("Sh.bmp");
FormKQ->Caption = "Первый вопрос";

//это счетчик ответов, на нем держится все взаимодействие двух динамических форм, именно в трех переменных ALL, R, L сохраняется значение, которое не очищается при закрытии форм
Form1->Static1->Caption = 0; //всего int All
Form1->Static2->Caption = 0; //правильных int R
Form1->Static3->Caption = 0; //неправильных int L

}
}
}
}

Это код клавиши, закрывающей вторую форму, то есть "Вернуться в главную форму"
void __fastcall TFormKQ::Button2Click(TObject *Sender)
{
FormKQ->Close();
Form1->Static1->Caption = "";
Form1->Static2->Caption = "";
Form1->Static3->Caption = "";
}

Это аналогичный код закрытия второй формы через system icon
void __fastcall TFormKQ::FormClose(TObject *Sender, TCloseAction &Action)
{
//хотел здесь написать как вверху FormKQ->Close(); , но он мне матернулся
Form1->Static1->Caption = "";
Form1->Static2->Caption = "";
Form1->Static3->Caption = "";
}

Этот код для возвращения второй формы, так как она существует в памяти, но просто Visible = false, потом =true, так они появляются поочередно - вопрос - ответ, отсюда загружаются новые вопросы
void __fastcall TFormKQ::FormShow(TObject *Sender)
{
if(Form1->Speed1->Down == true)
{
if(Form1->Radio1->ItemIndex == 0)
{
if(Form1->Level->ItemIndex == 0)
{
if(Form1->Static1->Caption == 1)
{FormKQ->Panel1->Color = clSkyBlue;
FormKQ->RadioGr->ItemIndex = -1;
FormKQ->Image1->Picture->LoadFromFile("B.bmp");
FormKQ->Caption = "Второй вопрос";}
if(Form1->Static1->Caption == 2)
{FormKQ->Panel1->Color = clSkyBlue;
FormKQ->RadioGr->ItemIndex = -1;
FormKQ->Image1->Picture->LoadFromFile("N.bmp");
FormKQ->Caption = "Третий вопрос";}

}
}


}

}

Создание второй динам. формы
//------------------------------------------------
int All = 0;
int R = 0;
int L = 0;

void __fastcall TFormKQ::Button1Click(TObject *Sender)
{
if(Form1->Speed1->Down == true)
{
if(Form1->Radio1->ItemIndex == 0)
{
if(Form1->Level->ItemIndex == 0)
{
if(Form1->Static1->Caption == 0)
{
if(FormKQ->RadioGr->ItemIndex == 0)
{Application->CreateForm(__classid(TFormKA), &FormKA);
FormKA->Visible = true; //Это кнопка, которая создает вторую динамическую форму FormKeyAnswer
FormKQ->Visible = false; //а первую динамическую скрывает, идея в том, чтобы при вопросе-ответе они были созданы, но только одна видна, а при возвращении в главную форму через Button2 и там и там они унижтожались, и при запуске заново переменные отсчитывали бы все по-новому
FormKA->Image1->Picture->LoadFromFile("Sh+.bmp");
FormKA->Label2->Caption = "Это ДИЕЗ";
FormKA->Caption = "Правильный ответ на первый вопрос";
All = All++;
R = R++;
L = L;
Form1->Static1->Caption = IntToStr(All);
Form1->Static2->Caption = IntToStr(R);
Form1->Static3->Caption = IntToStr(L);}
if(FormKQ->RadioGr->ItemIndex == 1 || FormKQ->RadioGr->ItemIndex == 2)//здесь его тормозит но том сообщении
{FormKA->Visible = true;
FormKQ->Visible = false;
FormKA->Label1->Caption = "Неправильно!";
FormKA->Caption = "Неправильный ответ на первый вопрос";
FormKA->Label2->Caption = "Это ДИЕЗ";
FormKA->Image1->Picture->LoadFromFile("Sh-.bmp");
All = All++;
R = R;
L = L++;
Form1->Static1->Caption = IntToStr(All);
Form1->Static2->Caption = IntToStr(R);
Form1->Static3->Caption = IntToStr(L);}
if(FormKQ->RadioGr->ItemIndex == -1)
{ShowMessage("Выберите одно из трех значений.");} }

if(Form1->Static1->Caption == 1)
{
if(FormKQ->Visible == true) // это тоже такая бяка - без этого условия ничего не работало, только, когда форма видна, что-то происходит, отсюда обмен с void __fastcall TFormKQ::FormShow(TObject *Sender)
{
if(FormKQ->RadioGr->ItemIndex == 1)
{FormKA->Visible = true;
FormKQ->Visible = false;
FormKA->Image1->Picture->LoadFromFile("B+.bmp");
FormKA->Label2->Caption = "Это БЕМОЛЬ.";
FormKA->Label1->Caption = "Совершенно правильно!";
FormKA->Caption = "Правильный ответ на второй вопрос";
All = All++;
R = R++;
L = L;
Form1->Static1->Caption = IntToStr(All);
Form1->Static2->Caption = IntToStr(R);
Form1->Static3->Caption = IntToStr(L);}
if(FormKQ->RadioGr->ItemIndex == -1)
{ShowMessage("Выберите одно из трех значений.");}
if(FormKQ->RadioGr->ItemIndex == 0 || FormKQ->RadioGr->ItemIndex == 2)
{FormKA->Visible = true;
FormKQ->Visible = false;
FormKA->Label1->Caption = "Неправильно!";
FormKA->Caption = "Неправильный ответ на второй вопрос";
FormKA->Label2->Caption = "Это БЕМОЛЬ.";
FormKA->Image1->Picture->LoadFromFile("B-.bmp");
All = All++;
R = R;
L = L++;
Form1->Static1->Caption = IntToStr(All);
Form1->Static2->Caption = IntToStr(R);
Form1->Static3->Caption = IntToStr(L);} }

}

}

}
}

}

как можно догадаться, все .bmp здесб - рисунки с изображением диеза, бемоля или бекара

Это соответственно button на третьей форме, которая должна закрывать и себя и вторую формы
void __fastcall TFormKA::Button2Click(TObject *Sender)
{
FormKA->Close();
FormKQ->Close();
}

В общем здесь нет всех этих Action = caFree - я из выкинул, потому как ничего не добавляют...?
И еще "delete Form-такая-то" - можно ли это делать из самой формы?
Динамически кнопки не создавал - это надо для каждой кнопки прописать код типа CreateButton?

1.9K
14 февраля 2004 года
Solomon
70 / / 24.12.2003
Цитата:
Originally posted by Solomon
Ну люди!! Помогите кто-нибудь! А то тут шестнадцатеричные регистры уже новичков мочат!!!!

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог