Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Вопросы и ответ по С/C++, Pascal, Delphi. Лучшее из нашего F #1


Информационный Канал Subscribe.Ru

Realcoding.NET

Рассылка сайта Программирование для всех
Realcoding.NET выпуск от 30 июня 2004г. http://www.realcoding.net 

Поддержите отечественный генератор отчётов FastReport http://www.delphizine.com/ballot2004/

Множество профессиональных программ разрабатывается программистами из стран бывшего exUSSR. Многими из них мы пользуемся, порой каждый день, не задумываясь об этом, или даже не зная этого. Многие из них мы получаем в использование совершенно бесплатно (freeware), на другие - специальная цена для exUSSR - намного ниже чем для всего мира. Поддержите отечественных разработчиков на голосовании Delphi Informant: FastReport, FastScript, FIBPlus,...

Сайт в течение двух суток был не доступен в связи с переездом на новый хостинг, приношу свои извинения посетителям. Теперь сайт снова жив и здравствует. Заходите :) http://www.realcoding.net

Новости из мира программирования:

  1. Новая информация об открытии кода Solaris
  2. Microsoft выпустила средства разработки ПО для начинающих
  3. Novell выпустила открытую реализацию платформы .Net
  4. Инструментарий не для профессионалов от Microsoft
  5. .NET Framework Version 2.0 Redistributable Package Beta 1
  6. Sun представила новую версию платформы Java
  7. Бета-версии Visual Studio и SQL Server на подходе
  8. Оpen source от Microsoft

Объявления:

-----------------------------

Приглашаются авторы статей для сайта по различным тематикам - программирование, бд, web. Постоянным авторам будут вручаться книги. Не упустите шанс! С вопросами и предложениями писать на admin@realcoding.net

Так же для нашего раздела Исходников требуется человек, который желает заниматься обновлением и добавлением материалов в этот раздел. Всем желающим писать на admin@realcoding.net

----------------------------

Горячие темы форума:

посетить форумы / поиск по форумам

Внимание! Теперь через нашу рассылку вы сможете задавать вопросы, отправляя их ко мне на е-майл. В следующем номере вопросы будут выкладываться в рассылке и все, кто знает решение для них, буду отправлять сообщения ко мне. Я же в свою очередь помещу эти ответы в следующий выпуск и т.д. и т.п. Надеюсь всем понятно :)

Теперь можно задать вопросы по Базам Данных (Access, Oracle, Sql etc), Web разработке (PHP, Perl, ASP) и .NET Технологии!

Итак,

Задать вопрос по: Delphi | C/C++ | Pascal | Базам Данных | Web | .NET

(Q: - вопрос, А: - ответ)

Вопросы по Delphi, ждущие ответа:

1. Кто нить работал с платами семейства Ольха 9Р Купили в понедельник придет, надо написать программу помогите разобраться !
Ответить | Спрашивает Малахов Александр

2. Как без использования компонент перекодировать DVD в MPEG
Ответить | Спрашивает sergey

3. Как написать программу определитель номер телефона(АОН)?
Ответить | Спрашивает lavrenoff

4. Как отправить e-mail со своей программы неизпользуя внешние SMTP серверы.
Ответить | Спрашивает SIA

5. Как в Делфях можно открывать внешние приложения (архиватор) с
передачей ему каких-либо параметров?
Заранее благодарю!!! Жду ответов.
Ответить | Спрашивает Roman

6. И целая серия вопросов от человека с интересным ником Чувак Мощный :)

  1. Как Сохранить ключ Реестра в файл? Пробовал SaveKey - создает пустой файл и ничего туда не пишет... Ответить
  2. Как вызвать окно свойств для объекта (файла, папки) - типа как в Проводнике по Alt+Enter? Ответить
  3. Как добавить пункт в меню Проводника и присвоить ему значок. И чтобы показывался для всех объектов (файлов, папок, дисков) - типа как в ВинРАР'е.  Ответить
  4. Как сделать в обычном TreeView объект типа Проводника, со списком дисков и папок, без использования сторонних
    компонентов. Желательна поддержка Drag & Drop. Ответить
  5. Как вызвать системное контекстное меню для файла\папки? Ответить

Q: Здравствуйте! Подскажите, как из Memo перевести данные в таблицу (сохранить в базу данных).
Данные принимаются мной по сом-порту от нажатия кнопки на теплосчетчике и имеют следующий вид:

t1= 0.0 t2=445.8 t3= 9.9 d1= 0.0000 d2= 0.0000 q1= 0.0000
t1= 0.0 t2=445.8 t3= 9.9 d1= 0.0000 d2= 0.0000 q1= 0.0000
t1= 0.0 t2=445.8 t3= 9.9 d1= 0.0000 d2= 0.0000 q1= 0.0000

t1=, t2=, t3=, d1= и т.д. мне не нужны, нужно только, чтобы сами значения отображались в столбцах t1, t2, t3 и т.д.

Заранее благодарен.

Ответить | Спрашивает Шахмартов Д.П.

A: Отвечает: Alex Van Glukhman

Ну скажем это самый тупой вариант действует в том случае если строки в MEMO одинаковой длины и количество знаков в каждой группе чисел одинаково. И для того чтобы исключить повторную запись в БД после приведённого кода желательно вставить Memo1.Clear;

procedure TForm1.Button1Click(Sender: TObject);
var
NLn, Ln: Integer; //NLn-количество строк в Мемо
//Ln-текущая строка
MemoStr: String; //MemoStr-содержимое текущей строки
t1, t2, t3, d1, d2, q1: String; //t1,t2,t3,d1,d2,q1-строковые значения
// полей текущей строки
begin
Table1.Active:=False;
Ln:=0; //обращаемся к 1 строке Мемо
NLn:=Memo1.Lines.Count-1; //получаем количество строк
While Ln<>NLn do //Пока не проходим все строки MEMO в цикле
begin
MemoStr:=Memo1.Lines[Ln]; //Вытаскиваем содержимое текущей строки
t1:=Copy(MemoStr,5,3); //Обрабатываем получая значения полей
t2:=Copy(MemoStr,12,5);
t3:=Copy(MemoStr,22,3);
d1:=Copy(MemoStr,30,6);
d2:=Copy(MemoStr,41,6);
q1:=Copy(MemoStr,52,6);
Table1.Active:=true; //Записываем в таблицу
Table1.Append;
Table1.Fields[0].AsString:=t1;
Table1.Fields[1].AsString:=t2;
Table1.Fields[2].AsString:=t3;
Table1.Fields[3].AsString:=d1;
Table1.Fields[4].AsString:=d2;
Table1.Fields[5].AsString:=q1;
Table1.Post;
Table1.Active:=False;
inc(Ln); //Увеличиваем номер строки
end;
Table1.Active:=True;
end;


Q: Привет. Существует ли компонента представляющая панель, на которой расположены кнопки, и другие компоненты (не tool, а TButton), чтобы при изменении размера панели кнопки сами меняли свои размеры. Также должны быть свойства типа «отступ», «интервал» ну и стандартные для Button. Я реализовывал это из набора независимых кнопок и обрабатывал сообщения о изменении размера панели но под NT 4 почему-то это не работало. А натолкнуло меня на эту мысль панель с кнопками у Total Commander’a (та, что внизу).
Ответить | Спрашивает Mihail Sokolov

A: Отвечает: Marcel NICOLAI

Для этих целей у визуальных компонент существует свойства «Anchors». Для того чтоб было понятно как работает, поставь на пустую форму кнопку (TButton), и поменяй свойство Anchors на [akLeft, akTop, akRight, akBottom] а потом попробую изменить размеры формы и увидишь эффект который тебе нужен.


Q: Как смоделировать клик мыши по заданным координатам X и Y?
Ответить | Спрашивает SIA

A: Отвечает: Юрий Криворучко

Вот держи:

Вариант первый:

Следующий пример демонстрирует использование API функции mouse_event() для эмуляции событий мышки. Когда Button2 нажата, то мышь перемещается на Button1 и щёлкает по ней. Координаты мыши даны в "Mickeys", где 65535 соответствует ширине экрана.

procedure TForm1.Button1Click(Sender: TObject); 
begin 
  ShowMessage('Button 1 clicked'); 
end; 

procedure TForm1.Button2Click(Sender: TObject); 
var 
  Pt : TPoint; 
begin 
{Allow Button2 to repaint it's self} 
  Application.ProcessMessages; 
{Получаем координаты центра button 1} 
  Pt.x := Button1.Left + (Button1.Width div 2); 
  Pt.y := Button1.Top + (Button1.Height div 2); 
{Преобразуем Pt в координаты экрана} 
  Pt := ClientToScreen(Pt); 
{Преобразуем Pt в mickeys} 
  Pt.x := Round(Pt.x * (65535 / Screen.Width)); 
  Pt.y := Round(Pt.y * (65535 / Screen.Height)); 
{Перемещаем мышку} 
  Mouse_Event(MOUSEEVENTF_ABSOLUTE or 
              MOUSEEVENTF_MOVE, 
              Pt.x, 
              Pt.y, 
              0, 
              0); 
{Эмулируем нажатие левой кнопки мыши} 
  Mouse_Event(MOUSEEVENTF_ABSOLUTE or 
              MOUSEEVENTF_LEFTDOWN, 
              Pt.x, 
              Pt.y, 
              0, 
              0);; 
{Эмулируем отпускание левой кнопки мыши} 
  Mouse_Event(MOUSEEVENTF_ABSOLUTE or 
              MOUSEEVENTF_LEFTUP, 
              Pt.x, 
              Pt.y, 
              0, 
              0);; 
end;

Вариант второй:
Например, находишь кнопку при помощи FindWindow() и FindWindowEx();
А когда нашел, делаешь так: Код:
sendMessage(h, bm_click, 0, 0)
h - хэндл той кнопки, которую ты нашел. Если что - F1

A: Отвечает: Mike Koshelev

PostMessage(form.handle, WM_LBUTTONDOWN, MK_LBUTTON, x+(y shl 16));
PostMessage(form.handle, WM_LBUTTONUP, MK_LBUTTON, x+(y shl 16));


Q:  Уважаемые мастера Delphi. У меня простой вопрос: как сделать в RichEdit форматирование текста, т.е. вывести начальный (до редактирования) текст разными шрифтами и цветами?. Знаю что можно, но как?. Желательно с примерами, ибо начинающий программист я. Заранее благодарю всех. Пишите на мыло: drmagic(собака)ukr.net. Вместо (собака) сами знаете что писать.
Ответить | Спрашивает drmagic

A: Отвечает: Олег Полуцыганов

используй свойство RichEdit1.SelAttributes
RichEdi1.SelAttributes.Font.Color = цвет шрифта
RichEdi1.SelAttributes.Font.style="стиль" шрифта
или RichEdid.SelAttributes(FontDialog.Font)
если нужен пример пиши на bcb-progam@yandex.ru


Q: Здравствуйте! У меня есть файл базы данных .db. При запуске на других компьюторах она не запускается выдает ошибку что нужно Борланд Дельфи. Подскажите пожалуйста как мне сделать чтобы запускалась база данных на других компьюторах? Заранее спасибо.

Ответить | Спрашивает olhovik

A: Отвечает: Roman

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

A: Отвечает: Hazard

Расширение '.db' характерно для формата Paradox. Если у тебя есть программа, использующая эту таблицу, то нужно установить BDE (Borland
Database Engine), входит в любой комплект поставки Delphi, но возможно возникнут проблемы с настройкой. Если хочешь просмотреть содержимое таблицы, установи Database Desktop (так же входит в комплект Delphi).

A: Отвечает: Шахмартов Д.П.

Скорее всего, нужен не Борланд Дельфи, а BDE Administrator, в котором ты должен указать Alias и путь к твоей базе данных.

А ошибка скорее всего выглядит так:
Исключение EDBEngineError в модуле *.exe по .....(куча цифр)
Unknown database.
Alias: ......(название твоей базы)

А может быть я просто не понял вопроса, тогда извини - пиши подробнее.

A: Отвечает: Канаев, Валерий Александрович

BDE установить.

A: Отвечает: pahan_news@mail.snz.ru

Попробуй разобраться с Instal Shield (она идет вместе с Delphi). смысл в том что она создает инсталяху (приличных правдо размеров), но зато туда сразу включается и BDE Administrator и псевдонимы базы данных. а главное пользователю предоставляется один файл с типичным набором установок.


Q: Здравствуйте! Помогите пожалуйста. У меня такая проблема не выводит некоторые слова из Table в Memo например: как, какой, какие, как-то и т.д. Мне нужно вывести слово "какой", а выводит слово "как" также и с остальными похожими словами.
Вот листинг программы.

procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
Application.CreateForm(TForm2, Form2);
Form2.Show;
Form2.Memo1.Clear;
Table1.Locate('Slovo', Edit1.Text, [loCaseInsensitive,loPartialKey]);
for i := 0 to Table1.FieldCount - 1 do
Form2.Memo1.Lines.Add(Table1.Fields[i].AsString);
end;

Ответить | Спрашивает olhovik

A: Отвечает: Олег Варибрус

Мало информации, но можно предположить, что база на Paradox. Возможно это связано с экзотическим выбором языка таблицы. Попробуйте с помощью Database Desktop изменить Table properties->Table Language на Rdox ANSI Cyrillic. Учтите, что введенные до смены данные это изменение не затронет. Лучше всего очистить таблицу, сменить язык и ввести новые данные.

Если моё предположение о Paradox неверно, то всё равно смотри систему управления базами данных, дело не в коде.

И ещё. В данном контексте Application.CreateForm(TForm2, Form2);  использовать нельзя.

A: Отвечает: Константин

Оставить только [loCaseInsensitive]


Q: В Delphi есть массивы объектов типа
type
TArrEdit = Array[0..10] of TEdit;
var
   ArrEdit: TArrEdit;
Как с ними работать я знаю, а кто мне может помочь в сздании похожего
массива на Java? К примеру, массива текстовых полей JTextField?
такой кусок кода:
      private JTextField[] _textField = new JTextField[10];
     // Компилятор молчит ...
      _textField[1].setText("Vasya"); // Не катит ...
Если хотите, помогите, если нет - не обижусь.

И ещё один вопросик - кто может написать процедурку типа
TArrEditMouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer)
begin
.....
....
end; - чтобы, при прохождении курсора мыши над Энным окошком только
ЭТО окошко меняло свои свойства, ну например - размер.

Ответить | Спрашивает Sergey

A: Отвечает: VK220

Есть такой объект - Self что-то типа

TArrEditMouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer)
begin
Self.Width := Self.Width + 1
end;

вместо Self должен TArrEdit должен подставить себя, причём тот экземпляр, над которым двигается мышка.

A: Отвечает: Pavel Taranov

В обработчике TArrEditMouseMove Sender и есть нужное окошко, только
приведенное к TObject.
Если данный обработчик используется только в для объектом типа TEdit, то
можно обойтись простым приведением типа. К примеру:

TArrEditMouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer)
begin
//Если курсор в пределах Эдита...
// (нет проверки на Y ;-) )
if(X>0) and (X<TEdit(Sender).Width)then
begin
    //. то эдит красный ...
  TEdit(Sender).Color:=clRed;
end else
begin
    // ... иначе белый
  TEdit(Sender).Color:=clWhite;
end;
end;
Если же данный обработчик используется объектами разных типов, то
соответственно нужно делать проверку типа :)


Q: Здравствуйте! У меня есть вопрос по Delphi. Программа, написанная на Delphi имеет шестнадцатицветный ярлык. Я раздобыл программу, которая может делать 32-битные ярлыки (*.ico). Как можно привязать такой ярлык к программе? Заранее спасибо. Константин

Ответить | Спрашивает Sergei Alexandrov

A: Отвечает: Андрей aka Breeze

Project -> Resources -> Icon
Далее заменить ресурс MAINICON на свой (Modify в контекстном меню)

A: Отвечает: VK220

А что - в свойствах проекта где указывается иконка нельзя поставить
другую - 32х битную?
Можно, конечно, запихать её в exe-шник и загружать динамически.


Q: Как можно организовать различный тип набора номера: импульсный или тоновый.
Ответить | Спрашивает Дмитрий Комаров

A: Отвечает: YuriyR

Посылаешь на модем команду ATDP220220 набирает пульсом
Посылаешь на модем команду ATDT220220 набирает тоном

A: Отвечает: Крадецкий Георгий

Сменить режим работы модема на
1) Импульсный - AT P
2) Тоновый - AT T

Набрать номер:

AT D <номер>

Или все сразу:

ATDT <номер> - Набрать номер в тональном режиме
ATDP <номер> - Набрать номер в импульсном режиме

Архив вопросов и ответов по Delphi:

Q: В WinAPI есть какая-то функция для перезагрузки реестра. Только я не знаю, как она называется. Просто я ассоциирую некоторые файлы со своим приложением, но моя иконка "появляется" только после перезагрузки Windows. А мне нужно этого избежать! Помогите, кто может!
Ответить | Спрашивает Andrey Eremin

A: Отвечает: Scorpion

Не знаю название функции, но могу посоветовать один извращенный метод: раз не получается перезагрузить реестр, то надо перезагрузить explorer.exe. Убиваешь процесс, а затем грузишь его заново. Я не пробовал делать это из своей проги, но делал из командной строки.

A: Отвечает: Pavel Taranov

Обновление файловой ассоциации без перезагрузки

    При создании новой или изменении существующей файловой ассоциации (например, смены иконки у типа файла) новые параметры вступят в     силу только после завершения текущего сеанса пользователя или перезагрузки системы. Чтобы изменения вступили в силу без перезагрузки или     выхода из системы, вызовите следующий код:

    SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, NULL, NULL);
 


Q: Каким образом можно скопировать из сжатого видео в формате MPEG 124-кадр и сохранить его в bmp.(BitBlt - не подходит (если грабить с экрана, получается черный квадрат Каземира Малевича) )
Ответить | Спрашивает Alex

A: Отвечает: Scorpion

Попробуй программу видеоплейер Light Alloy. В нем жмешь <F12> и сохраняешь кадр в нужное место.

A: Отвечает: DdR

Ну если тебе именно в delphi, то незнаю... Попробуй мож сначала  расжать его... Я в этом деле не мастак, но без сжатия можно только  перехватить содержимое видеобуфера в момент показа нужного тебе файла, как это сделать - незнаю...  К слову - вообще в таких случаях, если ну нужно писать программу, то  можно использовать например прогу fraps... Она специально для этого  сделана, (ну еще и для записи роликов из OpenGL и DirectX игр и  программ) и справляется с этим очень хорошо...


Q: Как в программе получить данные BIOS? В частности интересует температурные параметры системы.
Ответить | Спрашивает Abrahamyan

A: Отвечает: Звягинцев Павел

ну если на пальцах в мелкософновском наборе MSDK (development kit) (чур не плеваться если назвал неправильно, пользовался давненько) есть библиотека IO.DLL, так она предназначена для работы с портами компа из под виня. Думаю многие сталкивались с проблемой ПРЯМОГО доступа к портам, особенно под NT системами описание функций - там же ну а дальше 70h - порт адреса куда пишешь или читаешь в биосе 71h - собственно данные ну а конкретный адрес с температурой вычисляй сам зависит и от типа биоса и даже от версии


Q: Возможно ли в Delphi программно создать массив объектов, например, кнопок, и как написать процедуру обработки их нажатия?
Ответить | Спрашивает Бойко Владимир Михайлович

A: Отвечает: Hazard

Если необходимо создать динамический массив объектов любого типа,
используй класс TList. Вот примерный код главного модуля формы:

type
  TMainForm = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    BtnList: TList;  // Здесь будем хранить объекты
    Button: TButton; // Собственно сам объект "кнопка"
    // Массив указателей на обработчики событий OnClick();
    FuncClick: array[0..2] of TNotifyEvent;
  public
    // А вот и сами обработчики (описываем вручную!!!)
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  end;

var
  MainForm: TMainForm;

implementation

{$R *.dfm}

procedure TMainForm.FormCreate(Sender: TObject);
var
  i: Integer;
begin
  // Создаем объект типа TList
  BtnList := TList.Create;
  try
    // Теперь массив FuncClick содержит указатели на обработчики событий
    FuncClick[0] := Button1Click;
    FuncClick[1] := Button2Click;
    FuncClick[2] := Button3Click;
    // Создаем в цикле три кнопки
    for i := 0 to 2 do
    begin
      Button := TButton.Create(MainForm);
      Button.Left := 10+i*80;
      Button.Caption := IntToStr(i);
      Button.Parent := MainForm;
      // Назначаем обработчик
      Button.OnClick := FuncClick[i];
      // Сохраняем нашу кнопку в TList
      BtnList.Add(Button);
    end
  except
    BtnList.Free;
  end
end;

procedure TMainForm.Button1Click(Sender: TObject);
begin
  MainForm.Caption := 'Button1 click!';
end;
procedure TMainForm.Button2Click(Sender: TObject);
begin
  MainForm.Caption := 'Button2 click!';
end;

procedure TMainForm.Button3Click(Sender: TObject);
var
  i: Integer;
begin
  MainForm.Caption := 'Destroy all buttons!';
  // Стандартная процедура освобождения объектов
  for i := 0 to 2 do
  begin
    Button := BtnList.Items[i];
    Button.Free;
  end; 
end;

procedure TMainForm.FormDestroy(Sender: TObject);
begin
  BtnList.Free;
end;

A: Отвечает: Алексей

Всё очень просто. Пример на кнопках. Если у тебя на форме кнопок нет
вообще не забудь подключить StdCtrls.

var
  Button: array [0..2] of TButton;
  i: integer;

procedure TForm1.FormCreate(Sender: TObject);
begin
 for i:=0 to 2 do begin
  Button[i]:=TButton.Create(application);
  Button[i].Parent:=form1;
  Button[i].Left:=10;
  Button[i].Top:=30*i+10;
  Button[i].OnClick:=Button1Click;
 end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 for i:=0 to 2 do
  if button[i]=Sender then caption:=inttostr(i);
end;

A: Отвечает: Alex Van Glukhman

Делаешь какой-либо цикл где меняются переменные положения объекта и номера объекта а основной код создания смотри ниже. После динамического создания каждая кнопка наследует всё присущее TButton а её Name также присваивается в нижеприведённом коде

procedure TForm1.Button1Click(Sender: TObject);
var
MyButton: TButton;
begin
NewButton:=TButton.Create(self);
NewButton.Name:='Button'+IntToStr(Uvelichitel);
NewButton.Left:=VertMestoVMassive;
NewButton.Top:=HorizMestoVMassive;
NewButton.Parent:=self
end;

A: Отвечает: Pavel Taranov

//Можно попробовать так:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    // объявим массив, в котром будут лежать кнопки
    Buttons: array[0..9] of TButton;
  public
    { Public declarations }
    // обработчик, который будет назначен кнопкам из массива
    procedure ButtonClick(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
Counter:Integer;
begin
for Counter:=0 to 9 do
begin
    // если для текущего елемента массива не создан объект
  if not Assigned(Buttons[Counter])then
  begin
    // создадим объект
    Buttons[Counter]:=TButton.Create(Self);
    // пропишем парента (чтобы кнопки отобразились на форме, для не виз.
компонент не обязательно)
    Buttons[Counter].Parent:=Self;
    // пропишем некоторые свойства
    Buttons[Counter].Caption:=IntToStr(Counter);
    Buttons[Counter].Top:=Buttons[Counter].Height*Counter;
    Buttons[Counter].Left:=0;
    // укажем обработчик события OnClick
    Buttons[Counter].OnClick:=ButtonClick;
  end else
  begin
    ShowMessage('Button already exists');
  end;
end;
end;
procedure TForm1.ButtonClick(Sender: TObject);
begin
ShowMessage('Button clicked');
end;

end.


Q: Как получить длинный путь к файлу, зная его короткий, напр. C:\PROGRA~1\MSOFFI~1\...?
Ответить | Спрашивает Andrey Eremin

A: Отвечает: helios

Сначала следует воспользоваться функцией SetCurrentDir(короткий путь), а потом воспользоваться GetCurrentDir()

A: Отвечает: Eugene M. Safonov

DWORD GetLongPathName(
  LPCTSTR lpszShortPath,
  LPTSTR lpszLongPath,
  DWORD cchBuffer
);

A: Отвечает: lavrenoff

Восстанавление длинных имен файлов по известным коротким

// Восстанавливает длинные имена файлов по известным коротким (8.3)
// В качестве аргумента принимает полный или неполный (в т.ч. относительный)
// путь к файлу, например 'C:\WINDOWS\РАБОЧИ~1\ИТАКДА~1.LNK' или
// '..\..\COMMON~1\BORLAN~1\BDE\BDEREA~1.TXT'. Понимает сетевые имена.
// Возвращает полный(!) путь типа 'C:\Windows\Рабочий стол\и так далее.lnk',
// 'C:\Program Files\Common Files\Borland Shared\BDE\bdereadme.txt',
// '\\Computer\resource\Folder with long name\File with long name.ext'
//---------------------------------------------------------------------

Function RestoreLongName(fn: string): string;

function LookupLongName(const filename: string): string;
var sr: TSearchRec;
begin
if FindFirst(filename, faAnyFile, sr)=0 then Result:=sr.Name
else Result:=ExtractFileName(filename);
SysUtils.FindClose(sr);
end;
function GetNextFN: string;
var i: integer;
begin
Result:='';
if Pos('\\', fn)=1 then begin
Result:='\\';
fn:=Copy(fn, 3, length(fn)-2);
i:=Pos('\', fn);
if i<>0 then begin
Result:=Result+Copy(fn,1,i);
fn:=Copy(fn, i+1, length(fn)-i);
end;
end;
i:=Pos('\', fn);
if i<>0 then begin
Result:=Result+Copy(fn,1,i-1);
fn:=Copy(fn, i+1, length(fn)-i);
end else begin
Result:=Result+fn;
fn:='';
end;
end;
Var name: string;
Begin

fn:=ExpandFileName(fn);
Result:=GetNextFN;
Repeat
name:=GetNextFN;
Result:=Result+'\'+LookupLongName(Result+'\'+name);
Until length(fn)=0;
End;


Q:  Как поставить курсор в конец Memo?
Ответить | Спрашивает MikeMaster

A: Отвечает: Andrey Eremin

Memo1.SelStart:=Length(Memo1.Text);


Q:  Очень хочется иметь маааленькую базу, устроенную по принципу  реестра винды, со сходными методами работы и понятно без  использования различных серверов (объем данных в базе до 150 Кб)  может сеть подходящий компонент или библиотека  TiniFile - не устраивает, там нет дерева, а TregIniFile, зараза  пишет только в реестр, как бы реестроподобное чудо создавать  в каталоге приложения?
Ответить | Спрашивает Звягинцев Павел

A: Отвечает: Algoa

по-моему самое удобное использовать  xml-файлы для хранения такой информации :)

A: Отвечает: Жмогин Павел Сергеевич

VolgaDB попробуй а дерево - сам сбацай :) рассказать как?

A: Отвечает: Анатолий Курочкин

Ну а просто TreeView и текстовый файл? Не пойдёт?

A: Отвечает: Hazard

Если немного подумать, то дерево можно увидеть даже в TIniFile.
Приведу пример. Допустим, есть у нас такая иерархия:

Вселенная (галактика, черная дыра)->>Галактика (солнечна система)->>
Солнечная система (планета, комета, астероид)->>Планета->>Спутник.

Вот ini-файл описывающий такое дерево:
[Вселенная]
галактика=
черная дыра=
[Галактика]
солнечная система=
[Солнечная система]
планета=
комета=
астероид=
[Планета]
спутник=


Q: Как на D7 грамотно создать Dual-up соединение? Как управлять выводом стандартного диалога соединения (выбор провайдера,телефон и.т.д) ? Существуют ли в Delphi VCL аналоги функций серии RAS... (RasHangUp , RasEnumConnections), или как получить к ним доступ ?

Ответить | Спрашивает KVV

A: Отвечает: Eugene М. Safonov

Интерфейсных библиотек для Delphi очень много можно найти но томже www.torry.ru один из таких прилагается. Единственное лучше использовать те где используется динамическая линковка, так как в каждой версии Windows добавляются новые функции. Мне приходилось переделывать одну из таких библиотек под свои нужды чтобы можно было максимально использовать возможности RAS при этом чтобы приложение без проблем работало под разными Windows. Сами функции достаточно нормально описанны в MS SDK идущим с Delphi. Мне пришлось с этим прилично повозится когда делал программу мониторинга Dial-Up (DUTraffic).


Q: Как можно файл формата wav конвертировать mp3? Сделать это надо, конечно, программно, желательно использовать Delphi. Может кто посоветует готовый компонент?
Ответить | Спрашивает
Serpo

A: Отвечает: Звягинцев Павел

MMtools - имеет огромный выбор компонентов для работы с звуком эти кодеры понятно тоже есть

Вопросы по C/C++, ждущие ответа:

1. Подскажите пожалуйста , не слишком сложный , способ получить список таблиц в базе данных (ODBC Access CDatabase) , что-бы заполнить им , например CListBox (VC6 MFC) или массив какой-нибудь? Буду благодарен за ответ. Если с примерчиком ,тогда вообще шикарно.
Ответить | Спрашивает КВВ

2. Каким образом вложить выполняемый файл в электронное письмо письмо, чтобы при открытии он тоже запустился?
Ответить | Спрашивает Kirill

3. Как перетащить текстовый файл в RichEdit мышью?
Ответить | Спрашивает Extremal

4. Как из своей программы проверить запущена ли другая? Заранее благодарен
Ответить | Спрашивает Ruslan Gilmanov

5. Есть HWND окна.
Как получить ID процесса, который использует это окно с помощью Windows API.
Ответить | Спрашивает Kolya NIC

6. Недавно у меня появилось задание (если упростить): (Реализация в VС6)
Создать MDI приложение с одним типом документа, представленного в одном типе графического вида.
Документ состоит из набора примитивов в 2D. Примитив является ломаной линией, состоит из цепи
следующих сегментов: прямые, дуги.

Так как раньше не приходилось работать с "черчением" в С++, а время сильно поджимает, хочу
попросить вас о помощи. Мне бы какой-нибудь исходник или хотя бы "живой" пример кода по работе
с подобным "черчением".

Ответить | Спрашивает White Crow

7. Есть ли способ подключиться к базе данных формата Paradox и отобразить
содержимое таблицы в программе на С#. Пытался использовать стандартные
компоненты (DataGrid, DataSet, DataView, OleDbConnection,
OleDbCommand), но что-то не выходит. Может кто-нибудь подкинет пару
ссылок на тему "Работа с БД в Visual Studio .NET".

Ответить | Спрашивает Hazard

Вопросы по C/C++, на которые ответили:

Q: Как в CBuilder с помощью API функций узнать чем является диск - винчестером, CDROM-ом или CDWriter-ом? То есть пользователь будет указывать путь, например, c:\Papka\PodPapka или F:\, а программа должна определить что это за носитель.

Ответить | Спрашивает Ruslan Gilmanov

A: Отвечает: Олег Полуцыганов

AnsiString Temp;
AnsiString Drive = "буква проверяемого диска" + ":\\";
unsigned int drivetype = GetDriveType(Drive.c_str());

switch(drivetype)
{
case 1 : Temp = "Не корневая дириктория"; return;
case DRIVE_REMOVABLE : Temp = "Сменный диск"; break;
case DRIVE_FIXED : Temp = "Фиксированный диск"; break;
case DRIVE_REMOTE : Temp = "Удаленный сетевой диск"; break;
case DRIVE_CDROM : Temp = "CD-ROM"; break;
case DRIVE_RAMDISK : Temp = "Диск в памяти"; break;
default : Temp = "Не определен"; return;
}

A: Отвечает: Ruslan Gilmanov

Сам же отвечаю на сой вопрос.
AnsiString str = "C:\Papka\PodPapka";
const char *pth;
pth = str.c_str();
str = GetDriveType(pth);
Form1->Caption = str;

str будет иметь одно из следующих значений
0 The drive type cannot be determined.
1 The root directory does not exist.
2 The drive can be removed from the drive.
3 The disk cannot be removed from the drive.
4 The drive is a remote (network) drive.
5 The drive is a CD-ROM drive.
6 The drive is a RAM disk.

Вот только как отличить CDROM-ом от CDWriter-а я не знаю. Может кто подскажет?


Q: Как перетащить текстовый файл в RichEdit?
Ответить | Спрашивает
Extremal

A: Отвечает: Mihail Sokolov

Лепишь на форму Button, OpenDialog и Richedit.
 
В эвенте онБаттонКлик добавляешь:
 
if (OpenDialog1->Execute())
        {
        RichEdit1->Lines->LoadFromFile(OpenDialog1->FileName);
        }

A: Отвечает: Олег Полуцыганов

В файл заголовок формы добавляем:
private: // User declarations
AnsiString Name;
void virtual __fastcall WMDropFiles( TWMDropFiles &message);
public: // User declarations
__fastcall TForm1(TComponent* Owner);
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_DROPFILES,TWMDropFiles,WMDropFiles)
END_MESSAGE_MAP(TForm);

В исходный текст:
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Name="NoName";
DragAcceptFiles(Handle,true);
}
void __fastcall TForm1::WMDropFiles( TWMDropFiles &message)
{
AnsiString FileName;
FileName.SetLength(MAX_PATH);
FileName.SetLength(DragQueryFile((HDROP)message.Drop,0,FileName.c_str(),MAX_PATH));
if(UpperCase(ExtractFileExt(FileName)) == ".TXT")
{
Form1->Caption = FileName;
Memo1->Lines->LoadFromFile(FileName);
}
}
Вот и все для RichEdit работает точно также только следует проверить расширение файла ".RTF"
Пример можно посмотреть на http://bcb-program.narod.ru/
или загрузить пример http://bcb-program.narod.ru/Source/TMemo.rar

Q: Есть один общий ресурс (последовательный порт например),его используют несколько потоков TThread (их больше 2-х).Как организовать синхронизацию этих потоков?
Ответить | Спрашивает Перминов Андрей

A: Отвечает: Mihail Sokolov

Передать в качестве параметра command.com’у строку с путем к Word

A: Отвечает: Ken Keray

В RichEditCtrl есть метод - StreamIn - открывает поток на чтение, в том
числе из файла.
Ниже приведён кусок кода для демонстрации использования этого метода для
класса, порождённого от CRichEditView:

static DWORD CALLBACK Load_StreamCallback(
     DWORD dwCookie,     // application-defined value
     LPBYTE pbBuff,      // data buffer
     LONG cb,            // number of bytes to read
     LONG *pcb           // number of bytes transferred
     )
{
 ASSERT(pcb);
 *pcb = 0;
 CFile *pFile = (CFile*)dwCookie;

 if (pFile){
  DWORD dwPos = pFile->GetPosition();
  DWORD nMaxText = MAX_TEXT;
  if (dwPos+cb>nMaxText) cb = nMaxText-dwPos;
  if (cb>0) *pcb = pFile->Read(pbBuff, cb);
  else *pcb = 0;
 }

 return 0;
}

void CTxtView::LoadText(CFile *pFile)
{
 ASSERT(pFile);
 EDITSTREAM es = { (DWORD)pFile, 0, &Load_StreamCallback};
 GetRichEditCtrl().StreamIn(SF_TEXT, es);
}

Вопросы по Pascal, ждущие ответа:

1. Здравствуйте! Посоветуйте, как можно в Pascal организовать передачу данных по локальной сети.
Ответить | Спрашивает АнтохА

Вопросы по Pascal, на которые ответили:

Q: Как из Pascal запустить WinWord ?
Ответить | Спрашивает Левон Виноградов

A: Отвечает: CPAS

exec('winword.exe', '')

Обзоры компонент

Voice over IP v.0.90 (863kb)

Только поместите этот компонент на форму, и Вы можете говорить через с другими людьми, имеющими такой же компонент (IP-телефония).
С исходными текстами

TNRegView - это наследник TTreeView, с помощью которого можно просмотреть реестр Windows, ключи и значения ключей. Использует для поиска рекурсивную процедуру.

TMChartQRP v.1.0 Beta (670kb)

TMChartQRP - компонент, позволяющий легко создавать графические отчеты.

rary v.3.1 (4361kb)

Библиотека Regular Expression Library - это библиотека компонентов и классов для поиска и замены данных, использующая регулярные выражения. Полная поддержка не-VCL модулей так же, как и VCL-компонентов.
Используется модель "свойство-метод-событие", принятая в VCL, для VCL и не-VCL версий.
Regular Expression - очень мощная, гибкая, быстрая и удобная библиотека. Идеи, использованные для поиска, основаны на шаблонах, принятых в UNIX-системах.

TmxStorage v.1.1 (309kb)

Командное TmxStorage предназначен для сохранения ресурсов проекта в файле формы. Добавлена поддержка компрессии.
С исходными текстами

 

Улыбнитесь :)

Пословицы:

На то и хакер в интернете, чтобы админ не дремал


Делу время, а в интернете всё остальное время.


Не говори "ГОП", а лучше напечатай.


Семь раз примерь, один раз запусти.


В тихом омуте нужно срочно дизайн менять (межет и мне об этом задуматся :))


Деньги за клики - обещанного три года ждут.


Любишь кататся, купи Notebook.


И у стен есть желание посидеть в инете.


Что написано пером, можно поправить в графическом редакторе.


Семь бед, один Reset.


Сколько голов, такой и трафик.


Не было у бабы хлопон, вышла замуж за программиста (из личного опытая :))).


С мылом - рай в шалаше.


На Net и суда нет


Лучше модем в руках, чем 100mb/s канал в небе.


Web живи, web учись.


Время деньги (1ч - 0,2$ночью и 0,7$ - днём)


На ошибках переустанавливают систему.


С глаз долой Alt+F4.


Семь бед - один раз перезвони.


В чате все возрасты 20.


Закон хакера: Лучше один раз увидеть, чем сто раз увидели тебя.


В инете худеет кошелёк на 0,5 бакса в час.


Куй железо, когда будешь в off-line.


Кончил? Закрой ACDSee.


Глаза боятся, а руки чистят логи.


Интернет информацией не испугаешь.


Не всё то зло, что Access Denide.


Если у тебя воняет под мышкой, то помой коврик.

На этом позвольте проститься с Вами и пожелать удачи ;) Свои замечание и предложение так же отправляйте ко мне на ящик.
С уважением, Дмитрий ( admin@realcoding.net )


http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться

В избранное