Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
2 / 2 / 0
Регистрация: 15.04.2010
Сообщений: 20
1

Как передать значение IP-адрес между формами

04.02.2012, 16:49. Показов 1529. Ответов 19
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Borland C++ 6
Имеется DBGrid с колонкой Айпи-адреса. Когда я ставлю курсор на ячейке с айпи и нажимаю Butoon "HTTPS" в новой форме открывался браузер по выделенному в ячеки айпи. Все это реализовал, кроме передачи айпи.
Айпи-адреса хранятся в текстовом формате в Access, соответствено в Борланде в виде AnsiString. AnsiString между формами Form1 и Form2 не передается. Пробовал конвертировать AnsiString в Int безрезультатно. Буду рад любой помощи.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void __fastcall TForm1::Button2Click(TObject *Sender)
{
  Label4->Caption = DBGrid1->SelectedField->Text;
  Form2->Show();
 
}
 
 
 
__fastcall TForm2::TForm2(TComponent* Owner)
        : TForm(Owner)
{
   CppWebBrowser1->Navigate(WideString("https://"+Label1->Caption));
}
2) Если кто может, подскажите можно ли в CppWebBrowser открыть строку формата http://172.23.48.198:8980/opennms/dashboard.jsp
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.02.2012, 16:49
Ответы с готовыми решениями:

Как передать значение переменной между формами?
Доброго времени суток! Как передать значение переменной из form1 в form2?

Как передать данные между формами
Есть код для работы с текстбоксом и листбоксом. В изначальном варианте всё было так: текст бокс,...

Как передать данные между формами
Еще раз всем привет. У меня на Form1 есть 2 radioButton (radioButton1 и radioButton2), мне нужно...

Как передать массив между формами
Здравствуйте!!!Помогите, пожалуйста!!!!!Такая проблема..есть Form1..в ней задаются входные данные и...

19
288 / 229 / 27
Регистрация: 13.06.2010
Сообщений: 744
04.02.2012, 17:38 2
В Unit2.cpp пропишите (вверху)
C++
1
#include "Unit1.h"
Ваш код сможет принять следующий вид:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void __fastcall TForm1::Button2Click(TObject *Sender)
{
  Label4->Caption = DBGrid1->SelectedField->Text;
  Form2->Show();
 
}
 
 
 
__fastcall TForm2::TForm2(TComponent* Owner)
        : TForm(Owner)
{
   CppWebBrowser1->Navigate(WideString("https://"+Form1->Label4->Caption));
}
Добавлено через 8 минут
Цитата Сообщение от solaris Посмотреть сообщение
Если кто может, подскажите можно ли в CppWebBrowser открыть строку формата http://172.23.48.198:8980/opennms/dashboard.jsp
Слэши нужно дублировать(экранировать)
http:////172.23.48.198:8980//opennms//dashboard.jsp
1
2 / 2 / 0
Регистрация: 15.04.2010
Сообщений: 20
04.02.2012, 18:05  [ТС] 3
Программирую пока на примерах, смутно пока в голове Если не трудно на примере покажите

объявляю переменную AnsiString ip
Unit1.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "SHDocVw_OCX"
#pragma resource "*.dfm"
TForm1 *Form1;
AnsiString ip;
Unit1.h
C++
1
2
private:    // User declarations
        AnsiString ip;
по кнопке открываю форму
Unit1.cpp
C++
1
2
3
4
5
6
void __fastcall TForm1::Button2Click(TObject *Sender)
{
 
  Label4->Caption = DBGrid1->SelectedField->Text;
  ip = Label4->Caption;
  Form2->Show();
Uni2.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "SHDocVw_OCX"
#pragma resource "*.dfm"
TForm2 *Form2;
extern AnsiString ip;
//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
        : TForm(Owner)
{
   ip = Label1->Caption;
   CppWebBrowser1->Navigate(WideString("https://"+ip));
}
Ошибок компиляции нет. Но в открытой Форме2 Label1->Caption пустой, значит значение не передалось.
0
288 / 229 / 27
Регистрация: 13.06.2010
Сообщений: 744
04.02.2012, 18:17 4
В сообщении №2 самый простой способ. Пробуйте его.
А в вашем последнем сообщении я не смог уловить логику
Я так понимаю это попытка реализовать примерно то, что я сначала ответил(потом удалил)
Это немного для другого случая.. Когда переменную объявленную в разделе private класса одного модуля требуется использовать в другом модуле

Добавлено через 6 минут
Если вы объявили AnsiString ip в разделе private заголовочного файла, она сразу становится доступной из любого метода класса.
В вашем случае нет смысла потом в .cpp снова ее объявлять, ибо это разные переменные, друг от друга не зависящие, чтоб не было путаницы к одной из них придется обращаться ::ip(глобальная), а к другой только локально их методов класса в котором она объявлена
1
2 / 2 / 0
Регистрация: 15.04.2010
Сообщений: 20
04.02.2012, 18:19  [ТС] 5
Цитата Сообщение от __bool Посмотреть сообщение
Слэши нужно дублировать(экранировать)
http:////172.23.48.198:8980//opennms//dashboard.jsp
C++
1
2
3
4
void __fastcall TForm1::Button5Click(TObject *Sender)
{
    CppWebBrowser1->Navigate(WideString("http:////172.23.48.198:8980//opennms//dashboard.jsp"));
}
попробовал так, не выходит
0
288 / 229 / 27
Регистрация: 13.06.2010
Сообщений: 744
04.02.2012, 18:24 6
Цитата Сообщение от solaris Посмотреть сообщение
попробовал так, не выходит
Общий доступ то открыт к файлу?
через проводник заходит?

Добавлено через 2 минуты
Использование WideString в данном случае не имеет смысла по-моему. т.к. С++Builder 6 любит ANSI.
(Хотя в этом случае возможно исключение)
Вряд ли это может являться причиной ошибки, но все-таки попробуйте так:
C++
1
CppWebBrowser1->Navigate("http:////172.23.48.198:8980//opennms//dashboard.jsp");
1
2 / 2 / 0
Регистрация: 15.04.2010
Сообщений: 20
04.02.2012, 18:29  [ТС] 7
Цитата Сообщение от __bool Посмотреть сообщение
Общий доступ то открыт к файлу?
через проводник заходит?

Добавлено через 2 минуты
Использование WideString в данном случае не имеет смысла по-моему. т.к. С++Builder 6 любит ANSI.
(Хотя в этом случае возможно исключение)
Вряд ли это может являться причиной ошибки, но все-таки попробуйте так:
C++
1
CppWebBrowser1->Navigate("http:////172.23.48.198:8980//opennms//dashboard.jsp");
делаю так
C++
1
CppWebBrowser1->Navigate("http:////172.23.48.198:8980//opennms//dashboard.jsp");
ругается
[C++ Error] Unit1.cpp(76): E2034 Cannot convert 'char *' to 'wchar_t *'
[C++ Error] Unit1.cpp(76): E2342 Type mismatch in parameter 'URL' (wanted 'wchar_t *', got 'char *')
0
LK
Заблокирован
04.02.2012, 18:32 8
C++
1
CppWebBrowser1->Navigate(L"http:////172.23.48.198:8980//opennms//dashboard.jsp");
0
288 / 229 / 27
Регистрация: 13.06.2010
Сообщений: 744
04.02.2012, 18:34 9
Цитата Сообщение от solaris Посмотреть сообщение
делаю так
C++
1
CppWebBrowser1->Navigate("http:////172.23.48.198:8980//opennms//dashboard.jsp");
ругается
[C++ Error] Unit1.cpp(76): E2034 Cannot convert 'char *' to 'wchar_t *'
[C++ Error] Unit1.cpp(76): E2342 Type mismatch in parameter 'URL' (wanted 'wchar_t *', got 'char *')
Ага.. значит все-таки WideString - достаточно перед строкой поставить префикс L:
C++
1
CppWebBrowser1->Navigate(L"http:////172.23.48.198:8980//opennms//dashboard.jsp");
Извиняюсь, в случае с web-адресами слеши дублировать не нужно..
1
2 / 2 / 0
Регистрация: 15.04.2010
Сообщений: 20
04.02.2012, 18:35  [ТС] 10
Цитата Сообщение от __bool Посмотреть сообщение
В Unit2.cpp пропишите (вверху)
C++
1
#include "Unit1.h"
Ваш код сможет принять следующий вид:
C++
1
2
3
4
5
6
7
8
9
10
11
void __fastcall TForm1::Button2Click(TObject *Sender)
{
  Label4->Caption = DBGrid1->SelectedField->Text;
  Form2->Show();
 
} 
__fastcall TForm2::TForm2(TComponent* Owner)
        : TForm(Owner)
{
   CppWebBrowser1->Navigate(WideString("https://"+Form1->Label4->Caption));
}

опять мимо

Uni1.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "SHDocVw_OCX"
#pragma resource "*.dfm"
TForm1 *Form1;
 
void __fastcall TForm1::Button2Click(TObject *Sender)
{
 
  Label4->Caption = DBGrid1->SelectedField->Text;
  Form2->Show();
  }
Unit2.cpp

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "SHDocVw_OCX"
#pragma resource "*.dfm"
TForm2 *Form2;
//extern AnsiString ip;
//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
        : TForm(Owner)
{
   Label1->Caption = Form1->Label4->Caption;
   CppWebBrowser1->Navigate(WideString("https://"+Form1->Label4->Caption));
}
//---------------------------------------------------------------------------
Label1->Caption в Форме2 пустой печаль
0
288 / 229 / 27
Регистрация: 13.06.2010
Сообщений: 744
04.02.2012, 18:39 11
Цитата Сообщение от LK Посмотреть сообщение
C++
1
CppWebBrowser1->Navigate(L"http:////172.23.48.198:8980//opennms//dashboard.jsp");
И LK туда же

Добавлено через 2 минуты
Кидайте проект сюда тогда. По-сути все что требуется - подключить хедер и все
1
2 / 2 / 0
Регистрация: 15.04.2010
Сообщений: 20
04.02.2012, 18:40  [ТС] 12
Цитата Сообщение от __bool Посмотреть сообщение
Ага.. значит все-таки WideString - достаточно перед строкой поставить префикс L:
C++
1
CppWebBrowser1->Navigate(L"http:////172.23.48.198:8980//opennms//dashboard.jsp");
Извиняюсь, в случае с web-адресами слеши дублировать не нужно..
СПАСИБо вам! сработало
C++
1
2
3
4
void __fastcall TForm1::Button5Click(TObject *Sender)
{
    CppWebBrowser1->Navigate(L"http://172.23.48.198:8980/opennms/dashboard.jsp");
}
это страничка мониторинга нашего внутреннего вебсервера
0
288 / 229 / 27
Регистрация: 13.06.2010
Сообщений: 744
04.02.2012, 18:45 13
Цитата Сообщение от solaris Посмотреть сообщение
Label1->Caption в Форме2 пустой печаль
Опа.. в какой-то версии Builder'а нельзя было работать с визуальными объектами в конструкторе формы, попробуйте в FormCreate

Добавлено через 3 минуты
Цитата Сообщение от solaris Посмотреть сообщение
СПАСИБо вам! сработало
Цитата Сообщение от solaris Посмотреть сообщение
это страничка мониторинга нашего внутреннего вебсервера
А я то думаю, почему у меня к нему доступа нет..
1
2 / 2 / 0
Регистрация: 15.04.2010
Сообщений: 20
04.02.2012, 18:52  [ТС] 14
Цитата Сообщение от __bool Посмотреть сообщение
Кидайте проект сюда тогда. По-сути все что требуется - подключить хедер и все
Unit1.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "SHDocVw_OCX"
#pragma resource "*.dfm"
TForm1 *Form1;
//AnsiString ip;
 
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
  DBGrid1->Columns->Items[0]->Width = 105;
  DBGrid1->Columns->Items[1]->Width = 230;
  DBGrid1->Columns->Items[2]->Width = 100;
  DBGrid1->Columns->Items[3]->Width = 100;
  DBGrid1->Columns->Items[4]->Width = 100;
  DBGrid1->Columns->Items[5]->Width = 80;
  DBGrid1->Columns->Items[6]->Width = 80;
  DBGrid1->Columns->Items[7]->Width = 50;
  DBGrid1->Columns->Items[8]->Width = 100;
  DBGrid1->Columns->Items[0]->Visible = false;
  //DBGrid1->Columns->Items[2]->Visible = false;
  DBGrid1->Columns->Items[3]->Visible = false;
  DBGrid1->Columns->Items[4]->Visible = false;
  DBGrid1->Columns->Items[5]->Visible = false;
  DBGrid1->Columns->Items[6]->Visible = false;
  DBGrid1->Columns->Items[7]->Visible = false;
  //Label1->Caption = DBGrid1->SelectedField->Text;
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 Label3->Caption = DBGrid1->SelectedField->Text;
 ShellExecute( 0, NULL, "cmd.exe", String("/C tracert "+Edit1->Text).c_str(), NULL, SW_SHOW);
 }
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button3Click(TObject *Sender)
{
  Label1->Caption = DBGrid1->SelectedField->Text;
  ShellExecute( 0, NULL, "C:\\putty.exe", String("-pw xx root@"+Label1->Caption).c_str(), NULL, SW_SHOW);
 
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button4Click(TObject *Sender)
{
  Label2->Caption = DBGrid1->SelectedField->Text;
  ShellExecute( 0, NULL, "cmd.exe", String("/C ping "+Label2->Caption).c_str(), NULL, SW_SHOW);
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button2Click(TObject *Sender)
{
 
  Label4->Caption = DBGrid1->SelectedField->Text;
  Form2->Show();
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button5Click(TObject *Sender)
{
    CppWebBrowser1->Navigate(L"http://172.23.48.198:8980/opennms/dashboard.jsp");
}
//---------------------------------------------------------------------------
Uni1.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
//---------------------------------------------------------------------------
 
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ADODB.hpp>
#include <DB.hpp>
#include <DBGrids.hpp>
#include <Grids.hpp>
#include <DBCtrls.hpp>
#include <ExtCtrls.hpp>
#include "SHDocVw_OCX.h"
#include <OleCtrls.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
        TADOTable *ADOTable1;
        TDataSource *DataSource1;
        TDBGrid *DBGrid1;
        TDBNavigator *DBNavigator1;
        TDBNavigator *DBNavigator2;
        TDBLookupComboBox *DBLookupComboBox1;
        TLabel *Label1;
        TButton *Button3;
        TLabel *Label2;
        TLabel *Label3;
        TButton *Button4;
        TButton *Button1;
        TEdit *Edit1;
        TButton *Button2;
        TLabel *Label4;
        TCppWebBrowser *CppWebBrowser1;
        TButton *Button5;
        void __fastcall Button3Click(TObject *Sender);
        void __fastcall Button4Click(TObject *Sender);
        void __fastcall Button1Click(TObject *Sender);
        void __fastcall Button2Click(TObject *Sender);
        void __fastcall Button5Click(TObject *Sender);
private:    // User declarations
        AnsiString ip;
public:     // User declarations
        __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
Uni2.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "SHDocVw_OCX"
#pragma resource "*.dfm"
TForm2 *Form2;
//extern AnsiString ip;
//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
        : TForm(Owner)
{
   Label1->Caption = Form1->Label4->Caption;
   CppWebBrowser1->Navigate(WideString("https://"+Form1->Label4->Caption));
}
//---------------------------------------------------------------------------
Unit2.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//---------------------------------------------------------------------------
 
#ifndef Unit2H
#define Unit2H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include "SHDocVw_OCX.h"
#include <OleCtrls.hpp>
//---------------------------------------------------------------------------
class TForm2 : public TForm
{
__published:    // IDE-managed Components
        TCppWebBrowser *CppWebBrowser1;
        TLabel *Label1;
private:    // User declarations
        AnsiString ip;
public:     // User declarations
        __fastcall TForm2(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm2 *Form2;
//---------------------------------------------------------------------------
#endif
Добавлено через 5 минут
Цитата Сообщение от __bool Посмотреть сообщение
Опа.. в какой-то версии Builder'а нельзя было работать с визуальными объектами в конструкторе формы, попробуйте в FormCreate
Builder 6.0 ver 10.155 Enterprise Portable
ща попробую
FormCreate
0
288 / 229 / 27
Регистрация: 13.06.2010
Сообщений: 744
04.02.2012, 19:05 15
Цитата Сообщение от solaris Посмотреть сообщение
СПАСИБо вам! сработало
Цитата Сообщение от solaris Посмотреть сообщение
ща попробую
FormCreate
Стоп. Так если задача решена, цель достигнута, значит все верно) зачем что то менять?
1
2 / 2 / 0
Регистрация: 15.04.2010
Сообщений: 20
04.02.2012, 19:08  [ТС] 16
Цитата Сообщение от __bool Посмотреть сообщение
Стоп. Так если задача решена, цель достигнута, значит все верно) зачем что то менять?
сработала только с ссылкой на вэбсервер. С Формами и AnsiString вопрос открыт
0
288 / 229 / 27
Регистрация: 13.06.2010
Сообщений: 744
04.02.2012, 19:18 17
Я же объяснил, что вариантов много, и уточнил:
В сообщении №2 самый простой способ. Пробуйте его.
Кажется я вас только запутал.
1
2 / 2 / 0
Регистрация: 15.04.2010
Сообщений: 20
04.02.2012, 19:21  [ТС] 18
Цитата Сообщение от __bool Посмотреть сообщение
Я же объяснил, что вариантов много, и уточнил:
Это просто остаток неподчищенный, ваши варианты все испробовал

Добавлено через 43 секунды
Цитата Сообщение от __bool Посмотреть сообщение
Я же объяснил, что вариантов много, и уточнил:


Кажется я вас только запутал.
НЕТ, я в теме
0
288 / 229 / 27
Регистрация: 13.06.2010
Сообщений: 744
04.02.2012, 19:27 19
Цитата Сообщение от __bool Посмотреть сообщение
Кидайте проект сюда тогда. По-сути все что требуется - подключить хедер и все
Под "кинуть проект" подразумевалось кинуть архив с файлами проекта, а не код в теге c++
1
LK
Заблокирован
04.02.2012, 21:59 20
Цитата Сообщение от __bool Посмотреть сообщение
И LK туда же
куда-куда ЛК ? Вопрос был относительно чаров, насколько я помню, а не вашей гламурной идеи с двойными правыми слешами.
0
04.02.2012, 21:59
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.02.2012, 21:59
Помогаю со студенческими работами здесь

Как передать данные (матрицы) между формами ?
Здравствуйте ! Помогите, пожалуйста, новичку. Как передавать простые данные - уже прочитал....

Как передать данные между формами, без Show/ShowDialog
Есть 3 формы: 1. MainForm, которая является меню и родительской формой, на ней имеются кнопки в...

передать данные между формами
Задание такое: на основной форме нажимаем кнопку &quot;ввести данные&quot;- открывается диалоговое окно, там...

Передать значения между формами
Как передавать значения переменных между формами, т.е. мне надо, что бы на одной форме я вводил...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru