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

Ваш аккаунт

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

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

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

Часть 2. Я начинающий, подскажите как...(Все вопросы начинающих!!!)

51K
05 июля 2009 года
Олориин
1 / / 05.07.2009
День добрый вопрос такой: в ListBox создал 3 столбца
ListBox1->Columns=3;
каким образом записать строку в второй и третий столбцы?

1636 ответов / показаны 1561 - 1599

Страницы:
78K
20 декабря 2011 года
AndrewSh
5 / / 19.12.2011
есть код (помечен //) , записывает в файл потоковые данные, я попытался изменить его для записи расчетных данных, идет переполнение памяти, подскажите почему?

//конвертируем текущие данные в "удобочитаемый" формат
// string[] qOpen = Open[0].ToString().Split(',');
// string[] qClose = Close[0].ToString().Split(',');
// string[] qHigh = High[0].ToString().Split(',');
// string[] qLow = Low[0].ToString().Split(',');

double M1= AAos(9, 1, 5, 1).Med1[0]; // расчитываю индикаторы
double M2= AAos(7, 1, 5, 1).Med1[0];
double M3= AAos(5, 1, 5, 1).Med1[0];
double M4= AAos(3, 1, 5, 1).Med1[0];

string[] qM1 = M1.ToString().Split(',');
string[] qM2 = M2.ToString().Split(',');
string[] qM3 = M3.ToString().Split(',');
string[] qM4 = M4.ToString().Split(',');



// string pOpen;
// string pClose;
// string pHigh;
// string pLow;

string pM1;
string pM2;
string pM3;
string pM4;



// if (qOpen.Length == 2) {pOpen = qOpen[0]+"."+qOpen[1];}
// else{pOpen = Open[0].ToString();}
//
// if (qClose.Length == 2) {pClose = qClose[0]+"."+qClose[1];}
// else { pClose = Close[0].ToString(); }
//
// if (qHigh.Length == 2) {pHigh = qHigh[0]+"."+qHigh[1];}
// else { pHigh = High[0].ToString(); }
//
// if (qLow.Length == 2){pLow = qLow[0]+"."+qLow[1];}
// else {pLow = Low[0].ToString();}



if (qM1.Length == 2) {pM1 = qM1[0]+"."+qM1[1];}
else{pM1 = M1.ToString();}

if (qM2.Length == 2) {pM2 = qM2[0]+"."+qM2[1];}
else{pM2 = M2.ToString();}

if (qM3.Length == 2) {pM3 = qM3[0]+"."+qM3[1];}
else{pM3 = M3.ToString();}

if (qM4.Length == 2) {pM4 = qM4[0]+"."+qM4[1];}
else{pM4 = M4.ToString();}




//Пишем новую строку в файл.
string str;
str =
Time[0].Date.ToString()+ ";"
// + Time[0].Hour.ToString()+Time[0].Minute.ToString()
+Time[0].Second.ToString()+";"+
pM1+";"+pM2+";"+pM3+";"+pM4;

FileStream ot = new FileStream(@"C:\data.txt", FileMode.Append);
StreamWriter output = new StreamWriter(ot);
output.WriteLine(str);
output.Close();
ot.Close();
14
20 декабря 2011 года
Phodopus
3.3K / / 19.06.2008
Цитата: AndrewSh
есть код (помечен //) , записывает в файл потоковые данные, я попытался изменить его для записи расчетных данных, идет переполнение памяти, подскажите почему?


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

78K
21 декабря 2011 года
AndrewSh
5 / / 19.12.2011
код без ошибок, файл записывается, но объем свободной памяти через пару минут сходит на нет, в родном варианте такого не происходит
78K
21 декабря 2011 года
AndrewSh
5 / / 19.12.2011
имеется ввиду 11 строка снизу? string str; с маленькой?
78K
21 декабря 2011 года
AndrewSh
5 / / 19.12.2011
самое значительное изменение, наверное, - добавился расчет индикаторов по сторонним функциям, но в соседних окнах я их пачками навешиваю в одно окно, правда там проге не приходится записывать все это, не пойму в общем
14K
21 декабря 2011 года
artem_kvadro
63 / / 30.07.2007
Как сделать затененной иконку на кнопке Button, когда кнопка недоступна? Т.е. чтоб иконка была "серенькой". Есть мысль просто сделать еще одну иконку и в коде как-то менять их, но, может, есть специальное свойство или метод для затенения.
Иконка берется из ресурсов.
297
21 декабря 2011 года
koodeer
1.2K / / 02.05.2009
Цитата: artem_kvadro
Как сделать затененной иконку на кнопке Button, когда кнопка недоступна? Т.е. чтоб иконка была "серенькой". Есть мысль просто сделать еще одну иконку и в коде как-то менять их, но, может, есть специальное свойство или метод для затенения.
Иконка берется из ресурсов.


Могу предложить такой вариант. Меняем прозрачность элемента. Это похоже на затенение.

 
Код:
<Button Width="160" Height="120">
    <Grid Name="grid">
        <Image Name="image" Source="pic.jpg"></Image>
        <TextBlock VerticalAlignment="Center" HorizontalAlignment="Center">Text</TextBlock>
    </Grid>
</Button>

Гриду и имиджу даны названия. Через них можно в нужном месте менять прозрачность.
 
Код:
grid.Opacity = 0.3;
// или
image.Opacity = 0.3;
14K
23 декабря 2011 года
artem_kvadro
63 / / 30.07.2007
Есть ListView, описан DataTemplate для него в ресурсах. В DataTemplate есть TextBox, сверху на нем Combobox. К Combobox'у привязан список, который заполнен парами ключ(Guid)/значение(string), отображается только значение. Задумка такая: при наведении мыши на TextBox появляется Combobox, чтобы можно было выбрать другой элемент. То есть тексты Combobox'а и TextBox 'а должны совпадать.
Когда пользователь выбирает элемент, то здесь все просто. Но может быть и так, что меняется "модель", то есть SelectedItem нужно установить в коде. В этом у меня и проблема, не могу из кода достучаться до Combobox'а: пробовал проходить по визуальному дереву, логическому, но так и не получилось. Ну а вторая мысль - устанавливать не из кода, а сделать привязку к TextBox к свойству Text, например. Но тут тоже ничего не добился. Помогите разобраться с этим.

Вот примерный код, лишнее повыкидывал:
[CODE="xml"]<Window.Resources>
<local:TrendsList x:Key="TrendsListKey"/>

<DataTemplate x:Key="TrendsViewTemplate">
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
...
<ColumnDefinition Width="470"/>
...
</Grid.ColumnDefinitions>
<Border Grid.Column="1">
<TextBox Text="{Binding Path=TrendName}" Name="TrendName" IsReadOnly="True" MouseEnter="TrendName_MouseEnter">
</TextBox>
</Border>
<Border Grid.Column="1">
<ComboBox Name="AllTrendsCombo" Visibility="Collapsed" MouseLeave="AllTrendsCombo_MouseLeave" ItemsSource="{Binding Source={StaticResource TrendsListKey}}" SelectionChanged="AllTrendsCombo_SelectionChanged" >
<ComboBox.DisplayMemberPath>Value</ComboBox.DisplayMemberPath>
</ComboBox>
...
</Grid>
</DataTemplate>
</Window.Resources>



<Grid>
<Expander Name="Expander1">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Border >
<ScrollViewer >
<ListView Name="TrendsPanel" ItemTemplate="{StaticResource TrendsViewTemplate}" SelectionMode="Single">
</ListView>
</ScrollViewer>
</Border>
</Grid>
</Expander>
</Grid>[/CODE]

[CODE="Csharp"]public class TrendsList : ObservableCollection<KeyValuePair<Guid, string>>
{
public TrendsList() : base() { }
}[/CODE]
77K
24 декабря 2011 года
radlif
5 / / 20.12.2011
Народ столкнулся с такой проблемой.
Прочёл С++ Без страха, книга легко далась так как имею опыт программирования в php и ActionScript3.0
и всё примеры прекрасно компилируется и работает.
Решил заняться оконными приложениями первое с чем начал работать это Windows Forms
но меня тут же отговорили сказали учить win32 и API.
И тут пошла трабола все примеры из книг и из интернета по созданию простого окна тупо не работают
ни в DevC++ ни в VC2008 сначала думал что ошибки в книгах но потом скопировал код проекта
с DevC++ в VC2008 и та же ерунда целая гора ошибок хотя в DevC++ всё нормально компилируется!
Прошу спецов подсказать нормальную книгу по которой хотя бы в одном
компиляторе всё будет работать и можно будет писать полноценные приложения.
Желательно с нормальными объяснениями каждого этапа а не кучу кода и всего парой строк
пояснения.
Ссылку на страницу с литературой не кидать я от туда и без того многовато скачал
интернет не безлимитный!
297
24 декабря 2011 года
koodeer
1.2K / / 02.05.2009
radlif, Windows Forms - это .NET. Для них лучше использовать C#. И вообще их уже не стоит осваивать, т. к. все переходят на WPF.

Что касается C++. Нормальные книги почти все. Но дело в том, что во всех компиляторах ни один пример не будет компилироваться без изменения настроек по умолчанию.
Если книга десятилетней давности, а среда разработки новая, то проблема может быть, например, в том, что в книге код приведён с простыми строковыми литералами, а современные IDE зачастую по умолчанию настроены на юникод. Достаточно изменить настройки, и пример скомпилируется.

Пиши, в какой IDE какая конкретно ошибка выдаётся. Приводи пример кода (только не портянку на весь экран!). Возможно, подскажем, какую настройку исправить.
77K
25 декабря 2011 года
radlif
5 / / 20.12.2011
Код:
#include <windows.h>

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
 
int WINAPI WinMain(HINSTANCE hlnstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
HWND hMainWnd;
char szClassName[]="MyClass";
MSG msg;
WNDCLASSEX wc;
wc.cbSize =cizeof(wc);
wc.style =CS_HREDRAW|CS_VREDRAW;
wc.lpfnWndProc =WndProc;
wc.cbClsExtra =0;
wc.cbWndExtra =0;
wc.hInstance =hInstance;
wc.hIcon =LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor =LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wc.lpszMenuName =NULL;
wc.lpszClassName =ClassName;
wc.hIconSm =LoadIcon(NULL, IDI_APPLICATION);
//регестрируем класс окна
if(!RegisterClassEx(&wc))
{
    MessageBox (NULL,"Неудалось зарегистрировать окно","Ошибка",MB_OK);
    return 0;
}

//Создаём основное окно

hMainWnd = CreateWindow(
        szClassName,"ЗДОРОВ",WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT,0,CW_USEDEFAULT,0,
        (HWND)NULL,(HMENU)HULL,
        (HINSTANCE)hInstance,NULL
        );
if(!hMainWnd)
{
MessageBox (NULL,"Неудалось создать окно","Ошибка",MB_OK);
return 0;
}

//Показываем окно
ShowWindow(hMainWnd, nCmdShow);

//Цикл обработки сообщений
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
{
HDC hDC;
PAINTSTRUST ps;
RECT rect;

switch (uMsg)
{
case WM_PAINT:
    hDC=BeginPaint(hWnd, &ps);
    GetClientRect(hWnd, &rect);
    DrawText(hDC, "ПРИВЕТ ПРОГРАММИСТУ", -1, &rect,DT_SINGELINE|DT_VCENTER);

    EndPaint(hWnd, &ps);
    break;

case WM_DESTROY:
    PostQuitMessage(0);
    break;

default:
    return DefWindowProc(hWnd,uMsg, wParam, lParam);

}
return 0;

}


Ошибки в DevC++

1) In function `int WinMain(HINSTANCE__*, HINSTANCE__*, CHAR*, int)':
2) `cizeof' undeclared (first use this function)
(Each undeclared identifier is reported only once for each function it appears in.)
3) `hInstance' undeclared (first use this function)
4) `ClassName' undeclared (first use this function)
5) At global scope:
6) expected unqualified-id before '{' token
7) expected `,' or `;' before '{' token

Ошибки в VC2008

: error C3861: 'cizeof': identifier not found
: error C2065: 'hInstance' : undeclared identifier
: error C2065: 'ClassName' : undeclared identifier
: error C2664: 'MessageBoxW' : cannot convert parameter 2 from 'const char [32]' to 'LPCWSTR'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
: error C2065: 'hInstance' : undeclared identifier
: error C2664: 'MessageBoxW' : cannot convert parameter 2 from 'const char [23]' to 'LPCWSTR'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
: error C2447: '{' : missing function header (old-style formal list?)

В остальных примерах ошибки таки же.

Сори не разобрался как сжать окошко с кодом.
78K
25 декабря 2011 года
StereoRu
3 / / 12.12.2011
Товарищи ГУРУ, помогите пожалуйста. Речь идет о WinForm в C#.

Необходимо чтобы при загрузке формы текстовые поля выставлялись значениями по умолчанию, это без проблем.

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

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

Еще перепробовал несколько способов некоторые из которых частично работали, но это не тру, хотелось бы узнать как правильно передавать значения из элементов формы в другие классы.

Заранее спасибо!
14
25 декабря 2011 года
Phodopus
3.3K / / 19.06.2008
Цитата: radlif
Ошибки в DevC++

1) In function `int WinMain(HINSTANCE__*, HINSTANCE__*, CHAR*, int)':
2) `cizeof' undeclared (first use this function)
(Each undeclared identifier is reported only once for each function it appears in.)
3) `hInstance' undeclared (first use this function)
4) `ClassName' undeclared (first use this function)


