(Часть 2) Я начинающий, подскажите пожалуйста как...
Прежде чем задать вопрос здесь, вы обязаны использовать
- Поиск по форуму, используя ключевые слова из вашего вопроса. Как правильно использовать поиск - читайте здесь
- Список наиболее часто задаваемых вопросов (FAQ)
- Поиск по предыдущей теме
Кроме того, прежде чем размещать сообщение, ознакомьтесь с правилами.
При размещении вопросов начинающих помимо указанной темы, будет выдаваться нарушение, а тема удаляться.
То потом я не смогу пользоваться свойствами данной картинки например:
ХХХ->Visible=true; Нужно как-то оставить такую информацию о выбраной картинке, чтобы добратся до её свойств...
То потом я не смогу пользоваться свойстваминно дай картинки например:
ХХХ->Visible=true; Нужно как-то оставить такую информацию о выбраной картинке, чтобы добратся до её свойств...
Ты не в состоянии прочесть что тебе пишут?
http://forum.codenet.ru/showpost.php?p=226028&postcount=1017
что тебе мешает поставить в приведенном коде вместо конкретного имени
Edit1->Text?
TImage *a = dynamic_cast<TImage*>(fmMain->FindComponent("Image1"));
a->Visible = true;
Пишет ошибку: Undefined symbol 'fmMain'
TImage *a = dynamic_cast<TImage*>(fmMain->FindComponent("Image1"));
a->Visible = true;
Пишет ошибку: Undefined symbol 'fmMain'
Логично вполне. fmMain - название главной формы, если не переименовывал форму, тогда, скорее всего название будет Form1
Зачем ее делать глобальной? Находи по имени объект и объявляй указатель по месту использования.
Мне в третий раз его привести - или вы всеже соизволите обратить свое царское внимание сами?
Kot ты неправильно понял мой вопрос. (Не спорю, в этом виноват только я).
TImage *a = dynamic_cast<TImage*>(Form1->FindComponent("Image1"));
a->Visible = true;
Этот код мне не подходит так как он присваивает переменной имя картинки "Image1", а я зарание не знаю какая именно картинка была нажата но мне нужна работать с её свойствами. Тоесть нужно чтобы при нажатии на саму картинку, гдето сохранялсь такая информация о ней, чтобы с любого места програмы можно было узнать какая именно картинка и поменять её свойства.
TImage *a = dynamic_cast<TImage*>(Form1->FindComponent("Image1"));
a->Visible = true;
Этот код мне не подходит так как он присваивает переменной имя картинки "Image1", а я зарание не знаю какая именно картинка была нажата но мне нужна работать с её свойствами. Тоесть нужно чтобы при нажатии на саму картинку, гдето сохранялсь такая информация о ней, чтобы с любого места програмы можно было узнать какая именно картинка и поменять её свойства.
Во-первых "с любого места" программы получать свойства картинки тебе совсем не надо. Все что тебе надо - это купить или скачать элементарный самоучитель - и хотябы ознакомиться с элементарными вещами. Договорились? потому как даже в теме для начинающих твои вопросы выглядят просто дико.
В твоем случае тебе необходимо присвоить всем твоим картинкам один и тот же обработчик события клика на нем и в нем уже обрабатывать то что тебе необходимо. Выглядеть это может следующим образом:
TImage *image = dynamic_cast<TImage*>(Sender);
String name = image->Name;
if(name == "Image1"){
image->Width = 100;
image->Height = 100;
}
else if(name == "Image2"){
image->Width = 150;
...
}
...
//и так далее
}
если же картинка у тебя не видна - тогда тебе нужно организовать компонент который тебе будет ее показывать и обрабатывать его событие. В простейшем случае это может быть RadioButton или CheckBox - и тогда тебе надо обрабатывать клик на нем и искать тот компонент с которым ты хочешь работать. Для этого используется метод формы FindComponent или обращение к массиву комопнентов на форме через свойство формы Components т.е.
//и т.д.
}
пример использования я приводил в теме для начинающих, и на форуме это обсуждалось неоднократно. Надеюсь объяснил понятно и доступно?
Во-первых, в папке программы должен находится текстовый файл sps.txt, содержащий список картинок, примерно такого вида:
.\\images\\1.jpg
.\\images\\2.jpg
.\\images\\3.jpg
.\\images\\1.jpg
.\\images\\5.jpg
.\\images\\6.jpg
.\\images\\7.jpg
.\\images\\8.jpg
.\\images\\2.jpg
.\\images\\8.jpg
.\\images\\11.jpg
.\\images\\12.jpg
.\\images\\6.jpg
.\\images\\3.jpg
.\\images\\7.jpg
.\\images\\12.jpg
.\\images\\0.jpg
.\\images\\5.jpg
.\\images\\11.jpg
он введен для простоты, каждая строка соответствует компоненту TImage и указывает откуда брать картинку. Это пример естественно, для если бы это была моя задача, я бы использовал библиотеку изображений, случайный алгоритм выбора и т.д. Но не важно.
Во вторых, использовать 20 компонентов TImage - это конечно глупость - но это я менять не стал, некогда, я просто убрал 20 остальных, которые у тебя содержали фоновую картинку :). Вобще то, для этой цели вполне достаточно одного компонента и на нем рисовать все необходимые картинки - но это просто немного усложняет саму программу - поэтому нах. В заголовочном файле, в закрытой части класса формы введено 5 переменных
void __fastcall SetPictureNull(const String &file);
TImage *current;
TStringList *List;
bool bStateStart,bStateOption;
int iCountPic;
указатель на TImage, указатель на список строк, переменные состояния, и количество открытых пар.
Так же объявлена функция для закрытия всех картинок.
В конструкторе:
: TForm(Owner)
{
current = NULL;
List = new TStringList;
List->LoadFromFile("sps.txt");
bStateStart = bStateOption = false;
CountPic = 0;
}
думаю тут нечего объяснять.
В функции таймера
{
int t = StrToInt(stTime->Caption);
if (t){
stTime->Caption=IntToStr(t-1);
Timer1->Enabled=true;
}
else{
String file = ".\\images\\europic.jpg";
SetPictureNull(file);
Timer1->Enabled = false;
imStart->Picture->LoadFromFile(".\\button\\start.jpg");
CountPic = 0;
ShowMessage("You are luser");
}
}
Тоже я думаю проблем никаких. Все переменные TTime выкинуты - они тут не нужны. В том числе и глобальная. Функция начала игры:
String file = ".\\images\\europic.jpg";
SetPictureNull(file);
current = NULL;
stTime->Caption="30";
Timer1->Enabled = true;
imStart->Picture->LoadFromFile(".\\button\\pause.jpg");
}
else if(Timer1->Enabled){
Timer1->Enabled = false;
imStart->Picture->LoadFromFile(".\\button\\start.jpg");
}
если таймер включен - он выключается - пауза. "Начать игру заново" - сделаешь сам.
И собственно функция клика по картинкам:
{
//
if(!Timer1->Enabled)return;
TImage *tmp = dynamic_cast<TImage*>(Sender);
if(!current){
current = tmp;
current->Picture->LoadFromFile(List->Strings[current->Tag]);
}
else if(current == tmp){
return;
}
else if(current->Tag != tmp->Tag){
current->Picture->LoadFromFile(".\\images\\europic.jpg");
current = NULL;
}
else if(current->Tag == tmp->Tag){
tmp->Picture->LoadFromFile(List->Strings[current->Tag]);
current = NULL;
CountPic+=2;
if(CountPic ==20){
ShowMessage("You are Win!!!");
Timer1->Enabled = false;
}
}
}
Естественно, свойство Tag у картинок должно быть установлено. Функции анимации кнопок и закрытия формы - не привожу разберешься сам. Это конечно не твои 1600 строк кода, но тоже не плохо :)
Чтобы можно было использовать созданный мной (в Borland C++ 2007) ActiveX, нужно иметь .LIC-файл! Каким образом его создать? :confused:
Решила написать простенькую игрушку.
Добавляю 2-а компонента checkbox.
первый - со свойством Caption - атака.
второй - со свойством Caption - защита.
Добавляю кнопку button1.
Добавляю memo1.
Чекаем первый чек бокс и жмём button1.
В мемо1 должно появится слово - атака. - значение Caption чекбокса1.
Я делала так:
{
if (CheckBox1->Checked);
CheckBox2->Visible=false;
Button1->Visible=true;
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Memo1->Lines->Text="Atack";
}
и так для второго чек бокса и поверх кнопки добавляла ещё одну кнопку.
Хочется научиться делать именно с одной кнопкой.
Есть ли какая нибудь литература по компонентам борланд,посоветуйте пожалуйсто.Либо подскажите здесь.
С Уважением!
Решила написать простенькую игрушку.
Добавляю 2-а компонента checkbox.
первый - со свойством Caption - атака.
второй - со свойством Caption - защита.
Добавляю кнопку button1.
Добавляю memo1.
Чекаем первый чек бокс и жмём button1.
В мемо1 должно появится слово - атака. - значение Caption чекбокса1.
Я делала так:
{
if (CheckBox1->Checked);
CheckBox2->Visible=false;
Button1->Visible=true;
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Memo1->Lines->Text="Atack";
}
и так для второго чек бокса и поверх кнопки добавляла ещё одну кнопку.
Хочется научиться делать именно с одной кнопкой.
Есть ли какая нибудь литература по компонентам борланд,посоветуйте пожалуйсто.Либо подскажите здесь.
С Уважением!
Обработчик CheckBox1Click присваиваете обоим компонентам CheckBox.
Когда выбран первый - скрывается второй и становится видна кнопка действия (КД)(Button1) - по умолчанию она скрыта. То же самое - если выбран второй. Если не выбран ни один - показываются оба и КД скрывается.
{
Button1->Visible = true;
if (CheckBox1->Checked){
CheckBox2->Checked = false;
CheckBox2->Visible=false;
}
else if(CheckBox2->Checked){
CheckBox1->Checked = false;
CheckBox1->Visible=false;
}
else if(!CheckBox1->Checked||!CheckBox2->Checked){
CheckBox2->Visible = true;
CheckBox1->Visible = true;
Button1->Visible = false;
}
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(CheckBox1->Checked)
Memo1->Lines->Text=CheckBox1->Caption;
else if(CheckBox2->Checked)
Memo1->Lines->Text=CheckBox2->Caption;
}
З.Ы. Убедительная просьба - подобные вопросы размещать ТОЛЬКО!!!! в теме для начинающих.
Какой умеете такой и пользуйтесь. Лучше, хуже - все зависит от того, по каким параметрам оценивать. В энтерпрайз версию билдера входит (помоему) InstallShild Express - или найдите доступный и понятный для вас в сети.
(Извеняюсь если эта инфа уже выкладена на форуме (киньте ссылочку), но я не нашол).
BOOL Beep(
DWORD dwFreq, // частота звука в герцах
DWORD dwDuration // продолжительность звука в миллисекундах
);
CreateInstall Сайт не помню. Ищи в Гугле - найдешь 100%. Лучше чем InstallShield и Wise. Говорю опираясь на личный опыт. Сам пользуюсь версией 3.5 Free. Если хочешь попробуй все 3 программы.
int i = s.Length()
while(i){
switch(s[i--]){
case 'a': ...
case 'A': ...
case 'b':...
....
default:
...
}
}
для поиска в строке используйте метод класса Pos
...
}
else{
ShowMessage("Нет такой буквы!!!");
}
HWND hwnd, // handle to parent window
LPCTSTR lpOperation, // pointer to string that specifies operation to perform
LPCTSTR lpFile, // pointer to filename or folder name string
LPCTSTR lpParameters, // pointer to string that specifies executable-file parameters
LPCTSTR lpDirectory, // pointer to string that specifies default directory
INT nShowCmd // whether file is shown when opened
);
HWND hwnd, // handle to parent window
LPCTSTR lpOperation, // pointer to string that specifies operation to perform
LPCTSTR lpFile, // pointer to filename or folder name string
LPCTSTR lpParameters, // pointer to string that specifies executable-file parameters
LPCTSTR lpDirectory, // pointer to string that specifies default directory
INT nShowCmd // whether file is shown when opened
);
:confused: А можна по русски? Просто пример запуска ексешного файла, с указанием адреса к ниму...
поиск используйте по форуму. тема не то что обсуждалась не раз. она уже всех достала.
Кроме того - всвязи с исторической несправедливостью - так как отцы-основатели кибернетики родом из англоязычных стран - то читать по английски надо - нравиться вам это или нет. а тем более справку.
аттскому сотоне рекомендуется тщательно и внимательно читать хелп, прежде чем лезть с вопросом на форум. И использовать поиск по форуму.
Memo1->Lines->Add(ss);
Memo1->Text += ss;
З.Ы. вариант с TClientSocket и TServerSocket неустраивает абсолютно.
З.Ы. вариант с TClientSocket и TServerSocket неустраивает абсолютно.
В чем разница, и в чем проблема заключаеться?
"ничего работать не хочет" - [SIZE="7"][COLOR="Red"]Я НЕ ЗНАЮ ТАКОЙ ОШИБКИ!!! НЕ ЗНАЮ!!![/COLOR][/SIZE] И знать не хочу! Задавайте нормально вопрос - если вы хотите что бы вам нормально отвечали.
P.S.
, а я знаю и постоянно с ней сталкиваюсь:)
DWORD dwFreq, // частота звука в герцах
DWORD dwDuration // продолжительность звука в миллисекундах
);
Если ввожу первый и второй параметр = 1000 "Beep(1000, 1000);"- не работает, почему? Пробывал ставить разные значения частоты, всё равно не выходит.