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

Delphi - проблемы и решения

  Все выпуски  

Проблемы и решения в Delphi #47


Служба Рассылок Subscribe.Ru

5681 подписчиков.

Проблемы и решения в Delphi - выпуск 47 от 14.02.2002.


А вдруг наступит лето?...


* В БАЗУ OFFLine * * ВСЕ ВОПРОСЫ * * СПРОСИТЬ * * ПРЕДЛОЖИТЬ * * АРХИВЫ * * СКОЛЬКО НАС *


Доброго Вам времени суток уважаемый читатель.

Поздравляю всех, чувствующих себя влюбленными с праздником!

Да-а-а... Ошибся я простите мне ребята... Значит... еще раз читаем как правильно запрашивать из базы взаимопомощи. А вообще я даже испугался стольких запросов - канал-то у нас некудышный пока, думал завалите его запросами. Кстати, запросы запросами, а вот в базу никто ничего и не положил :( ... и это за целую неделю!


Как обычно в выпуске:

1. Очередные вопросы.
2. Отвеченные вопросы.
3. Наша база OFFLine взаимопомощи.


* В БАЗУ OFFLine * * ВСЕ ВОПРОСЫ * * СПРОСИТЬ * * ПРЕДЛОЖИТЬ * * АРХИВЫ * * СКОЛЬКО НАС *

1. Очередные вопросы.

Вопрос 682:
От: D

Вопрос по Indy.
Как в IdMessage изменить вид кодировки.
Чтобы и в поле откого и в теме и в теле письма -
везде была та кодировка которую я указал,
например win1251. По умолчанию все понимается как koi8r.


Ответить.


Попробуй так:


Вопрос 683:
От: D

Вопрос по Indy. Как в IdSMTP отправить вложение.


Ответить.


Попробуй так:


Вопрос 684:
От: Dr.IMP

Кто-нибудь может дать прямую ссылку на ресурс, содержащий исходник,
либо обьяснение работы графического редактора? Чем больше у него будет
функций и сложнее, тем лучше! В данном направлении мало чего смыслю, но
понадобилось срочно для автоматизации рутинно работы написать
программку, содержащую только необходимые функции.
Или для начала просто обьясните:
Имею я на форме label и image. Как, например, повернуть их на угол "-30
градусов" ? А ухватить мышкой и перетащить? А изменить свойство шрифта у
label в то время, когда над ним, например, уже выполнена какая-то работа
и не хочется просто удалять его и начинать все по новому?


Ответить.


Попробуй так:


Вопрос 685:
От: Yan Burtiansky

Ггде можно найти документацию по использованию
в Delphi5 компонентов вкладки Servers (желательно в электронном виде).


Ответить.


Попробуй так:


Вопрос 686:
От: Dimitry V. Archangelsky

Вопрос, как использовать дизайн-режим VCL компонента? Может быть этот
вопрос
уже был, ткните меня в нужную сторону - нужен собственный визуальный
дизайнер форм. Не хотелось-бы писать свое....


Ответить.


Попробуй так:


Вопрос 687:
От: Crazy Max

Где взять DelphiX под 5 или 6 Delphi?


Ответить.


Попробуй так:


Вопрос 688:
От: Андронов Алексей

Хотел бы узнать, как скопировать выделенную строку ListBox в буфер:


Ответить.


Попробуй так:


Вопрос 689:
От: Gavrilenko UN

Подскажите, пожалуйста, можно ли программно менять пароль InterBase.
Если можно, то как?


Ответить.


Попробуй так:


Вопрос 690:
От: Vitaliy Tokarev

Как можно читать Скан-код и Аски-код используя
таймер, но чтобы программа никому не мешала
и висела в Tray? (Мне нужно перехватывать
некоторые комбинации клавиш и по ним запускать
программу)
-----------
PS. Используется новая клавиатура с множеством
дополнительных клавиш, драйвер к которой криво
работает - хочу свою резидентную программу
написать.


Ответить.


Попробуй так:


Вопрос 691:
От: vas

Как с помощью локального SQL создать таблицу и
     заполнить ее записями из другой таблицы. Например нужна таблица
      Rep с полями :
            Tabnum
            SudDiv
            Sum
      Есть таблицы
      1)Staff c полями
            Tabnum
            NSubDiv
            .... и тд.
      2)SubDiv c полями
           NSubDiv
           SubDiv
      3)Debet
           Tabnum
           CodeDeb
           Sum
       Требуется создать таблицу REP перенести в нее соответственно
       Tabnum.  В поле Sum должна стоять сумма по Tabnum из тб.
       Debet, и соответственно поле SubDiv должно содержать название
       подразделения для Tabnum из таблицы SubDiv. Как это сделать
       используя Local SQL ? Если можно с примером.


Ответить.


Попробуй так:


Вопрос 692:
От: vas

Можно ли последовательно вызвать несколько операторов локального SQL ?
Например сделать CREATE TABLE ....
(а затем)        Insert into
Можно ли в локальном SQL использовать операторы for , if , while и тд.
Не подскажет ли кто литературу (или даст ссылку) по подробному
описанию локального SQL (файл LocalSQL.hlp уже изучен).


Ответить.


Попробуй так:



* В БАЗУ OFFLine * * ВСЕ ВОПРОСЫ * * СПРОСИТЬ * * ПРЕДЛОЖИТЬ * * АРХИВЫ * * СКОЛЬКО НАС *

2. Отвеченные вопросы.

Вопрос 667:
От: sss

Как экспортировать таблицу базы данных в ASCII-файл?


Ответить.

Попробуй так:
procedure TMyTable.ExportToASCII; var I:
Integer; Dlg: TSaveDialog; ASCIIFile: TextFile; Res: Boolean; begin if Active then if (FieldCount > 0) and (RecordCount > 0) then begin Dlg := TSaveDialog.Create(Application); Dlg.FileName := FASCIIFileName; Dlg.Filter := 'ASCII-Fiels (*.asc)|*.asc'; Dlg.Options := Dlg.Options+[ofPathMustExist, ofOverwritePrompt, ofHideReadOnly]; Dlg.Title := 'Экспоритровать данные в ASCII-файл'; try Res := Dlg.Execute; if Res then FASCIIFileName := Dlg.FileName; finally Dlg.Free; end; if Res then begin AssignFile(ASCIIFile, FASCIIFileName); Rewrite(ASCIIFile); First; if FASCIIFieldNames then begin for I := 0 to FieldCount-1 do begin Write(ASCIIFile, Fields[I].FieldName); if I <> FieldCount-1 then Write(ASCIIFile, FASCIISeparator); end; Write(ASCIIFile, #13#10); end; while not EOF do begin for I := 0 to FieldCount-1 do begin Write(ASCIIFile, Fields[I].Text); if I <> FieldCount-1 then Write(ASCIIFile, FASCIISeparator); end; Next; if not EOF then Write(ASCIIFile, #13#10); end; CloseFile(ASCIIFile); if IOResult <> 0 then MessageDlg('Ошибка при создании или переписывании '+ 'в ASCII-файл', mtError, [mbOK], 0); end; end else MessageDlg('Нет данных для экспортирования.', mtInformation, [mbOK], 0) else MessageDlg('Таблица должна быть открытой, чтобы данные '+ 'можно было экспортировать в ASCII-формат.', mtError, [mbOK], 0); end; Попробуй так:


Вопрос 668:
От: Dmitry

Имеется 2 формы, на первой форме переменная "a"
имеет какое-нибудь значение (к примеру "Дельфи"). Каким образом эту переменную
перенести на 2 форму, к примеру "Дельфи" написать в Edit1 на форме 2.


Ответить.

Попробуй так:
Следует выражаться конкретнее. Что значит переменная 'а' лежи
т на форме??? Может ты имел ввиду объект типа TLabel или TEdit? Если переменная, то объяви в первом модуле ее в интерфейсной части, и во втором модуле опиши использование первого модуля Unit2; interface .... implementation uses Unit1; end. Также ты получишь и доступ к объектам первой формы по типу Edit1.Text := Form1.Label1.Caption; Попробуй так:
Первая форма unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class(TForm) private { Private declarations } public { public declarations } end; var Form1: TForm1; const a = 'Дельфи'; implementation {$R *.dfm} end. Вторая форма unit Unit2; interface uses unit1, //ссылка на юнит первой формы StdCtrls, Classes, Controls, Windows, Messages, SysUtils, Variants, Graphics, Forms, Dialogs; type TForm2 = class(TForm) Edit1: TEdit; Button1: TButton; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public { public declarations } end; var Form2: TForm2; implementation {$R *.dfm} procedure TForm2.Button1Click(Sender: TObject); begin Edit1.Text:=a; end; procedure TForm2.FormCreate(Sender: TObject); begin Form2.Visible:=true; end; end. А вообще в таких случаях удобнее завести какой-нибудь юнит с глобальными переменными, которые можно использовать в любом другом модуле. (Изменять в одном, использовать в другом) Попробуй так:
Смотрим: Из Form1 мы можем напрямую обратиться к Edit1 на Form2, указав лишь имя нужной формы, т.е^ // где-то в Form1 Form2.Edit1.Text:=a; Попробуй так:
Все просто, в Unit2 делаешь file -> Use Unit, выбираешь Unit1, и все твои переменные из первого Unit'a доступны во втором. Естественно, что для Unit1 они должны быть глобальными, т.е. описаны не в процедурах, а в разделе общих описаний юнита, примерно так: ... private { Private declarations } public { public declarations } end; var a: String; // твоя переменная implementation procedure TForm1.Form1Create(Sender: TObject); begin a := 'Delphi'; // присвоили значение end; ... и в Unit2 ... procedure TForm1.Form1Create(Sender: TObject); begin Edit1.Text := a; // вывод значения в едит end; Попробуй так:


Вопрос 669:
От: zuka

Может, кто-то встречался, при открытии OpenDialog необходимо
отсортировать файлы по дате, как это сделать?


Ответить.

Попробуй так:


Вопрос 670:
От: Pilligrimm

Добрый день. Решаю задачи по определению корреляционных функций
пространственных сигналов. На выходе нужно получить трехмерное
изображение поверхности (корреляционной функции). Вопрос - с помощью
какого компонента лучше всего строить трехмерное изображение, и ,
соответственно, где этим компонентом можно разжиться.


Ответить.

Попробуй так:


Вопрос 671:
От: Данилюк Алексей Вадимович

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


Ответить.

Попробуй так:
Необходимо установить драйвер русского языка для BDE. В BDE
вкладка Configuration далее Drivers->Native->DBase установи LANGDRIVER = dBASE RUS cp866 Попробуй так:
Попробуй в BDE изменить для драйверов PARADOX и BDASE кодеровку на DBase866 rus Попробуй так:


Вопрос 672:
От: Dmitry Shkil

Подскажите как рисовать иконки програмно. Мне нужно получить иконку
размером 16х16 и написать на ней цифорки. Как создать, нарисовать, что
бы потом можно было к ней обращаться по hIcon.


Ответить.

Попробуй так:
в дельфи есть Image Editor


Вопрос 673:
От: Данилюк Алексей Вадимович

У меня картинка в BMP формате (размеры
3243 на 2335, 16 цветов).
Как пустить такую картинку на печать из моей программы, но, чтобы она
влазила на лист
формата А4, альбомной ориентации.


Ответить.

Попробуй так:


Вопрос 674:
От: G.Marat

Вопрос: Как узнать метку диска? Пробовал через FindFirst с параметром
faVolumeID и через GetVolumeInformation. В VB все работает, а на
дельфу перевести никак не могу. Вот код на VB:
Private function GetVolumeLabel(DriveName as String) As String
    Dim pos as Long
    GetVolumeLabel = Space$(14)
    Dim drvFileSystem as string
    if GetVolumeInformation(DriveName, GetVolumeLabel,
Len(GetVolumeLabel), _
        0, 0, 0, drvFileSystem, Len(drvFileSystem)) = 1 then
        pos = InStr(GetVolumeLabel, Chr$(0))
        if pos <> 0 then GetVolumeLabel = Left$(GetVolumeLabel, pos - 1)
        if Len(Trim$(GetVolumeLabel)) = 0 then GetVolumeLabel = ""
    end if
end function
И еще одно: как конвертнуть текст из дос в вин кодировку?
Пример на VB, опять же, у меня есть:
public function ConvertString(ByVal strSrc as String, _
    ByVal nFromCP as Long, ByVal nToCP As Long) As string
    Dim nLen as Long
    Dim strDst as string
    Dim strRet as string
    Dim nRet as Long
    nLen = Len(strSrc)
    strDst = String(nLen * 2, Chr(0))
    strRet = String(nLen * 2, Chr(0))
    nRet = MultiByteToWideChar(nFromCP, MB_PRECOMPOSED, strSrc, nLen,
strDst, nLen)
    nRet = WideCharToMultiByte(nToCP, 0, strDst, nRet, strRet, nLen * 2,
ByVal 0, 0)
    ConvertString = Left(strRet, nRet)
end function


Ответить.

Попробуй так:
Насчет перекодировки: var s:string; begin
s:='Текст Доса. Может, считаешь его из файла.'; SetLength (s, Length (s));//Это надо сделать, т.к. иначе дельфи глюкнет OemToAnsi (PChar(s),PChar(s));//всё end; Попробуй так:
Узнать метку диска можно так: function GetVolumeLabel(DriveName :Pchar): String; var VolumeLabel, drvFileSystem: array [0..MAX_PATH-1] of Char; VolumeSerialNo, MaxComponentLength, FileSystemFlags : DWord; begin GetVolumeInformation(DriveName, VolumeLabel, MAX_PATH, @VolumeSerialNo, MaxComponentLength, FileSystemFlags, drvFileSystem, MAX_PATH); GetVolumeLabel := VolumeLabel; end; А текст конвертировать можно при помощи функций CharToOem и OemToChar. Попробуй так:
По кодировке ДОС в Винды и обратно... Сам долго парился. AnsiToOem OemToAnsi это для третих Делфей в пятых CharToOemBuff, OemToChar,CharToOem, OemToCharBuff Работало!!! Я даже с дуру базы с dbf в db формат конвертил. Попробуй так:


Вопрос 675:
От: Leonid

Как в другое приложение послать сообщение о сочитании клавишь (т.е. с
использованием CTRL, ALT или SHIFT), конструкции типа
 PostMessage(wnd1,WM_KEYDOWN,VK_MENU,0);
 PostMessage(wnd1,WM_KEYDOWN,key,0);
 PostMessage(wnd1,WM_KEYUP,key,0);
 PostMessage(wnd1,WM_KEYUP,VK_MENU,0);
не работают, так что хотелось бы узнать, можно ли в 1 WM отослать и
состояние этих клавишь.


Ответить.

Попробуй так:


Вопрос 676:
От: leader

Есть DOS-программа (EXE-файл без исходников), которая работает в окне и
в процессе работы добавляет текстовые строки в файл.
Можно ли эти строки получать в свое приложение без формирования файла и
как это сделать?
Подозреваю, что решение следует искать в области создания своей консоли.
Однако, вследствие незнания "кишок" Windows, добиться результата я не
смог, а время поджимает.


Ответить.

Попробуй так:
Да, именно в создании консоли, а потом ReadConsoleOutputChara
cter()... Скачай мою оболочку к UPX, если хочешь увидеть это дело в действии: http://iont.virtualave.net/pub/upxshell/upxsource.exe Попробуй так:
Смотря как работает эта программа. Если она отправляет данные на 'con' ('stdout') или имя файла задается параметром тогда без проблем. Даешь ему в качестве имени файла 'con' (может быть и другое имя стандартного выходного потока, но принцип такой же). Ты пишешь консольную прогу в которой читаешь данные открывая свой файл на чтение таким образом AssignFile(f, 'con');{или stdin, поэкспериментируй} Read(f, myVar); Запускаешь свои программы в командной строке где-то так dosprog.exe > myprog.exe В Unix'ах такой способ работы очень развит, там данные обрабатывают и передают друг другу десяток программ за один запуск. Попробуй так:


Вопрос 677:
От: Alexandr Gratchenko

С компонентом MaskEdit.
Для ввода чисел до 5 знаков использую маску '99999;0;_'
Но при работе эта маска пропускает не только цифры, но и пробелы, если
перемещаться по полю клавишами со стрелками.
Может кто-нибудь знает как побороть этот глюк?
Soft Delphi 5.0


Ответить.

Попробуй так:
Попробуй так: 00000;0;0 только смотри не MaskEdit1.Text,
а MaskEdit1.EditText. Попробуй так:


Вопрос 678:
От: Maria Zimakova

У меня возникла проблема с доступом к хранимым процедурам Oracle 8i.
Подскажите, пожалуйста, с помощью какого компонента (типа StoredProc)
это
лучше делать. Где можно его можно найти и чуть подробнее  - как
работать.


Ответить.

Попробуй так:
По поводу вашего вопроса про Оракл и хранимые процедуры - рек
омендую использовать библиотеку DOA(Direct Oracle Access) - доступ до Оракла напрямую без BDE очень удобно Попробуй так:
Первый компонент DOA (Direct Oracle Access) самая полная поддержка Oracle (есть исходники ;-) Второй компонент ODAC (Oracle Direct Access Compont) этот полностью наследуется от TDataSet + имеет собственные уникальные классы Попробуй так:


Вопрос 679:
От: Dr.Shadow[X-RayS]

Помогите, очень хочу работать с любым (Win32 и Real Dos Mode)
консольным приложением из Delphi, т.е. ввод в консольное окно и
копирование(сохранение) консольного окна. Помогите, очень прошу - пишу
GUI-интерфейс на Delphi для Dos-программы. Заранее спасибо.


Ответить.

Попробуй так:
AllocConsole а затем ReadConsoleOutputCharacter()... Я толь
ко-что ответил на этот-же вопрос (Ѓ676) Качай этот проэкт, если хочешь посмотреть как конкретно это делается: http://iont.virtualave.net/pub/upxshell/upxsource.exe Попробуй так:
Не вижу необходимости для такой цели пользоваться Delphi. Мне кажется, тебе стоит использовать Borland Pascal c TurboVision. Я так понимаю, что тебе нужна интерактивная среда в текстовом режиме с использованием расширенных функций управлением памятью. Ну так там это все есть.


Вопрос 680:
От: Изотко Сергей

Как сделать так, чтобы при внесении изменений в ListBox
 каждую
секунду он не мерцал. Для внесения изменений я использую
 Timer.


Ответить.

Попробуй так:
Перед изменениями вызывай ListBox1.Items.BeginUpdate, а
после - ListBox1.Items.EndUpdate Попробуй так:
Вообще-то, можно временно приостановить перерисовку списка, т.е ListBox1.Items.BeginUpdate; for i:=0 to 1000 do ListBox1.Items.Add ('###'); ListBox1.Items.EndUpdate; Или же можно перерисовывать список пореже, не выбрасывая таймер: procedure Button1Click; begin i:=GetTickCount; Timer1.Enabled:=true; end; procedure Timer1Timer; begin if GetTickCount-i>=1000 then begin i:=GetTickCount; beep; end; end; Попробуй так:
В событии on create формы пишешь ListBox1.DoubleBuffered := true;


Вопрос 681:
От: vas

Уважаемые господа не подскажет ли кто нибудь
     относительно использования параметров в подзапросах SQL, а то я
     когда явно в подзапросе указываю число все работает, а когда
     пытаюсь передать это чило ч/з параметр выдается сообщение об
     ошибке "Coud not find object" - "Не могу найти объект." В чем
     дело ?
     Второй вопрос у меня более общий. Подскажите пожалуйста как
     соединиться с сервером Oracle.
     Нужно ли устанавливать дополнительные драйвера ?
     Как настроить псевдоним ?
     Нет ли где нибудь специальных компонентов для соединения и если
     есть то где их взять ?


Ответить.

Попробуй так:
1-й вопрос - попробуй перед параметром ставить двоеточие.
на второй: библиотеку DOA(Direct Oracle Access) - доступ до Оракла Попробуй так:
>относительно использования параметров в подзапросах SQL В запросе перед именем параметра ставится двоеточие (:). >Подскажите пожалуйста как соединиться с сервером Oracle. Я думаю, понадобится установить клиентскую часть Oracle. OraWin95, OraNT или нечто подобное, в tsnames прописываются необходимые сервера, а доступ можно получить через ADO - стандартные для D5. Попробуй так:
нужно устанавливать OCI (Oracle Call Interface), который входит в клиента Oracle



* В БАЗУ OFFLine * * ВСЕ ВОПРОСЫ * * СПРОСИТЬ * * ПРЕДЛОЖИТЬ * * АРХИВЫ * * СКОЛЬКО НАС *



3. Наша база OFFLine взаимопомощи.
Что на сегодня у нас имеется :
Документы Компоненты Программы Проекты
1. От Валентина Озерова
2. 32 Урока По Делфи4
3. Непрямоугольные формы
4. CGI на Делфи
5. Справочник по Делфи5
6. От Олега Малышева
7. Перекодировки
8. WinApi
9. От Алексея Малинина

1. RX6
2. Выполнение Матем Выражений
3. Управление DOS окнами


1. Текст под Углом
2. Управляем WinAmp
3. Печать Графики

Если Вам есть что послать в базу OFFLine то просто в теме письма укажите 'baseoffl' приложите аттач и отправьте письмо.
А ты уже поделился с товарищами чем-нибудь интересным?
Если хотите что-то заказать то пошлите по почте этот запрос , а после двоеточия поставьте две цифры разделенныe запятой, например : ':2,1' - это значит, что вы хотите заказать из второй колонки(Компоненты) первый элемент.
Есть небольшое ограничение - в одном письме можно запросить только что-то одно (обрабатывается только первая строка тела письма)!

Помните! Структура каталогов поддерживается только до очередного выпуска рассылки! Поэтому при запросе всегда берите данные из последнего выпуска!

Если Вы хотите как можно скорее получить ответ на свой вопрос, то
укажите в теме письма - delphiV,иначе письмо будет прочитано значительно
позже, если же у вас есть предложения то в теме письма укажите delphiP.

Для интересующихся - немного о себе. Работаю на
железнодорожном транспорте ведущим программистом.
Основные мои разработки - это сбор и доставка клиентам
информации о вагонах и поездах: где находится(по России),
куда едет. В связи с этим программировал для e-mail,Socket,БД,ISAPI.

За сим прощаюсь - скорых Вам и качественных программ.

Автор рассылки - Дмитрий.
ICQ - 89533941.

* В БАЗУ OFFLine * * ВСЕ ВОПРОСЫ * * СПРОСИТЬ * * ПРЕДЛОЖИТЬ * * АРХИВЫ * * СКОЛЬКО НАС *



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

В избранное