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

Ваш аккаунт

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

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

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

(Часть 2) Я начинающий, подскажите пожалуйста как...

1
15 декабря 2007 года
kot_
7.3K / / 20.01.2000
Данная тема предназначена для размещения вопросов начинающих программистов.
Прежде чем задать вопрос здесь, вы обязаны использовать
  1. Поиск по форуму, используя ключевые слова из вашего вопроса. Как правильно использовать поиск - читайте здесь
  2. Список наиболее часто задаваемых вопросов (FAQ)
  3. Поиск по предыдущей теме
Учитывайте пожалуйста, что вопрос который лично вам кажется сложным, в большинстве случаев на форуме рассмотрен достаточно подробно. Не соблюдение этих правил, приведет к тому, что ваше сообщение будет удалено, а вы получите нарушение.
Кроме того, прежде чем размещать сообщение, ознакомьтесь с правилами.
При размещении вопросов начинающих помимо указанной темы, будет выдаваться нарушение, а тема удаляться.
Страницы:
590
17 сентября 2009 года
Gigahard
223 / / 03.04.2006
У меня глупый вопрос по 6му билдеру.
Обнаружил "особенность" совсем недавно.

Собственно проблема:
При разработке проекта, прототипы фунций складываем в хедер, а реализацию в сишник.
В последствии, к проекту присоединяем сишник, а хедер включаем в необходимое место с помощью директивы препроцессора #include...

Раньше всегда такие отдельные библиотечки (C файл реализации + хедер), размещал в одной папке с проектом. Все линковалось замечательно.

Но вот недавно, проект у меня лежал на одном диске, а библиотечка в на другом диске. Настроил я в опциях проекта пути. Добавил библиотечный Сшник к проекту... Включил хедер с помощью #include...
А компилятор ругается... Не хочет линковать проект. Пишет про библиотечные функции, что мол "Unresolved extrnal бла-бла-бла...".
Стоит те файлы скинуть в папку проекта и все нормально компилится и линкуется...

Я не пойму, что за фигня? Ведь к примеру те же самые стандартные Сишные библиотеки типа math.h тоже лежат в удаленной папке и для сборки их не нужно кидать в папку проекта. А со своими файлами вот такая фигня...
Может я неправильно пути настраиваю? Помогите разобратся...

Да... Забыл уточнить, что такая фигня происходит только с файлами с Сишными расширениями (*.h и *.c) соответственно. С С++ файлами (*.hpp и *.cpp) все компилится и линкуется во всех случаях.
26K
17 сентября 2009 года
dufifa
56 / / 21.08.2008
Расскажи как пути настраивал))
590
17 сентября 2009 года
Gigahard
223 / / 03.04.2006
В опциях проекта(Project->Options) во вкладке Directories/Conditionals, в полях "Include path" и "Library path" добавил путь папки где лежат сишные исходники (хедер и сишник).
Далее в Project->Add to project... включил в проект Сишник с реализацией, а к модулю, где я использую функции из этого сишника, подключил хедер, через #include <mylib.h>

Билдер все вроде и компилит и в автозаполнении кода подсказывает согласно прототипам функций из хедера. А вот при линковке пишет, что "Unresolved extrnal название_функции() бла-бла-бла...".

Причем в удаленной папочке и .obj файл появляется... А вот линковка не проходит.
25K
18 сентября 2009 года
San_
42 / / 03.10.2007
рискну предположить что где то есть обьявление функции и нет определения , возможно имена разнятся или еще чего

Код:
TFileStream *stA = new TFileStream("test.txt",fmCreate);
    TWriter *wrA = new TWriter(stA,512);

    AnsiString aux = " Test String 1234567890";

    int c = aux.Length();
    wrA->WriteInteger(c);
    wrA->WriteStr(aux);

    delete wrA;
    delete stA;


обьясните плиз , вот такой код
запись в файл числа и строки
содержимое файла:

Цитата:
~~~ Test String 1234567890



ТРИ байта числа и затем текстовая строка:confused:
вопрос куда делся четвертый байт

590
18 сентября 2009 года
Gigahard
223 / / 03.04.2006
Если первая строчка, это к моему вопросу, то нет. Естественно все эти допущения проверил еще до написания вопроса на форуме. Просто вот такой вот факт. Не линкуется удаленный сишный код, даже при прописанных путях проекта.
Мне бы подтверждение данного факта получить хотя бы. В лучшем случае разрешить проблему.

Теперь по поводу записи в файл.
Вы файл просматриваете в текстовом редакторе? Посмотрите в HEXе. Все байты там наверняка будут.
25K
18 сентября 2009 года
San_
42 / / 03.10.2007
смотрел в total commandere , в шестнадцатиричном режиме , байтов было три
просто класс как то оригинально числа в файл записывает , в зависимости от значения числа, число байт может быть различно

2 Gigahard
может быть забыли какой то файл к проекту добавить ?
специально сейчас раскидал исходники проги по разным дискам
затем добавил все файлы в проект , нормально компилит
590
18 сентября 2009 года
Gigahard
223 / / 03.04.2006
1. В принципе, записывая число в файл, возможно пишутся только значимые байты. Т.е. даже если у Вас переменная объявлена как int(4 байта), а число содержащееся в этой переменной занимает только 3 значимых байта (к примеру 0x00aabbcc)то вполне возможно, что TWriter запишет только значимые байты, т.е. aa, bb и cc. Попробуйте переменной с присвоить значение 0xaabbccdd и посмотрите, что запишется в файл.

2. Исходники с расширениями .h и .c? Билдер именно 6й?
У меня нормально компилит и линкует только если файлы с с++ расширениями, т.е .hpp и .cpp
А вот с Сишными расширениями (.h и .c), не линкуется :( Может потому что проект изначально как C++ объявлен?
841
19 сентября 2009 года
_nic
199 / / 29.07.2006
 
Код:
SendMessage(ListBox1->Handle, LB_SETHORIZONTALEXTENT, ListBox1->Width, 0);

Пробовал вставлять и в DrawItem , и в FormCreate реакции 0 В чем я ошибся?
25K
19 сентября 2009 года
San_
42 / / 03.10.2007
Цитата: Gigahard
1. В принципе, записывая число в файл, возможно пишутся только значимые байты.

2. Исходники с расширениями .h и .c?



1. разобрался , именно так он и их пишет

2. Я немного поторопился , нормально компилятся только .cpp файлы

как не старался нечиего не мог сделать с .h и .c файлами

однако вот так :

 
Код:
#include "File1.c"
работает
файл File1.c на другом диске , а .h - ка в этом случае нафиг не нужна
590
19 сентября 2009 года
Gigahard
223 / / 03.04.2006
1. Для записи в файл чисел не зависимо от числа значимых байтов, т.е в соответствии с шириной типа, можно использовать стандартную С++ную библиотеку ввода вывода, работая в бинарном режиме. Или использоват Сишную библиотеку ввода вывода stdio.h. Ну или использовать WinAPI функции WriteFile. В последнем случае, Вы напрямую указывете число записываемых байт.

2. Я проверил версию, что косяк возникает при сборке С++ проекта. Да, действительно, если проект изначально создавался как Си приложение, то удаленные Сишные исходники линкуются без проблем. Если же проект Си++ный, то почему то нет...

А .h нужен. Без него никуда. Там константы и структуры :) А вот файлы .c не инклудятся напрямую. Подключаются к проекту через "Project->Add To Project"
590
20 сентября 2009 года
Gigahard
223 / / 03.04.2006
Все, вопрос снят. Чтобы прилинковать исходник с Си кодом в С++ проект, нужно при включении Сишного хедера применять конструкцию вида:
 
Код:
extern "C"
{
    #include <myClib.h>
}

Или же в самом хедере с помощью препроцессора, в зависимости от типа проекта, включать строчки extern "C".
Вопрос снят всем спасибо за обсуждение.
16K
10 октября 2009 года
iRain
72 / / 12.03.2008
Всем привет!
Есть Form2 и Form3
Есть функция:
 
Код:
Form3->Parent = Form2;

На Form3 есть объект Edit1. Когда я мышкой клацаю на Эдите, то он не выбирается. Если перехожу на него при помощи клавиши "ТАВ", то все нормально.
Что сделать, что бы он без проблем выбирался?
6
10 октября 2009 года
George
4.1K / / 05.01.2007
смотрю код. разве это правильно? меня терзают смутные сомнения...
16K
10 октября 2009 года
iRain
72 / / 12.03.2008
Цитата: Washington
смотрю код. разве это правильно? меня терзают смутные сомнения...


Сударь - это вы о моем коде? Как по мне, так все замечательно, единственная проблемы только с Эдитом, а все остальные компоненты работают как надо.

297
10 октября 2009 года
koodeer
1.2K / / 02.05.2009
Цитата: iRain

Есть Form2 и Form3
Есть функция:
 
Код:
Form3->Parent = Form2;


Form2, Form3 - это классы или экземпляры классов?
Меня как и Washington'а терзают сомнения...

16K
10 октября 2009 года
iRain
72 / / 12.03.2008
Тогда вопрос такой. У меня есть три формы, основная форма проэкта - первая. Вторая форма у меня FormStyle = MDIForm, Когда третью форму я ставлю FormStyle = MDIChild, выбивает ошибка о том, что нету основной MDI формы. Я так понимаю, что мне нужно вторую форму сделать основной формой проэкта...
Или есть другие варианты?
288
11 октября 2009 года
nikitozz
1.2K / / 09.03.2007
Цитата: koodeer
Form2, Form3 - это классы или экземпляры классов?
Меня как и Washington'а терзают сомнения...



Эмм... собственно то поэтому поводу сомнения не терзают. Раз автору удалось скомпилить строку

 
Код:
Form3->Parent = Form2;

это явно экзэмпляры. :)
16K
11 октября 2009 года
iRain
72 / / 12.03.2008
Цитата: nikitozz
Эмм... собственно то поэтому поводу сомнения не терзают. Раз автору удалось скомпилить строку
 
Код:
Form3->Parent = Form2;

это явно экзэмпляры. :)



После такого топика, я понимаю, что "экземпляр" реально я!!! :)

841
12 октября 2009 года
_nic
199 / / 29.07.2006
По каким полям,и как, TWMHotKey можно узнать какая комбинация клавишь была нажата ?
288
12 октября 2009 года
nikitozz
1.2K / / 09.03.2007
Цитата: _nic
По каким полям,и как, TWMHotKey можно узнать какая комбинация клавишь была нажата ?



http://articles.org.ru/cfaq/index.php?qid=184

17K
15 октября 2009 года
neWManAlex
15 / / 20.10.2006
У меня есть таблица типа TStringGrid, под названием sg_Table размерностью 4 столбца на 10 строк. Мне нужно выделить в 4-м стоблце все ячейки с "0" красным цветом (либо сделать шрифт красного цвета). Как мне можно это сделать?

Отвечайте, пожалуйста, поподробнее, с примером.

Заранее спасибо за ответы.
14
16 октября 2009 года
Phodopus
3.3K / / 19.06.2008
Цитата: neWManAlex
У меня есть таблица типа TStringGrid, .......... нужно выделить в 4-м стоблце все ячейки с "0" красным цветом (либо сделать шрифт красного цвета). Как мне можно это сделать?


обработать событие OnDrawCell
пример - см. картинку
[COLOR="Gray"]код напишешь сам, обнаглели вконец[/COLOR]

17K
17 октября 2009 года
neWManAlex
15 / / 20.10.2006
Phodopus, приведите, пожалуйста, код события OnDrawCell из вашей программы, а то я не могу понять какой функцией меняется фон/шрифт в ячейке.

Мой код не даёт никакого результата.
 
Код:
void __fastcall Tfrm_Dolg::sg_TableDrawCell(TObject *Sender, int ACol, int ARow,
      TRect &Rect, TGridDrawState State)
{
    if(ACol==4&&sg_Table->Cells[ACol][ARow]=="0")
        sg_Table->Canvas->Font->Color=clRed;
}
45K
18 октября 2009 года
alexeevich
2 / / 10.12.2008
Здравствуйте. При выполнении этого кода в Builder 6 возникает ошибка Access Violation :( подскажите как побороть?
Код:
#include <vcl.h>
#include <stdlib.h>
#include <string.h>
#include <iostream.h>
#pragma hdrstop
class Person
{
  private:
    int number;
    char * fio;
    int pol;
    double age;
    Person() { number = 0; fio = ""; pol = 0; age = 0; };
  public:
    Person(int _number, char * _fio, int _pol, double _age);
    void Print();
};

Person::Person(int _number, char * _fio, int _pol, double _age)
{
  this->number = _number;
  ::strcpy(this->fio, _fio);
  this->pol = _pol;
  this->age = _age;
}
void Person::Print()
{
  cout <<"Number: "<<number<<endl;
  cout <<"Name: "<<fio<<endl;
  cout <<"Sex: "<<pol<<endl;
  cout <<"Age: "<<age<<endl;
}

#pragma argsused
int main()
{
  Person P(1, "Ivanov F.D.", 0, 34);
  P.Print();

  Person *P3 = new Person(1, "Petrov D.A.", 0, 31);  // здесь появляется ошибка

}
12K
18 октября 2009 года
Ghox
297 / / 26.07.2009
Цитата: alexeevich
Здравствуйте. При выполнении этого кода в Builder 6 возникает ошибка Access Violation :( подскажите как побороть?


Полагаю что вот из-за чего:

 
Код:
Person::Person(int _number, char * _fio, int _pol, double _age)
{
  // ...
  ::strcpy(this->fio, _fio);
  // ...
}

Вы пытаетесь записать строку по указателю, который до этого не был проинициализирован, и соответственно указывает неизвестно куда - скорее всего, на какую-то область памяти, не принадлежащую программе, и к которой она соответственно не имеет доступа. Необходимо проинициализировать указатель, причем выделить для записываемой строки достаточно места:
 
Код:
Person::Person(int _number, char * _fio, int _pol, double _age)
{
  // ...
  this->fio = new char[::strlen(_fio) + 1];
  ::strcpy(this->fio, _fio);
  // ...
}

P.S. Какая-то странная у Вас манера вызывать в конструкторе переменные класса через this... Неужели в Билдере нельзя обращаться к переменным класса напрямую? Вот так например:
 
Код:
Person::Person(int _number, char * _fio, int _pol, double _age)
{
  // ...
  fio = new char[::strlen(_fio) + 1];
  ::strcpy(fio, _fio);
  // ...
}
45K
18 октября 2009 года
alexeevich
2 / / 10.12.2008
Ghox большое спасибо, буду знать, :] а this я просто из за ошибки написал.
14
19 октября 2009 года
Phodopus
3.3K / / 19.06.2008
Цитата: neWManAlex
Phodopus, приведите, пожалуйста, код ...


не могу, он на (ахтунъг!) Delphi а тема по билдер. Уберите св-во DefaultDrawing и рисуйте текст самостоятельно, см. исходники TStringGrid.

25K
22 октября 2009 года
San_
42 / / 03.10.2007
Подскажите плиз
есть компонент TSringGrid - таблица
нужно как то отлавливать момент когда пользователь мышкой изменяет размеры ячеек - ширину столбцов или высоту строк
246
23 октября 2009 года
GIZMO
1.8K / / 30.07.2004
Цитата: San_
Подскажите плиз
есть компонент TSringGrid - таблица
нужно как то отлавливать момент когда пользователь мышкой изменяет размеры ячеек - ширину столбцов или высоту строк


Если в тупую ... замечено, что при нажатии левой кнопки мыши на сетке в шапке грида (режим изменения размера) OnMousedown не происходит (в отличие от OnMouseUp).
1. Заводишь флаг для нажатия левой кнопки мыши, ставишь его в false,
2. в OnMousedown ставишь его в true,
3. а в OnMouseUp проверяешь флаг true - нажали хзгде, флаг false нажали(отпустили) при изменении размера колонки,
4. флаг обратно в false
и т.д.

У меня для 2009-го так прокатывает, но это так сказать студенческий вариант или метод тыка (кому как удобней) А по=хорошему надо исходнички посмотреть как там все организовано, но это уже тебе д/з.

11
23 октября 2009 года
oxotnik333
2.9K / / 03.08.2007
Цитата: San_
Подскажите плиз
есть компонент TSringGrid - таблица
нужно как то отлавливать момент когда пользователь мышкой изменяет размеры ячеек - ширину столбцов или высоту строк


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

25K
23 октября 2009 года
San_
42 / / 03.10.2007
Цитата: GIZMO
...
А по=хорошему надо исходнички посмотреть как там все организовано, но это уже тебе д/з.


тогда уж совсем тупой вопрос , а где их взять ?
в Grids.hpp одни обьявления классов , а куда аффторы быдлера дели реализацию я так и не нашел

11
23 октября 2009 года
oxotnik333
2.9K / / 03.08.2007
Цитата: San_
тогда уж совсем тупой вопрос , а где их взять ?
в Grids.hpp одни обьявления классов , а куда аффторы быдлера дели реализацию я так и не нашел


см. файлы с расширением *.pas

54K
24 октября 2009 года
samu3l
4 / / 23.10.2009
Здравствуйте!
Пытаюсь открыть файл на запись в консольном приложении:

Код:
#pragma hdrstop
#include <iostream.h>
#pragma argsused
using namespace std;

int main()
{
    char* filename = "y:\temp\list.txt";
    FILE *in;
    in = fopen (filename, "wt");

    if (in == 0) {
        cout << "File not found !!!" << endl;
        fclose(in);
    }

    fputs( "string", in );

    fclose(in);
}

При выполнении вылетает с ошибкой:
First chance exception at $75CE42EB. Exception class EAccessViolation with message 'Access Violation'. Process Project3.exe (4768)

Извините, уже решилось
 
Код:
y:\\temp\\list.txt
25K
25 октября 2009 года
San_
42 / / 03.10.2007
Цитата: samu3l
Здравствуйте!
Пытаюсь открыть файл на запись в консольном приложении:

Код:
#pragma hdrstop
#include <iostream.h>
#pragma argsused
using namespace std;

int main()
{
    char* filename = "y:\temp\list.txt";
    FILE *in;
    in = fopen (filename, "wt");

    if (in == 0) {
        cout << "File not found !!!" << endl;
        fclose(in);
                      return 1;
    }

    fputs( "string", in );

    fclose(in);
}



имхо, вот так вернее

54K
27 октября 2009 года
samu3l
4 / / 23.10.2009
Здравствуйте!
Подскажите пожалуйста, есть ли возможность передать подобной функции (func) в качестве параметра элемент структуры?
Как альтернативу рассматриваю двухмерный массив, но хотелось бы массивом из структур.

Код:
void func(/*элемент структуры*/, prop M[], int n)
{
  int i = 0;

  while (i < n) {
    M./*элемент структуры*/ = "a";
    i += 1;  
  }

}

void main()
{
  struct prop {
    int type;
    AnsiString name;
  };

  int n = 100;
  prop M[n];

  func(/*элемент структуры (например name)*/, M, n);
}

Заранее спасибо!
288
28 октября 2009 года
nikitozz
1.2K / / 09.03.2007
Цитата: samu3l
Здравствуйте!
Подскажите пожалуйста, есть ли возможность передать подобной функции (func) в качестве параметра элемент структуры?
Как альтернативу рассматриваю двухмерный массив, но хотелось бы массивом из структур.



В данном контексте нет.

54K
06 ноября 2009 года
samu3l
4 / / 23.10.2009
Здравствуйте!
Подскажите пожалуйста как получить сведения возвращаемые функцией NetFileEnum.
В MSDN сказано что функция возвращает определенный набор сведений в зависимости от указанного значения, я указал "3" и предполагаю, что функция вернет значения в виде структуры _FILE_INFO_3.
Пока не смог найти примера получения данных возвращаемых этой функцией.

Вот функция:

Код:
void __fastcall TForm1::OpenedFiles()
{
   LMSTR serv = "\\\\localhost";
   LMSTR path = "Users\\user\\Documents";
   LPBYTE* buf
   LPDWORD num;
   LPDWORD totalnum;
   
   NetFileEnum(serv, path, NULL, 3, buf, MAX_PREFERRED_LENGTH, num, totalnum, NULL);
   NetApiBufferFree(buf);
}


Cтруктура _FILE_INFO_3 (из MSDN):

 
Код:
truct _FILE_INFO_3 {
   DWORD fi3_id;
   DWORD fi3_permissions;
   DWORD fi3_num_locks;
   LMSTR fi3_pathname;
   LMSTR fi3_username;
} FILE_INFO_3,
  *PFILE_INFO_3,
  *LPFILE_INFO_3;
12K
06 ноября 2009 года
Ghox
297 / / 26.07.2009
Цитата: samu3l
Здравствуйте!
Подскажите пожалуйста как получить сведения возвращаемые функцией NetFileEnum.
В MSDN сказано что функция возвращает определенный набор сведений в зависимости от указанного значения, я указал "3" и предполагаю, что функция вернет значения в виде структуры _FILE_INFO_3.
Пока не смог найти примера получения данных возвращаемых этой функцией.


В MSDN есть пример (правда в нем сказано что для систем Windows 95/98/Me, и в нем используется структура file_info_50, но может нактолкнет на мысль как вам нужно с этой функцией работать):
http://msdn.microsoft.com/en-us/library/bb720835.aspx

54K
06 ноября 2009 года
samu3l
4 / / 23.10.2009
Спасибо!
Пример помог, отчасти, Чтобы узнать какое значение вернула функция (насколько успешно выполнилась) надо создать переменную типа NET_API_STATUS и ей присвоить значение, возвращаемое функцией NetFileEnum.
54K
09 ноября 2009 года
opium_none
5 / / 09.11.2009
возникла такая проблема: создаю TLabel *Сell в процессе выполнения в конструкторе TMainForm, для Сell устанавливаю свойство Parent = this.
при компиляции возникает ошибка: Cell не является членом класса TMainForm. причем в методах класса, которые используют Сell (TMainForm дружественный для этого класса)
курю гугл. безрезультатно.

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