указывает на кучу опечаток

297
25 декабря 2011 года
koodeer
1.2K / / 02.05.2009
radlif, как уже сказал Phodopus, в приведённом коде много опечаток.
cizeof - sizeof
hlnstance - hInstance
ClassName - szClassName
HULL - NULL
Лишняя ; после WndProc
PAINTSTRUST - PAINTSTRUСT
DT_SINGELINE - DT_SINGLELINE
После их исправления в DevC++ всё работает.

Как я и ожидал, литералы неюникодные. Чтобы пример скомпилировался в VisualStudio, нужно в настройках проекта вместо Unicode поставить Multi-Byte Character Set.
20K
25 декабря 2011 года
sem2711
124 / / 23.09.2009
Цитата: StereoRu
Речь идет о WinForm в C#.


Здесь возможны такие сценарии:
1. У вас есть главное окно программы с меню. При выборе пользователем определенного его пункта открывается диалоговое окно с текстовыми полями, куда пользователю предлагается ввести какие-то данные. По окончании ввода пользователь нажимает кнопку ОК и диалог закрывается. После этого класс основного окна получает данные, которые ввел пользователь в диалоге.
Пример:
[CODE=C#]
public partial class Form1 : Form
{
// Строковая переменная для хранения данных,
// полученных от пользователя.
private string userInfo;

public Form1()
{
InitializeComponent();
userInfo = string.Empty;
}

// Пользователь выбрал пункт меню "Get info..."
private void getInfoMenuItem_Click(object sender, EventArgs e)
{
// Создаем диалог, показываем его и ждем результата.
GetInfoDialog gid = new GetInfoDialog();
if (gid.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
// Если пользователь подтвердил ввод данных,
// то получаем их.
userInfo = gid.UserInfo;
// Вывод данных.
if (userInfo.Length > 0)
{
this.Text = userInfo;
}
}
}
}
[/CODE]

[CODE=C#]
public partial class GetInfoDialog : Form
{
// Переменная для сохранения результата
// ввода в текстовое поле.
private string userInfo;

// Свойство для получения значения
// закрытого поля userInfo другими классами.
public string UserInfo
{
get { return userInfo; }
}

public GetInfoDialog()
{
InitializeComponent();
userInfo = string.Empty;
}

// Пользователь подтвердил ввод, нажав кнопку ОК.
private void btnOK_Click(object sender, EventArgs e)
{
if (textBox1.Text.Length > 0)
{
// Если поле для ввода не пустое...
userInfo = textBox1.Text;
}
}
}
[/CODE]
2. Текстовые поля находятся в главном окне программы. По окончании ввода пользователь нажимает кнопку Submit и класс главного окна обновляет переменные всех заинтересованных классов через общедоступные свойства. Пример:
[CODE=C#]
public partial class Form1 : Form
{
// Строковая переменная для хранения данных,
// полученных от пользователя.
private string userInfo;

// Объект класса-получателя данных.
private Receiver rec;

public Form1()
{
InitializeComponent();
userInfo = string.Empty;
// Инициализация объекта класса-получателя данных.
rec = new Receiver();
}

// Пользователь нажал кнопку "Submit".
private void btnSubmit_Click(object sender, EventArgs e)
{
if (textBox1.Text.Length > 0)
{
// Если пользователь ввел какие-то данные...
userInfo = textBox1.Text;
// Передаем данные классу-получателю
// через публичное свойство.
rec.UserInfo = userInfo;
}
}
}
[/CODE]
[CODE=C#]
public class Receiver
{
// Переменная для хранения пользовательских данных.
private string userInfo;

// Свойство для получения и установки userInfo.
public string UserInfo
{
get { return userInfo; }
set
{
userInfo = value;
// Здесь располагается реакция
// класса на ввод данных пользователем.
MessageBox.Show(userInfo);
}
}

public Receiver()
{
userInfo = string.Empty;
}
}
[/CODE]
Microsoft рекомендует для получения данных от пользователя использовать сценарий №1, но я думаю, что сценарий №2 тоже имеет право на реализацию. Можно также совместить оба варианта, создав диалог для получения данных, а затем раздать эти данные ожидающим объектам других классов.
Есть и еще один вариант: создать класс-контроллер, который в свою очередь создает все прочие классы (главного окна, диалогов и т.д.). В этом случае окно ввода данных должно генерировать событие, на которое подписывается контроллер. Контроллер затем рассылает данные всем заинтересованным классам.
[CODE=C#]
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Controller());
}
}
[/CODE]
[CODE=C#]
public partial class Form1 : Form
{
// Строковая переменная для хранения данных,
// полученных от пользователя.
private string userInfo;

// Свойство для получения значения userInfo.
public string UserInfo
{
get { return userInfo; }
}

// Делегат и событие для оповещения о завершении
// пользовательского ввода.
public delegate void UserInfoHandler(object sender, EventArgs e);
public event UserInfoHandler OnUserInput;

public Form1()
{
InitializeComponent();
userInfo = string.Empty;
}

// Пользователь нажал кнопку "Submit".
private void btnSubmit_Click(object sender, EventArgs e)
{
if (textBox1.Text.Length > 0)
{
// Если пользователь ввел какие-то данные...
userInfo = textBox1.Text;

if (OnUserInput != null)
{
// Если есть подписчики события...
OnUserInput(this, new EventArgs());
}
}
}
}
[/CODE]
[CODE=C#]
public class Controller : ApplicationContext
{
// Объект главного окна приложения.
private Form1 mainForm;
// Объект класса-потребителя.
private Receiver receiver;

public Controller()
{
// Создаем объекты главного окна приложения
// и класса-потребителя данных.
mainForm = new Form1();
receiver = new Receiver();
// Делаем mainForm главным окном контекста приложения.
// Если главное окно закрывается, приложение также закроется.
this.MainForm = mainForm;
// Подписываемся на оповещение о событии пользовательского ввода.
mainForm.OnUserInput += new Form1.UserInfoHandler(mainForm_OnUserInput);
// Показываем главное окно.
mainForm.Show();
}

// Обработчик события пользовательского ввода.
private void mainForm_OnUserInput(object sender, EventArgs e)
{
// Приводим sender к типу Form1.
Form1 form = sender as Form1;
if (form != null)
{
// Если отправитель подтвержден,
// передаем данные потребителю.
receiver.UserInfo = form.UserInfo;
}
}
}
[/CODE]
Код класса-потребителя остается тот же, что в предыдущем примере.
Как-то так, по-моему...

77K
27 декабря 2011 года
radlif
5 / / 20.12.2011
Столкнулся с интересной темой.
 
Код:
Color ^col= gcnew Color();
Graphics ^im = this->CreateGraphics();
im->Clear(col->White);
 
for(int i=0;i<300;i++){
int fg=Random().Next(0,255);
Pen ^pen=gcnew Pen(Color::FromArgb(255,fg,fg,fg));
im->DrawLine(pen,1,i,300,i);


Если выводить подобным образом линии на экран то можно заметить что
на продолжение нескольких итераций цикла функция Random() выдаёт одно и
тоже число.

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

Так же это можно увидеть если в форму добавить текстовое поле label1
и в цикле прописать.
 
Код:
label1->Text=label1->Text+Random().Next(255);


На другом форуме предлагали такой вариант.
 
Код:
Color ^col= gcnew Color();
Graphics ^im = this->CreateGraphics();
im->Clear(col->White);
Random ^rnd = gcnew Random();
 
for(int i=0;i<300;i++){
int fg=rnd->Next(0,255);
Pen ^pen=gcnew Pen(Color::FromArgb(255,fg,fg,fg));
im->DrawLine(pen,1,i,300,i);


но он не даёт не каких результатов как и вынос
функции ранодом в отдельную функцию.

Как сделать так чтоб функция рандом выдавала на каждой итерации цикла
разные числа?:confused:
Тут как я думаю нужно что то что будет менять число исходя из
тиков процессора но для меня эт тёмный лес :)

Так же маленький вопросик можно ль код и функции
написанные на голом с++ в виде классов присоединять
к проектам на C++/STL в книжках чёт не нашёл хотя по идее должен
быть способ)))
20K
27 декабря 2011 года
sem2711
124 / / 23.09.2009
Цитата: radlif
на продолжение нескольких итераций цикла функция Random() выдаёт одно и
тоже число.


Во-первых, то, что вы назвали функцией, на самом деле является конструктором класса. Из этого следует, что правильно применять объект этого класса вам посоветовали "на другом форуме".
Во-вторых, погоняв метод Next() упомянутого класса в менее специфических условиях, я не обнаружил явных повторов на протяжении более 30 итераций цикла, на каждой из которых генерировалось по 300 чисел от 0 до 255.

Цитата: radlif
можно ль код и функции
написанные на голом с++ в виде классов присоединять
к проектам на C++/STL в книжках чёт не нашёл хотя по идее должен
быть способ)))


А разве STL не является стандартной библиотекой C++? Может, вы что-то иное имели ввиду - например, C++/CLI?

77K
27 декабря 2011 года
radlif
5 / / 20.12.2011
Цитата: sem2711
Во-первых, то, что вы назвали функцией, на самом деле является конструктором класса. Из этого следует, что правильно применять объект этого класса вам посоветовали "на другом форуме".
Во-вторых, погоняв метод Next() упомянутого класса в менее специфических условиях, я не обнаружил явных повторов на протяжении более 30 итераций цикла, на каждой из которых генерировалось по 300 чисел от 0 до 255.


Если бы небыло повторений я бы не задавал вопрос!
С помощью элемента label очень чётко видно повторяющееся цепочки чисел
так же на изображение очень отчётливо видно что числа повторяются так как полосы
одного цвета толщиной не 1 пиксель а по 4 и более!

Цитата: sem2711

А разве STL не является стандартной библиотекой C++? Может, вы что-то иное имели ввиду - например, C++/CLI?


Да вы правы это библиотека на с++ но почти что весь код в приложение пишется через её классы
по которым увы нормальной литературы практически нету.
Мне гораздо проще написать функции и тд в собственных классах
и использовать в своём приложение.

P.S. MSDN не предлагать там самые простые функции описывают в таких примерах что чёрт ногу сломит!

