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

Delphi для профессионалов

  Все выпуски  

Delphi для профессионалов - Раздел 'Вопрос-ответ'


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


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

Рассылка: Delphi для профессионалов

Количество подписчиков: 4344
Рассылка 'Delphi для профессионалов'

Выберите действие:
Заглавие (одной строкой) :
Содержание :

От кого :
Не показывать мой e-mail другим пользователям


Раздел "Вопрос-ответ"

 

Результаты

Вопрос №27: Вывод значения в LPT порт
Почему нижеприведенный код не работает в Win XP, а в Win 98/Me все нормально?
И как с этим бороться.
...

Ответ №1 (Leshiys): Для работы в WinXP есть класные компоненты самая простая IOPort (брать отсюда - URL http://www.torry.net/vcl/system/portaccess/ioport.zip), чуть покруче Async Professional v4.04 (бери здесь http://delphi.chertenok.ru/download/1/r-ap4041.zip, http://delphi.chertenok.ru/download/1/r-ap4042.zip, http://delphi.chertenok.ru/download/1/r-ap4043.zip, http://delphi.chertenok.ru/download/1/r-ap4044.zip, http://delphi.chertenok.ru/download/1/r-ap4045.zip).

Ответ №2 (PolSer): У простых приложений недостаточно привилегий, чтобы обращаться к портам - это может сделать только драйвер. Если писать свой драйвер неохота, можешь воспользоваться компонентой DLPortIO, в состав которой входят драйвер и библиотека для работы с ним.

Ответ №3 (Maxim): Для платформы NT используй DirectPort. В NT/2000/XP запрещен прямой доступ к портам.

Ответ №4 (Admin@latcom.lv): NT(2000,XP) запрещает прямой вывод в порты...даже только через драйвера (sys). На torry.ru есть в разделе "система" работа с LPT...

Вопрос №30: Создание файлов
Здравствуйте!!!
У меня возникают проблемы с созданием файлов. Я пользуюсь процедурой AssignFile и для создания Rewrite, но во время прогона проги, выдается сообщение о том, что либо файл уже существует, либо файл создан и дальше ничего не происходит. В то время мне нужно что бы прога записывала данные в этот файл.

Ответ №1 (sit06): Не морочь голову. посмотри глюки в своей проге. Pascal хотел плевать на наличие и отсутствие файлов. Он откроет [не] существующий для записи аж бегом.

Вопрос №41: Русификация Делфи
Я столкнулся с такой проблемой: есть неплохая функция MessageDlg но все кнопки на английском. Залез я в модули Dialogs и Consts и поменял названия на русские. Ноль имоций. Все кнопки на английском.
Предполагаемое решение: То что поменял названия на русские - молодец! За надписи на кнопках отвечают константы с названием SMsgDlgXXXX. Желательно отредактированные файлы скопировать в папку проекта. А если все кнопки и в этом случае на английском, то, вероято, в опциях проекта установлен параметр "Build with runtime packages".

Ответ №1 (Святослав Львов): Для русификации мало просто поменять строки в исходном коде. :-) Надо его скомпилировать. Например так : dcc32.exe consts.pas и полученный *.dcu положить в каталог \lib Все тоже можно проделать с dbconsts , dialogs и пр.

Ответ №2 (Сергей): Можно попробовать сделать так: В модулях Dialogs и Consts поменять на русские,что надо,а уже потом скомпилировать в библиотеки dialogs.dcu и consts .dcu. Сам не пробовал,а попробовать можно.Не зря же они есть исходные модули.а.....? Удачи. Серега Aka 'Lion'

Ответ №3 (Автор вопроса Paul): Здравствуйте. Не знаю насколько этично отвечать на собственный вопрос. Просто потом я нашел еще один выход из ситуации. Функция WinAPI MessageBox (Handle, PChar('message'),PChar('caption'),code). Code это целое число, определяющее какие кнопки будут расположены на форме. Например 4 дает кнопки Да и Нет. В ответ функция возвращает номер нажатой кнопки. Единственно, что кнопки пронумерованы глобально. Например, при нажатии на Да функция возвращает 6. Но это, наверно, работает только в русифицированной операционной системе, а в англоязычном варианте кнопки должны быть на английском. С уважением, Павел.

Ответ №4 (ГУ-УПФ РФ по ТМО): Используй функцию messagebox: MessageBox(0,'Ура','по русски',MB_YESNO);

Ответ №5 (Alexandr Belayev): Забить на MessageDlg и использовать MessageBox[A|W] из windows.pas всё будет на языке Windows

Ответ №6 (Andy): Советую сходить на сайт Polaris Software (http://polesoft.narod.ru/) и взять у них русифицированные ресурсы для Delphi.

Ответ №7 (fozzgen): можно просто использовать не MessageDlg, а Application.MessageBox, которая все надписи пишет на языке локализации системы, что в большинстве случаев и надо.. стоит русская ОС - получай сообщения на русском, английская - на английском.. а стандартные модули delphi лучше не менять - поставишь delphi 8 и опять полезешь в dialogs/consts.?.:-)..

Ответ №8 (AltX): используй MessageDlgEx из библиотеки JEDI-VCL (http://jvcl.sourceforge.net) и твори что хочешь

Вопрос №42: Запуск EXE-файла
Возникла у меня такая проблема: каким образом могу я в своей программке запустить exeшный файл? Очень буду благодарен за помощь.
Предполагаемое решение: WinAPI :: ShellExecute, можно и WinExec.

Ответ №1 (Андрей Васильевич Наливайко): Можно воспользоваться предпологаемым решением:
1. WinExec('Ex1.exe', SW_SHOWNORMAL); - запускается файл "EX1.EXE"
2. ShellExecute(0, 'open', 'ex1.exe', '', '', SW_SHOWNORMAL); запускается файл "EX1.EXE"
Но, если нужно контролировать запущенный процес, можно воспользоваться функцией WinAPI: CreateProcess которая предоставляет такие возможности

Ответ №2 (fozzgen): предполагаемое решение полно ответило на вопрос.. добавлю только то, что с помощью ShellExecute можно запускать не только exe, но и все остальное..:-).. например, doc открыть в word'е.. если делается программа вроде winCmd, то ShellExecute - оптимальный вариант (да и в любом другом случае)..

Ответ №3 (АндрейV): Ещё CreateProcess можно, но это для профи.

P.S. от ведущего: именно к профи мы стремимся! :)

Вопрос №43: Работа с CMOS BIOS из под WIN2000
Здравствуйте !
В настройках CMOS BIOS есть опция, позволяющая устанавливать время старта системы. В основном я использую это, как "продвинутый" будильник. Но каждый раз приходится ловить момент перезагрузки и переставлять время, что довольно не удобно. Доступ к CMOS BIOS можно получить через обращение к портам 70h и 71h. Но это возможно в реальном режиме. Windows ругается на код сообщая о какой то недопустимой привелигированной инструкции процессора. Говорят, что для доступа к этим портам нужно иметь уровнь доступа RING0, а уровень прикладной программы RING3. Чесно говоря не особо понимаю, о чем речь (об RING). Если кто натыкался на подобные вилы - напишите

Ответ №1 (Филиал 1 ООО Белтрикотаж): Для установки необходимых привелегий можно вызывать следующие WinAPI функции по порядку:
OpenProcessToken(...)
LookupPrivilegeValue(...)
AdjustTokenPrivileges(...)
Параметры для данных функций можно вязть из справочника по WinAPI.

Ответ №2 (Alexandr Belayev): Забыть про работу с CMOS из 2k. или писать драйвер. Есть универсальные драйвера, которые позволяют получить доступ к некому адресному пространству портов. А вообще не зная что такjе RINGx в терминологии работы процессора лучше не лезть к портам, и вообще читать доки сначала.

Ответ №3 (АндрейV): Написать драйвер(он в нулевом кольце работает). В инете иформации море. Вроде бы ещё есть варианты, но я не знаю.

Вопрос №45: Работа с Excel
Довольно длительное время пытаюсь найти толковый компонент для работы с Excel. Задача проста - необходимо читать данные из книги. Единственная проблеммка - у меня нет инета. E-mail only. Очень здорово помогают рассылки подобные Вашей. Не могли бы Вы посоветовать что-нибудь для меня? Если есть что-то под рукой - буду рад поймать в мыльнице. Но даже ссылочка на такой компонент здорово бы помогола.

Предполагаемое решение
: А зачем голову ломать? Начиная с Delphi6 есть встроенные компоненты для работы с MS Office.

Ответ №1 (Anton): Вот рабочий примерчик. В нем основные функции есть. Никаких компонентов не нужно. Только модуль Excel97. А все команды есть в хелпе по VB в Excel, поставляется вместе с офисом.

var v:variant;
    s:string;
begin
    v := CreateOleObject('Excel.Application');
    v.Workbooks.Open['1.xls'];
    s:=v.Range['A1'];
    v.Visible:= True;
    v.Range[a].formula:='A1+A2';
    v.Range[a].value:=1;
    v.Range[a]:='1';
end;

Ответ №2 (AltX): http://www.freewebs.com/flexcel/. Есть доки (eng) и примеры.

Вопрос №46: Копирование
Как в Дельфи осуществить копирование файла без вызова WinApi? Проблема вот в чем, необходимо скопировать файл и переименовать его так, чтобы перед именем файла записалась системная дата на момент копирования? (т.е. например: было copy.zip, стало 12_08_2002_copy.zip)?

Предполагаемое решение
: Посмотри для начала пример по процедуре BlockRead в помощи по Delphi.

Ответ №1 (Alexandr Belayev): Без WinApi?? Ну сделать

ms:=TMemoryStream.Create;
  ms.loadfromfile(старое имя файла);
  ms.savetofile(новое имя файла);
ms.free;

Ответ №2 (fozzgen): копирования - в помощи по BlockRead.. дата берется просто - DateToStr(Date), аналогично время - TimeToStr(Time).. файл не забудь закрыть..:-)..

Ответ №3 (Anton): Имя файла
filename:=FormatDateTime('dd_mm_yyyy_',now)+'copy.zip';
А копировать через

reset(f,1);
while not eof(f) do begin
  blockread(f,x,2000,y);
  blockwrite(f2,x,y);
end;

Советую почитать про blockread. Но обрати внимание на reset(f,1), только так будет работать.

Вопрос №47: База MySQL
как подключить в Делфях базы MySQL?

Предполагаемое решение
: Установить mySQL драйвер под Windows. Работать через ADO.

Ответ №1 (ugryumov@elsv.kirov.ru): Попробуйте компоненты Zeos Dbo. Там есть поддержка MySQL и многих других СУБД.

Ответ №2 (Alexandr Belayev): D6 и выше: использовать DBExpress. Оно вроде само умеет к MySQL коннектится.

Ответ №3 (Evgen A. Lebedev): Есть набор ZeosDBO. Я пользуюсь покуда им. К сожалению, когда я в последний раз заглядывал на сайт разработчика, там было заявлено о прекращении проекта (http://www.zeoslib.org). С Oracle были глюки, а за MySQL - работает без нареканий. Как вариант - пройдись по www.torry.ru. Там целая свалка Делфайных компонент - я нашел там эти компоненты.

Ответ №4 (Yaroslav Zavarzin): Воспользоваться компонентом Zeos: http://zeoslib.sousrceforge.net. Не требует BDE и прочих изысков.

Ответ №5 (Стародуб Игорь): Через ADO, конечно легче, но можно работать и через dll. К проекту присоединяется дополнительный модуль интерфейса с описаниями функций. Вот только данные будешь получать в строковом виде и разгребать их придется самому. Достоинство - в некоторых случаях работает раза в 1.5 быстрее.

Ответ №6 (Wizard): можно использовать компоненты ZeosDBO, они позволяют напрямую работать с mySQL и еще несколькими серверами баз данных. взять можно отсюда http://w1zard.fromru.com/ZeosDBO.rar.

Вопрос №48: Как добавить русский драйвер?
Как добавить русский драйвер для таблиц Dbase и Paradox через функции BDE API (unit BDE), хочу использовать при инсталяции ПО (автоматического добавления алиаса и установки русского драйвера.

Ответ №1 (ГУ-УПФ РФ по ТМО): например в создании формы

var
  stringlist:tstringlist;

{...}

StringList:=TStringList.Create;
  //драйвер русского языка
StringList.Add('LangDriver=db866ru0');
  //изменение параметров BDE
with database.Session do begin
  configMode:=cmAll;
   //установка русского языка для базы
  ModifyDriver('DBase',StringList);
   //сохранение параметров
  SaveConfigFile;
end;

Ответ №2 (Valery): Посмотри в справке:
procedure TSession.AddStandardAlias(const Name, Path, DefaultDriver: string);

Для настройки делаю так:

class procedure TBDE.SetDriver(const ADriverName, ALevel, ADecimalChar, ADecimalDigits: string;
  const AWin: Boolean);
const
  cLangKey = '\Software\Borland\Database Engine\Settings\DRIVERS\%s\INIT';
  cLangParam = 'LANGDRIVER';
  cLevelKey = '\Software\Borland\Database Engine\Settings\DRIVERS\%s\TABLE CREATE';
  cLevelParam = 'LEVEL';
  cDOS = 'db866ru0';
  cWIN = 'DBWINUS0';
  cDecimalKey = '\Software\Borland\Database Engine\Settings\SYSTEM\FORMATS\NUMBER';
  cDigitsParam = 'DECIMALDIGITS';
  cSeparatorParam = 'DECIMALSEPARATOR';
var
  sLang: string;
  Reg: TRegistry;

  procedure CheckKey(AReg: TRegistry; const AKey, AParam, AValue: string);
  begin
    with AReg do begin
      if OpenKey(AKey, False) then begin
        if ReadString(AParam) <> AValue then WriteString(AParam, AValue);
        CloseKey;
      end;
    end;
  end;

begin
  if AWin then  sLang := cWIN
  else          sLang := cDOS; // Default DOS

  Reg := TRegistry.Create;
  with Reg do try
    RootKey := HKEY_LOCAL_MACHINE;
    CheckKey(Reg, Format(cLangKey, [UpperCase(ADriverName)]), cLangParam, sLang);
    CheckKey(Reg, Format(cLevelKey, [UpperCase(ADriverName)]), cLevelParam, ALevel);
    CheckKey(Reg, cDecimalKey, cDigitsParam, ADecimalDigits);
    CheckKey(Reg, cDecimalKey, cSeparatorParam, ADecimalChar);
  finally
    Free;
  end;
end;

Вопрос №49: Инсталляционый пакет
Работаю с Базами данных - создал проект в Delphi и неожиданно сталкнулся с проблемой. Создал инсталляционый пакет пытаюсь установить программу на другом ПК (на нем только Windows) и ничего не получается двое суток итак - исяк гоняю программу, что делать не знаю. Где я ошибся что не учел??? InstallShieldExpress 3.03, Delphi 6, БД - Paradox.
Предполагаемое решение
: При создании инсталляционного пакета нужно указать о необходимости установки BDE и алиаса.

Ответ №1 (Andy): При создании инсталляции следует указать InstallShield'у, что в инсталляцию надо включить BDE. Что касается алиаса, не обязательно заморачиваться с прописыванием его на новой машине, достаточно создавать в приложении БД явно, используя компонент TDataBase.

Вопрос №50: Case
Ни кто не подскажет, есть ли какая-нибудь Case система для Object Pascal, с бучевской нотацией

Ответ №1 (Andy): Начиная с Delphi 7 - UML.

Ответ №2 (topol@freemail.com.ua): Есть программа RoseDelphiLink которая позволяет интегрировать Delphi с RationalRose

Ответ №3 (Денис Симоненко): Rational Rose.
К нему еще обязательно надо RationalRose Delphi Framework.
Сам видел.
Но, по-моему, писать проект с RR тяжко. диаграммы легче на бумажке рисовать для начала.
Лучше просто почитай про patterns. Например, http://www.dofactory.com/patterns/.

Ответ №4 (Aleksiy): Rational Rose поддерживает Бучевскую нотацию и интегрируется с Дельфи. IMHO: для ObjectPascal Case-средств не существует.

Вопрос №51: Двумерная матрица
мне надо создать двумерную матрицу, но того размера который я укажу в процессе работы программы. пытался объявлять как array of array of real, а потом задавать размерность SetLenght, но чего-то всегда возникало исключение EAccessViolation.

Ответ №1 (АндрейV): Без кода трудно сказать. В хелпе вроде всё описано. Если проблемы с английским, вот вырезки из хелпа:
Выражение var Matrix:array or array of real; объявляет 2-размерный массив чисел. Для инициации вызовите SetLength с двумя целыми аргументами.
Выражение SetLength(Matrix,I,J) выделит память под массив IxJ и, например, Matrix[0,0] будет определять элемент этого массива.
Выражение
SetLength(Matrix,I) выделит память под I строк, но не под столбцы.

Позже вы можете выделить память под столбцы по одному за раз(можно разной длины):
SetLength(Matrix[0],J).

Ответ №2 (TrueAlex):
var z:array of array of integer;
begin
setlength(z,10,10); //создаст массив 10х10

Ответ №2 (Овчинников А.В.): Все подробно расписано в разделе помощи "Multidimensional dynamic arrays".
Цитирую основное:
To declare multidimensional dynamic arrays, use iterated array of ... constructions. For example,
type TMessageGrid = array of array of string;
var Msgs: TMessageGrid;
declares a two-dimensional array of strings. To instantiate this array, call SetLength with two integer arguments. For example, if I and J are integer-valued variables,
SetLength(Msgs,I,J);
allocates an I-by-J array, and Msgs[0,0] denotes an element of that array. You can create multidimensional dynamic arrays that are not rectangular. The first step is to call SetLength, passing it parameters for the first n dimensions of the array. For example,
var Ints: array of array of Integer;
SetLength(Ints,10);
allocates ten rows for Ints but no columns. Later, you can allocate the columns one at a time (giving them different lengths); for example SetLength(Ints[2], 5); makes the third column of Ints five integers long. At this point (even if the other columns haven't been allocated) you can assign values to the third column--for example, Ints[2,4] := 6.

Ответ №3 (vvs): Все делал правильно. Но не забывай, что номерация массивов в Дельфи начинается с 0. Поэтому если ты объявил размер матрицы A 4х4, то при выполнения кода (такого например):
for i:=1 to 4 do for j:=1 to 4 do A[i,j]:=a; {a- некое число}
возникнет ошибка, т.к. значения индексов матрицы должны лежать в диапазоне от 0 до 3! Т.е. код должен выглядеть следующим образом
for i:=0 to Size-1 do for j:=0 to Size-1 do A[i,j]:=a;
где Size - замерность матрицы (в данном случае квадратной)

Ответ №4 (Roman Lykov): Попробовал, все получается. Никаких ошибок не возникает.

  MyArray: Array of Array of Real;
 ...
  SetLength(MyArray, RowsNum);
  For n:=0 to RowsNum-1 do
    SetLength(MyArray[n], ColsNum);

Ответ №5 (Plazmer): Скорей всего ошибочка произошла при задании размеров вложенных массивов.

uses
  SysUtils;

var A : array of array of real;
    I, J : Integer;
begin
  SetLength(A, 10);
  for I := Low(A) to High(A) do
  begin
    SetLength(A[I], I); //Основное дополнение здесь
    for J := Low(A[I]) to High(A[I]) do
      A[I,J] := I+ J;
  end;
end.

Ответ №6 (Толстопят Евгений): нельзя _уменьшать_ размер динмассива. может из-за этого и ошибка?

Ответ №7 (ProvAd): Попробуй так:

type
  tAr2:array of array of real;

procedure setlength2(var a:tar2;count1,count2:integer);
var
  i:integer;
begin
  setlength(a,count1);
  for i:=0 to count1-1 do
    setlength(a[i],count2);
end;

Ответ №8 (fozzgen): скорее всего неправильно пользовался процедурой SetLength.. предположим, нужна матрица 10х10.. код такой:

...
var
  a:array of array of Byte;
 ...
SetLength(a,10);
for i:=0 to 9 do SetLength(a[i],10);
 ...

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

Ответ №9 (Адель Файзрахманов): А ты как размерность задавал? По-моему надо так:

const n=100;
 .................
var
a:array of array of real;
i:integer;
 ........................
setlength(a,n);
for i:=0 to n-1 do
setlength(a[i],n);

Ответ №10 (Маренич Владимир): Устанавливать размерность многомерного динамического массива нужно итерационно, например:

procedure Work;
const
  ArrayCols = 700;
  ArrayRows = 500;
var
  X: array of array of real;
  i,j: integer;
begin
  //***** Выделяем память для массива
  SetLength(X, ArrayRows);
  for i:=Low(X) to High(X) do
  begin
    SetLength(X[i], ArrayCols);
    //***** Можно задать начальные значения для элементов массива
    for j:=Low(X[i]) to High(X[i]) do
      X[i][j]:=Pi;
  end;
  try
    //*****
    //*****
    //***** Работаем с массивом
    //*****
    //*****
  finally
    //***** Очищаем массив
    for i:=Low(X) to High(X) do
      SetLength(X[i], 0);
    SetLength(X, 0);
  end;
end;

Ответ №11 (Юрий Александрович): Если ты просто пытался указать SetLength (имя массива ,размер), то это не правильно для двух мерных и больше динамических массивов используется такой формат SetLength(имя массива , размер 1-ой матрицы , размер 2-ой матрицы , и тд).

Вопрос №53: TreeView
Можно получить ссылку на TreeNode используя TTreeNode.Data?

Ответ №1 (АндрейV): Что за ссылка? Вообще-то свойство Data класса TTreeNode - это дополнительное свойство исключительно для пользователя, чтобы можно было с каждым TreeNode соотнести какую-нибудь(в идеале - любую, т.к. это указатель) информацию. А если имеется ввиду ссылка на TreeNode в памяти, то вообще-то в Delphi все классы - это ссылки, т.е. указатели.

Вопрос №54: Пауза в Windows
Как сделать паузу в процедуре, чтобы программа продолжала реагировать на сообщения операционной системы. Пробовал Sleep(), но если пауза большая, то эффект зависшей программы.

Ответ №1 (Толстопят Евгений): Application.ProcessMessages(); расклинит программу и позволит принять все сообщения.

Ответ №2 (Wizard): все же стоит в предложенный цикл вставить вызов Sleep(25) или около того, иначе процессор будет грузиться нещадно.

Вопрос №55: Работа с реестром
Есть ли какие-либо API функции или другие примочки для работы с Реестром (Добавление записей, чтение, и пр.)
Предполагаемое решение
: Модуль Registry.pas, классы TRegistry, TRegIniFile.

Ответ №1 (Anton):

Вопрос №60: Многострочный header в DBGrid
Может кто поделится идеями, как реализовать возможность показывать header к столбцам дынных в DBGrid в несколько строк? Хотелось бы, чтобы перенос слов (названий столбцов данных) происходил автоматически в зависимости от ширины столбца. Я думаю, что нужно переписывать сам DBGrid, но как там все это замутить с ходу не разоборался... :( Тем более, что там все это находится в private секции. Писать новый компонент не хотелось бы, т.к. желательно сохранить совместимость с DBGrid со стороны других компонентов.

Ответ №1 (Viktor Shevtsov): Есть такая очень классная библиотека EhLib. В ней DBGridEh - грид просто замечательный, внем могое можно делать, а многострочные header's с переносом слов делается за 5 сек :)

Ответ №2 (Anton): Найди DBGridEh. Там все есть. Даже объединение заголовков, и автопереносы и еще куча всяких возможностей которых сразу и не найдешь.

Ответ №3 (Alexandr Belayev): Пиши свой компонент наследником от TDBGrid - вот и будет тебе полная его совместимость с TDBGrid.

Ответ №4 (Святослав Львов): Дописать самому DBGrid не так просто. А вот найти подходящую замену можно. Пользуйтесь EhLib. Отличная альтернатива DBGrid : сложные хедеры и футеры (с суммированием). А также поиск,чекбоксы,возможность выделения данных для EXCEL (!) и многое другое.

Ответ №5 (Цыганков Алексей): Используй DBGridMouse.

 

 

Новые вопросы

Вопрос №29: web-камеры и потоковый звук
Привет. Где можно взять хоть какую-нибудь информацию(мануалы, компоненты, ....) по работе с web-камерами и потоковым звуком. Предо мной стоит задача сделать что-то вроде Net Meeting. Спасибо..
Предложить свой вариант решения можно здесь или воспользовавшись формой обратной связи (для HTML-формата).

Вопрос №34: ненужные дисководы в DriveComboBox
Не могу удалить ненужные дисководы из компоненты DriveComboBox(нужно для программы) и потом сделать обращение к одному из выбранных?
Предложить свой вариант решения можно здесь или воспользовавшись формой обратной связи (для HTML-формата).

Вопрос №36: Как правильно работать с LoginDialog?
Как правильно работать с функцией LoginDialog? Спасибо!
Предложить свой вариант решения можно здесь или воспользовавшись формой обратной связи (для HTML-формата).

Вопрос №56: Определение активных подключений к IB-серверу
Каким образом можно определить имена всех пользователей (Username) подключенных в данный момент к серверу InterBase?
Предложить свой вариант решения можно здесь или воспользовавшись формой обратной связи (для HTML-формата).

Вопрос №58: Как проверить изменена ли база данных (Paradox Table) после открытия?
Как проверить изменена ли база данных (Paradox Table) после открытия ? Событие OnUpdateData не вызывается при программном добавлении/удалении записи. Table.Modify также делает проверку только текущей записи.
Предложить свой вариант решения можно здесь или воспользовавшись формой обратной связи (для HTML-формата).

Вопрос №59: TBX дляTB2k 2.0.13 и TBSkin+
Мечтаю поставить оба вышеуказанных компонента одновременно. Есть какой-нибудь рецепт? Или может быть у одного из них неоспроримые преимущества перед другим? Помогите, plz.
Предложить свой вариант решения можно здесь или воспользовавшись формой обратной связи (для HTML-формата).


Вопрос №61: Как сграбить кусочек "чужой" DLL
Кстати, в одной из последних статей в рассылках, я кажется нашел идею решения проблемы, но т.к. в С++ (как и во всем остальном не очень силен), не знаю как этим воспользоваться... Речь идет о библиотеках для MASM
Предложить свой вариант решения можно здесь или воспользовавшись формой обратной связи (для HTML-формата).

Вопрос №62: Файловый менеджер
Прошу всех кто пишет на DELPHI помогите! Мне задали курсовую работу написать файловый менеджер подобный Windows Commander (программа должна взять в себя только основные операции и функции) Поделитесь знаниями, как создать такой файловый менеджер. Преподаватели не помогают, а обратиться мне больше некому.
Предполагаемое решение: Тема дастаточно обширна. Разбей задачу на несколько кусков. Например, отображение панелей, смена дисков, копирование и перенос, удаление, создание папок и т.п. В этом ничего сложного нет, просто объемная тема.
Предложить свой вариант решения можно здесь или воспользовавшись формой обратной связи (для HTML-формата).

Вопрос №63: Компоненты на форме
Скажите пожалуйста, как узнать какие компоненты находятся на форме и скинуть их названия в листбокс.

Предполагаемое решение
: Через реализацию цикла for x:=0 to Form1.ComponentCount-1 do ListBox1.Items.Add(Form1.Components[x].Name).
Предложить свой вариант решения можно здесь или воспользовавшись формой обратной связи (для HTML-формата).

Вопрос №64: Работа с QREPORT
Как в QREPOERT передать текстовый параметр (просто присвоение QLabel.caption:='нужный текст') не работает.

Предложить свой вариант решения можно здесь или воспользовавшись формой обратной связи (для HTML-формата).

Вопрос №65: Проблема с Sockets
Имеем ListBox:
Сервер:

Var i: integer
Begin
  For i:=0 to ListBox1.Items.Count-1 do
    ServerSocket1.Socket.Connections[MyHandle].SendText('Строка'+IntToStr(i));
end;

Почему клиенту все приходит в виде ОДНОЙ строки и как от этого избавиться? Не хотелось бы ничего глобально менять, так как и сервер и сокет практически написаны - проблема с передачей контакт листа (грубо говоря пользователи OnLine). Пробовал в конце каждой строки #13#10 - то же самое... :((
Предложить свой вариант решения можно здесь или воспользовавшись формой обратной связи (для HTML-формата).

Вопрос №66: Пропадают записи в таблице
БД DBase. Случается следующее добавляешь данные в базу - все нормально, добавление происходит успешно. Закрываешь приложение, снова его окрываешь - часть введенных данных может присутствовать, часть отсутствова, могут все введенные данные отсутствовать. Что это может быть, посоветуйте, если кто знает

Предполагаемое решение
: перед закрытием таблицы вставь FlushBuffers.
Предложить свой вариант решения можно здесь или воспользовавшись формой обратной связи (для HTML-формата).

Вопрос №67: Бегущая строка
Здравствуйте, с помощью какого компонента и как сделать бегущую строку на форме?

Предложить свой вариант решения можно здесь или воспользовавшись формой обратной связи (для HTML-формата).

Вопрос №68: Как Сделать Компилятор?
Люди, Помогите, Срочно Нужен Исходник Компилятора. Никак Без Него Нельзя. Делаю Программу, И Нужен Компилятор. Срочно. Программа Такая:
Короче Делалка Разных Автозапусков. Так Вот Надо Чтобы Все, Что Он Поместит На Форму, Было В Построившимся Икзишнике.
Заранее Благодарен...
Предполагаемое решение
: Как на меня, так проще сделать програмный интерпретатор с текстом программы (типа скрипта).
Предложить свой вариант решения можно здесь или воспользовавшись формой обратной связи (для HTML-формата).

Вопрос №69: Список функций для экспорта из dll
Кто-нибудь знает, как можно получить список имен функций из экспорта в dll?
Предложить свой вариант решения можно здесь или воспользовавшись формой обратной связи (для HTML-формата).

Вопрос №70: Выгрузка в Excel
Как выгрузить содержимое грида в Excel?
Предполагаемое решение: С помощью стандартных компонентов для MS Office, в т.ч. и Excel. В предидущих рассылках принцип подхода в работе с Excel имел место быть.
Предложить свой вариант решения можно здесь или воспользовавшись формой обратной связи (для HTML-формата).

Вопрос №71: Закрытие процессов Windows
Какими функциями пользуются консольные приложения (типа FAR) при закрытии процессов Windows? Как это организовать в своем приложении? Ведь FAR спокойно закрывает приложения с открытыми несохраненными документами и те не выводят ни каких запросов на сохранение.
Предполагаемое решение: Функция WinAPI :: TerminateProcess.
Предложить свой вариант решения можно здесь или воспользовавшись формой обратной связи (для HTML-формата).

Вопрос №72: ShellListView
Как ShellListView "заставить" отображать содержимое локальной папки (картинки) в режиме "Эскизы страниц"
Предложить свой вариант решения можно здесь или воспользовавшись формой обратной связи (для HTML-формата).

Вопрос №73: TTable
У меня вопрос по объекту TTable. У него есть свойство Filter. Как мне установить фильтр на дату, вернее на период от и до? Немогу подставить туда константное значение даты. Заранее благодарен за ответ. Желательно ответ прислать почтой (olegv@ziet.zhitomir.ua).
Предполагаемое решение: Запросы в Filter составляются по общепринятым правилам SQL. Опускается только часть "SELECT * FROM TableName WHERE" поскольку у нас таблица уже выбрана с помощью данного компонента. А в данном свойстве нужно писать, например, "Field1>100 AND Field1<200". Но не забывай также и про свойство Filtered.
Предложить свой вариант решения можно здесь или воспользовавшись формой обратной связи (для HTML-формата).

Вопрос №74: Список служб Win2000
как получить список запущенных сервисов в Win2000 & XP
Предложить свой вариант решения можно здесь или воспользовавшись формой обратной связи (для HTML-формата).

Вопрос №75: Калькуляция в TdataSet
Подскажите, пожалуйста, как в Delphi5 реализовать сведущее. Есть таблица (TTable с созданными статическими полями) "связанная" с dbf файлом. Необходимо при каждом изменении в каком-либо из ее полей пересчитать величину являющуюся функцией от всех значений этого поля в таблице, например суммой. Необходимо учесть что, значение поля изменятся не только редактированием его в компоненте управления данными, но и путем назначения значения полю в коде программы. Калькуляция в TdataSet.
Предложить свой вариант решения можно здесь или воспользовавшись формой обратной связи (для HTML-формата).

Вопрос №76: ListView
Скажите пожалуйста, как List View связать с TreeView и каким образом корректно добавлять данные в ListView из файла или БД построчно?
Предполагаемое решение: Относительно того как связать - решать тебе, поскольку неизвестно на сколько структуризированы данные. Относительно построчного заполнения ListView:

procedure TForm1.xxx(...)...
var
  x:TListItem;
  z:Integer;
begin
  Table1.Filter:='Field1=68';
  Table1.Filtered:=True;
  for z:=1 to Table1.RecordCount do begin
    x:=ListView1.Items.Add;
        x.Caption:=Table1Name.Value;
        x.SubItems.Add(Table1Size.AsString);

        Table1.Next;
  end;
  Table1.Filter:='';
  Table1.Filtered:=False;
end;

Предложить свой вариант решения можно здесь или воспользовавшись формой обратной связи (для HTML-формата).

Вопрос №77: Перехват сообщений NET SEND
В Win2k есть замечательная команда NET SEND. Спомощью нее можно без каких либо проблем пересылать сообщения между компьютерами в сети. Так вот, встал вопрос о том, чтобы перехватывать таким образом переданные сообщения. (Хочется САМОМУ сделать рульный месенжер). То есть, мне нужно отловить момент, когда пришло сообщение на мой компьютер, ну и естественно само сообщение.
Предложить свой вариант решения можно здесь или воспользовавшись формой обратной связи (для HTML-формата).

Вопрос №78: Быстрые клавиши
Как отследить нажатие комбинации клавиш (например, Ctrl+Alt+q) в Windows при неактивной форме?
Предполагаемое решение: Поставить глабалный HOOK на это сочетание, если нужны именно эти клавиши.
Предложить свой вариант решения можно здесь или воспользовавшись формой обратной связи (для HTML-формата).

Вопрос №79: Японские кросворды
Пытаюсь написать алгоритм решения японских кросвордов. Никак не получается анализ нахождения пустых клеток.
Предложить свой вариант решения можно здесь или воспользовавшись формой обратной связи (для HTML-формата).

Вопрос №80: Компонент (Delphi 6) для работы с UUCP
Помогите, пожалуйста, достать компоненту для работы с протоколом UUCP. В Интернете ничего не нашлось. Если у кого-нибудь есть сама компонента или линк на нее, пришлите, please. Очень нужно! (Black)
Предложить свой вариант решения можно здесь или воспользовавшись формой обратной связи (для HTML-формата).


Все вопросы присылайте по адресу: delphi-ask@igp.org.ua
Все ответы присылайте по адресу: delphi-reply@igp.org.ua
Все подсказки присылайте по адресу: delphi-hint@igp.org.ua

Со всем списком советов можно познакомиться по адресу: http://igp.org.ua/delphine/.
Наш проект Delphine можно найти по следующей ссылке: http://igp.org.ua/products/delphine/.

Заходите в наш форум: Форум Delphi-профессионалов. Адрес: http://forum.igp.org.ua/.
Здесь Вы найдете ответы на все Ваши вопросы!

Выберите действие:
Заглавие (одной строкой) :
Содержание :

От кого :
Не показывать мой e-mail другим пользователям



http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное