Рассылка закрыта
При закрытии подписчики были переданы в рассылку "Delphi - проблемы и решения" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
Delphi для профессионалов - Раздел 'Вопрос-ответ'
Информационный Канал Subscribe.Ru |
Рассылка: Delphi для профессионалов
Количество подписчиков: 4344

Раздел "Вопрос-ответ"
Результаты
Вопрос №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-средств не существует.
мне надо создать двумерную матрицу, но того размера который я укажу в процессе работы программы. пытался объявлять как 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-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/.
Здесь Вы найдете ответы на все Ваши вопросы!
http://subscribe.ru/
E-mail: ask@subscribe.ru |
Отписаться
Убрать рекламу |
В избранное | ||