20K
27 декабря 2011 года
sem2711
124 / / 23.09.2009
Цитата: radlif
С помощью элемента label очень чётко видно повторяющееся цепочки чисел
так же на изображение очень отчётливо видно что числа повторяются так как полосы
одного цвета толщиной не 1 пиксель а по 4 и более!


А вы не думали о том, что в вашей программе могут содержаться ошибки? Четче всего цепочки чисел видны не в WinForms, а в консоли. Попробуйте:

Код:
int main(array<System::String ^> ^args)
{
    Random^ rnd = gcnew Random();
    bool quit = false;
    while (!quit) {
        for (int i = 0; i < 300; ++i) {
            int fg = rnd->Next(0, 255);
            Console::Write(fg + L"\t");
        }
        Console::WriteLine();
        if (Console::ReadLine() == L"q") {
            quit = true;
        }
    }
    return 0;
}

По поводу литературы по STL - ее полно, на форуме есть отдельная тема, посвященная тому, что почитать. Вопрос слишком общий, чтобы его здесь раскрывать.
277
27 декабря 2011 года
arrjj
1.7K / / 26.01.2011
Не забывайте что генератор псевдослучайных чисел берёт определенные системные параметры ( в .NET время) как начальный источник энтропии, поетому такая конструкция int fg=Random().Next(0,255); может (при быстром выполнении) выдавать одинаковый результат,
Цитата:

The default seed value is derived from the system clock and has finite resolution. As a result, different Random objects that are created in close succession by a call to the default constructor will have identical default seed values and, therefore, will produce identical sets of random numbers.


для избежания этого надо делать так как подсказали на форуме Random ^rnd = gcnew Random(); for(int i=0;i<300;i++){ int fg=rnd->Next(0,255); ...} либо самому указывать источник энтропии при создании экземпляра ( Random(int32) )

297
27 декабря 2011 года
koodeer
1.2K / / 02.05.2009
radlif, ещё раз повторяю: WinForms - это платформа .NET. Не стоит начинать изучение C++ с диалекта C++/CLI.
Чтобы не путаться, лучше не использовать на начальном этапе Visual Studio. Эта IDE позволяет писать на C++ под .NET. В итоге, как я неоднократно убеждался, новички мешают в кашу нативный и управляемый код.

Лучше сначала как следует освоить нормальный C++. Для этого взять IDE, например, CodeBlocks. Потому что DevC++ мягко говоря устарела. Потом, если будет желание познакомиться с платформой .NET, стоит обратить внимание на C#. И лишь после его освоения, можно будет при необходимости использовать C++/CLI - для одной-единственной цели: связи управляемого и неуправляемого кода.
9.7K
28 декабря 2011 года
Vitamant
228 / / 07.02.2011
C#
Подскажите - а как корректно реализовать метод "ждать пока не..."?
Понятно, что используем цикл с проверкой по условию, но вот вопрос - если ожидание достаточно длительное (от 10 секунд до 140) что лучше - оставить цикл пустым или вставить в него Thread.Sleep(1000);? Очень меня напрягает эта вот заморозка процесса...
277
28 декабря 2011 года
arrjj
1.7K / / 26.01.2011
Ну можно так например
 
Код:
for(i=0;i<100;i+=1)
{
if(action)
break;
Thread.Sleep(10);
}

Но лучше есессно ждать конкретных действий (типа waitforsingleobject, хз что там в c# и что для конкретной задачи подходит -ожидание пользов. действий/данных из сети/win-сообщения )
9.7K
28 декабря 2011 года
Vitamant
228 / / 07.02.2011
Цитата: arrjj
Ну можно так например
 
Код:
for(i=0;i<100;i+=1)
{
if(action)
break;
Thread.Sleep(10);
}

Но лучше есессно ждать конкретных действий (типа waitforsingleobject, хз что там в c# и что для конкретной задачи подходит -ожидание пользов. действий/данных из сети/win-сообщения )


Нда. Печально.

Я тут взялся переписывать AutoIt на C#. Погряз в WinAPI'хах. -_- А поскольку в основном приходится работать с окнами - без задержек некуда. =\

Окей, еще два вопроса:

C#/WinAPI
1) Можно ли однозначно определить, что окно инициализировано и все компоненты в нем созданы? Реализовал метод "ждать окно с... название\класс\содержимое". В основном хватает только названия, но иногда, в случае с диалогами, приходится ориентироваться и на содержимое. То в, свою очередь, представляет собой строку, собранную из результатов GetText для всех дочерних "окон" (контролов). Контролы собираются при первом обращении к ним. И вот когда я перечисляю все окошки, сравниваю их по имени, по классу... и, если доходит до сравнения по содержимому, то оказывается, что собираю я их быстрее, чем те успевают появиться. Сейчас проблема решена путем окастылевания: Thread.Sleep(500). Но это, конечно, очень плохой вариант. Особенно если когда-нибудь появится необходимость найти нужное окошко среди двух десятков с одинаковым именем. Что делать?

2) Нет ли у кого на примете готового класса, способного набирать текст в неактивных окошках? Наработки у меня есть. Грмоздкая обертка вокруг винапишных Send\Post Message. Но 1) Мне очень не нравится то, как я реализовал распознавание русских букв и смену раскладки. 2) Хочется чтобы это чудо брало на себя функции по распределению нажатий на кнопочки. К примеру, чтобы нажатие на Alt в блокноте делало активным меню, а обычные буквы посылались в его Edit1. Вообще возможно ли это? Сейчас пользуюсь другим методом - который работает только с активными окнами.

7
28 декабря 2011 года
@pixo $oft
3.4K / / 20.09.2006
WaitForInputIdle
9.7K
29 декабря 2011 года
Vitamant
228 / / 07.02.2011
Пробовал напрочь игнорирует, считая, что окошко инпутабельно. =\
...
Я ведь правильно понимаю, что эта штука должна сама приостановить процесс из которого была вызвана и оживить его когда окошко станет инпутабельным?
9.7K
30 декабря 2011 года
Vitamant
228 / / 07.02.2011
C#
Имеем следующий вопрос (который не отменяет предыдущие :D) как правильно создавать синглтоны в C#?
Нет, то что правильно их не создавать вообще - эт понятно. Но вот надо! :) Вики предлагает три варианта:

Пример на C#

Для отложенной инициализации Singleton'а в C# рекомендуется использовать конструкторы типов (статический конструктор). CLR автоматически вызывает конструктор типа при первом обращении к типу, при этом обеспечивая безопасность в отношении синхронизации потоков. Конструктор типа автоматически генерируется компилятором и в нем происходит инициализация всех полей типа (статических полей). Явно задавать конструктор типа не следует, так как в этом случае он будет вызываться непосредственно перед обращением к типу и JIT-компилятор не сможет применить оптимизацию (например, если первое обращение к Singleton'у происходит в цикле).

Код:
/// generic Singleton<T> (потокобезопасный с использованием generic-класса и с отложенной инициализацией)
 
/// <typeparam name="T">Singleton class</typeparam>
public class Singleton<T> where T : class
{
  /// Закрытый конструктор по умолчанию необходим для того, чтобы
  /// предотвратить создание экземпляра класса Singleton
  private Singleton() { }
 
  /// Фабрика используется для отложенной инициализации экземпляра класса
  private sealed class SingletonCreator<S> where S : class
  {
    //Используется Reflection для создания экземпляра класса без публичного конструктора
    private static readonly S instance = (S) typeof(S).GetConstructor(
                BindingFlags.Instance | BindingFlags.NonPublic,
                null,
                new Type[0],
                new ParameterModifier[0]).Invoke(null);
 
    public static S CreatorInstance
    {
      get { return instance; }
    }
  }
 
  public static T Instance
  {
    get { return SingletonCreator<T>.CreatorInstance; }
  }
 
}
 
/// Использование Singleton
public class TestClass : Singleton<TestClass>
{
    private TestClass() { }
 
    public string TestProc()
    {
        return "Hello World";
    }
}


Также можно использовать стандартный вариант потокобезопасной реализации Singleton с отложенной инициализацией:

Код:
public class Singleton
{
  /// Защищенный конструктор нужен, чтобы предотвратить создание экземпляра класса Singleton
  protected Singleton() { }
 
  private sealed class SingletonCreator
  {
    private static readonly Singleton instance = new Singleton();
    public static Singleton Instance { get { return instance; } }
  }
 
  public static Singleton Instance
  {
    get { return SingletonCreator.Instance; }
  }
 
}


Если нет необходимости в каких либо публичных статических методах или свойствах (кроме свойства Instance), то можно использовать упрощенный вариант:

Код:
public class Singleton
{
  private static readonly Singleton instance = new Singleton();
 
  public static Singleton Instance
  {
    get { return instance; }
  }
 
Естественно, больше всего привлекает последний вариант (коим отродясь и пользовался). Но в связи с этим очень смущает такой вопрос - а почему в нем нельзя использовать статичные методы?
  /// Защищенный конструктор нужен, чтобы предотвратить создание экземпляра класса Singleton
  protected Singleton() { }  
}


---

[SIZE="5"]Вопрос снимается. :) Все перечисленные решения устарели.[/SIZE]
Код:
public class Singleton
    {
        private static readonly Lazy<Singleton> _instance = new Lazy<Singleton>(() => new Singleton());

        private Singleton() { }

        public static Singleton Instance
        {
            get { return instance .Value; }
        }

    }
9.7K
01 января 2012 года
Vitamant
228 / / 07.02.2011
C#
Господа, еще вопросик. Как бы универсализировать SendMessage/PostMessage? Дело в следующем. В качестве параметров передаются различные типы данных - целые числа, беззнаковые, указатели, строки, стрингбилдеры... И вот это чудище мне не нравится... А в перспективе перехода на перечисления она еще разрастется... В общем, хочется все это сжать в один метод. Вопрос - как?
Код:
[DllImport("user32.dll", CharSet = CharSet.Auto)]
        public static extern IntPtr SendMessage(IntPtr handle, uint wm, int wParam, int lParam);

        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        public static extern IntPtr SendMessage(IntPtr handle, WindowMessage wm, int wParam, int lParam);

        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        public static extern IntPtr SendMessage(IntPtr handle, WindowMessage wm, uint wParam, uint lParam);

        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        public static extern IntPtr SendMessage(IntPtr handle, WindowMessage wm, IntPtr wParam, IntPtr lParam);

        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        public static extern IntPtr SendMessage(IntPtr handle, WindowMessage wm, int wParam, StringBuilder lParam);

        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        public static extern IntPtr SendMessage(IntPtr handle, WindowMessage wm, int wParam, string lParam);
14K
08 января 2012 года
artem_kvadro
63 / / 30.07.2007
Не работает скролл колесиком, хотя мышью таскается. По какой причине это может происходить?
Шаблон описан так:
[CODE="xml"]<DataTemplate x:Key="ViewTemplate">
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
...
</Grid.ColumnDefinitions>
...
</Grid>
</DataTemplate>[/CODE]

Окно:
[CODE="xml"]<Grid>
<Expander>
<Grid>
<Grid.RowDefinitions>
...
</Grid.RowDefinitions>
<Border>
Вот он не прокручивается колесиком:
<ScrollViewer VerticalScrollBarVisibility="Auto">
<ListView ItemTemplate="{StaticResource ViewTemplate}" SelectionMode="Single">
</ListView>
</ScrollViewer>
</Border>
</Grid>
</Expander>
...
</Grid>[/CODE]
34K
23 января 2012 года
Алексей 24
35 / / 10.11.2011
Код:
#include<stdio.h>
#include<conio.h>
void main(){
//Даны целые числа  a1, a2, a3, a4 .  Получите целочисленную квадратную матрицу [bi j], у которой bi j =ai -3aj   (i,j=1,2,3,4).
          int a1,a2,a3,a4,i,n=1;
          int amas[4]={a1,a2,a3,a4};
          for (i=0;i<=3;i++)
               {printf("Vvedite chislo %d ", n);
                scanf("%d", amas);
                n++;
               }
           printf("Vi vveli chisla %d; %d;%d;%d ", a1,a2,a3,a4);
          }

Код написал, чтобы было меньше строк по вводу-выводу чисел.При компиляции этой части кода выбивает ошибку, т.е. Vvedite chislo 1_ ввел Vvedite chislo 2_ снова ввел. И "ошибка приложения".
14
23 января 2012 года
Phodopus
3.3K / / 19.06.2008
Цитата:

Код написал, чтобы было меньше строк по вводу-выводу чисел.При компиляции этой части кода выбивает ошибку, т.е. Vvedite chislo 1_ ввел Vvedite chislo 2_ снова ввел. И "ошибка приложения".



Цитата: Алексей 24
 
Код:
scanf("%d", amas);


ошибка тут. Прочитайте помощь по функции и посмотрите примеры использования

34K
24 января 2012 года
Алексей 24
35 / / 10.11.2011
Цитата: Phodopus
scanf("%d", amas);


Переписал со взятием адреса, т.е.

 
Код:
scanf("%d", &amas);

Ввод идет нормально. Теперь немножко проблема с выводом, например если вводишь числа типа 1,2,3,4. На выходе получаем:
[CENTER]Vvedite chislo 1 0
Vvedite chislo 2 1
Vvedite chislo 3 2
Vvedite chislo 4 6
Vi vveli chisla 2293592;4200342;4200240;3342445
[/CENTER]
34K
24 января 2012 года
Алексей 24
35 / / 10.11.2011
Кажется понял в чем ошибка. Это же элементы массива и их нужно выводить циклом по очереди.
34K
24 января 2012 года
Алексей 24
35 / / 10.11.2011
Океу, программа написана. Phodopus, спасибо большое.
79K
25 января 2012 года
nezn
8 / / 25.01.2012
Доброго времени суток. Пытаясь написать маленькую программку на C#, я столкнулся с такой проблемой. По условиям мне требуется загрузить страницу сайта, пропарсить ее и вывести в listBox имеющиеся ссылки. Но ссылки не все, а только находящиеся в блоке quote.
В сети достаточно примеров написания самой программы. Например такой:
Цитата:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Net;
using System.Web;
using HtmlAgilityPack;

namespace primer
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
HtmlWeb web = new HtmlWeb();
HtmlAgilityPack.HtmlDocument doc = web.Load("ваш url");

HtmlNodeCollection nodes = doc.DocumentNode.SelectNodes("//a[@href]");
if (nodes == null)
return;
foreach (HtmlNode node in nodes)
{
listBox1.Items.Add(node.Attributes["href"].Value);
}
}
}
}


Эта программка выводит в listbox все ссылки: "//a[@href]", а мне, как я писал, нужны в блоке quote. Пытался найти внятные примеры использования HtmlAgilityPack. Варианты типа "/HTML/body//a[@href]" приводят только к пустой nodes. Буду рад любой подсказке, Не обязательно даже quote, можно и body, я думаю в этом случае переделать под свои нужды будет легче.

41K
25 января 2012 года
rikki
46 / / 27.05.2010
Обрежь документ сначала. Что-то типа такого -
 
Код:
string s =doc.toString();//не уверен что есть такой метод у HtmlDocument
// но что-то похожее должно быть
int startPoint= s.IndexOf("<body>");
int endPoint= s.IndexOf("</body>");
s = s.Substring(startPoint,endPoint);

получиться обрезанная дока.Можно использовать регулярки
 
Код:
string s = Regex.Match(htmlPage,
                                @"\<body\b[^>]*\>\s*(?<Title>[\s\S]*?)\</body\>",
                                RegexOptions.IgnoreCase).Groups["body"].Value;

А потом
 
Код:
doc.LoadHtml(s);

И ищи свои ссылки уже там.
А вообще, хватило б для этого одних только регулярок.
14
25 января 2012 года
Phodopus
3.3K / / 19.06.2008
Цитата: nezn
Эта программка выводит в listbox все ссылки: "//a[@href]", а мне, как я писал, нужны в блоке quote. Варианты типа "/HTML/body//a[@href]" приводят только к пустой nodes. Буду рад любой подсказке,


это обычный xpath. Изучите его уже и пользуйте как вздумается.

79K
25 января 2012 года
nezn
8 / / 25.01.2012
Цитата: rikki
Обрежь документ сначала. Что-то типа такого -
 
Код:
string s =doc.toString();//не уверен что есть такой метод у HtmlDocument
// но что-то похожее должно быть
int startPoint= s.IndexOf("<body>");
int endPoint= s.IndexOf("</body>");
s = s.Substring(startPoint,endPoint);

получиться обрезанная дока.Можно использовать регулярки
 
Код:
string s = Regex.Match(htmlPage,
                                @"\<body\b[^>]*\>\s*(?<Title>[\s\S]*?)\</body\>",
                                RegexOptions.IgnoreCase).Groups["body"].Value;

А потом
 
Код:
doc.LoadHtml(s);

И ищи свои ссылки уже там.
А вообще, хватило б для этого одних только регулярок.



спасибо за совет, у HtmlDocument есть такой метод, только прописывается ToString().
Попробовал первый вариант, у меня получился такой код:

Цитата:
HtmlWeb web = new HtmlWeb();
HtmlAgilityPack.HtmlDocument doc = web.Load("URL");
string s = doc.ToString();
int startPoint = s.IndexOf("<body>");
int endPoint = s.IndexOf("</body>");
s = s.Substring(startPoint, endPoint);

HtmlNodeCollection nodes = doc.DocumentNode.SelectNodes("//a[@href]");
if (nodes == null)
return;
foreach (HtmlNode node in nodes)
{
listBox1.Items.Add(node.Attributes["href"].Value);
}
}


На строке s = s.Substring(startPoint, endPoint); выдает ошибку. startPoint и endPoint показывает: -1.
Регулярные выражения не менее сложны, а я в будущем планирую более сложный проект. В случаи с HtmlAgilityPack надеялся что можно прописать уточнение выбранного в строке HtmlNodeCollection nodes = doc.DocumentNode.SelectNodes("//a[@href]"); Правда метод обрезки тоже нормальный, подскажите пожалуйста почему выдает -1, может просто не находит тег <body>.

79K
25 января 2012 года
nezn
8 / / 25.01.2012
Цитата: Phodopus
это обычный xpath. Изучите его уже и пользуйте как вздумается.



На этой странице по ссылке я уже кажется живу. Сложно что-то понять без реальных примеров. Если не сложно напишите пару-тройку любых понятных путей.

41K
26 января 2012 года
rikki
46 / / 27.05.2010
Цитата: nezn
Правда метод обрезки тоже нормальный, подскажите пожалуйста почему выдает -1, может просто не находит тег <body>.


Тег <body> может иметь параметры, например - <body onload="if (document.body.scrollIntoView &amp;&amp; fetch_object('currentPost')>. (взято с этого форума ;)))
Потому попробуйте искать так:

 
Код:
int startPoint = htmlPage.IndexOf("<body");
            int endpoint = htmlPage.LastIndexOf("body>");
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог