Обсуждение Программирование на Delphi/Pascal

C

ChertoffPes

Serg153 написал(а):
Подскажите......

я пишу DLL на Дельфи.... которая использует не визуальный компонент TClientSocket; - интернет клиент TCP

Помогите..... :))
Хм... У тебя же оно уже определенно.
Строчка
Код:
ClientSocket2.OnConnect := ClientSocket2Connect;
определяет событие OnConnect через функцию ClientSocket2Connect, которая должна быть определена в private-разделе класса клиент-приложения.
По аналогии нужно объявить и другие процедуры внутри private-раздела исходного класса, например,
Код:
procedure SocketErrorProcessing(Sender: TObject);
а потом определить переприсвоение в той же CreaSok:
Код:
procedure CreaSok(); StdCall;
 begin
{Do Smth}
___ClientSocket2.OnConnect := ClientSocket2Connect;
___ClientSocket2.OnError := SocketErrorProcessing;
___ClientSocket2.OnDisconnect := SocketDisconnectProcessing;
{Do Smth}
 end;
Ну и конечно же не забыть саму реализацию функции обработки ошибок и т.п. и т.д. Что-нибудь вроде
Код:
procedure AnyClass.SocketErrorProcessing(Sender: TObject);
{Declare Smth}
begin
  {Do Smth}
end;
ЗЫ Особенностей реализации DLL-библиотек я не знаю, их не писал, но особенностей ООП никто не отменял. То есть нужно просто определить процедуры обработки внутри исходного класса, написать реализации этих функций и присвоить ссылки на них стандартным обработчикам - вот и все.
 
S

Serg153

Решил проблему.... для вставки в Dll (да и в консольные приложения) и редактирования невизуальных объектов в Инспеторе Объетков -))... использую TDataModule... в него кидаю нужные - невизуальные объекты - и исправляю их - как будто они на форме находятся...
 
Кто-нибудь помогите!
Поставил на форму компонет DataBase все настроил
connected работает.
Далее вытащил Query (select * from buf_v_int)
в свойстве DataBase выбрал имя компонента DataBase,
но при попытке сделать Query1.Active:=true пишет:
неверный символ.
Хотя с помощью компонента Table подключиться к той же таблице получается.
Подскажите в чем проблема.
 
C

ChertoffPes

Кто-нибудь помогите!
Поставил на форму компонет DataBase все настроил
connected работает.
Далее вытащил Query (select * from buf_v_int)
в свойстве DataBase выбрал имя компонента DataBase,
но при попытке сделать Query1.Active:=true пишет:
неверный символ.
Хотя с помощью компонента Table подключиться к той же таблице получается.
Подскажите в чем проблема.
Попробуй тупо поставить точку с запятой в конце сиквел-запроса. Сиквел-стейтмент обычно этим чудным и замечательным символом должен заканчиваться ;)
И еще - текст запроса в круглых скобках писать тоже не рекомендуется.
Короче, в конечном варианте код должен быть такой
Код:
select * from buf_v_int;
Еще большое сомнение вызывают символы нижнего подчеркивания - моветон. Но раз тэйбл открылся, то все должно рулить
 
Всё разобрался, наоборот точку с запятой не надо было, а я ставил.
 

Neo_S

Ословед
У меня вопрос. Есть такая функция:
Код:
procedure ListFileDir(Path: string; FileList: TStrings);
var
   SR: TSearchRec;
begin
   if FindFirst(Path + '*.*', faAnyFile, SR) = 0 then
   begin
     repeat
       if ((SR.Attr <> faDirectory)and(UpperCase(SR.Name)<>Uppercase('thumbs.db'))and(SR.Attr <> faHidden)and(SR.Name <>'.')and(SR.Name <>'..')) then
       begin
         FileList.Add(SR.Name);
       end;
     until FindNext(SR) <> 0;
     FindClose(SR);
   end;
end;
при копировании проги на диск (а файловая система там CDFS) данная процедура напрочь отказывается распозновать аттрибуты файлов (faHidden, faDirectory и т.д.)
Как бы заставить его определять аттрибуты на сд-рв диске?
 
Может знает кто-нибудь?
Написал прогу для работы с БД (Oracle), использовал механизм BDE, можно ли её использовать не устанавливая Delphi (BDE).
И второй вопрос переделал эту прогу: заменил компоненты на ADO при работе выдаёт странные ошибки.
Вот код цикла который под BDE работает а в ADO нет
(пишет неправильное число)

ADO:
Код:
for j:=1 to 47 do
begin
n:='';
i:=(ComboBox1.Text);
d:=(Edit1.Text);
n:=Form2.ComboBox1.Items.Strings[j];
z:=(Edit2.Text);
z:=FloatToStr((StrToFloat(z))/48);
Query1.Close;
Query1.Parameters.ParamValues['i']:=i;
Query1.Parameters.ParamValues['d']:=d;
Query1.Parameters.ParamValues['n']:=n;
Query1.Parameters.ParamValues['z']:=z;
Query1.ExecSQL;
end;
BDE:
Код:
for j:=1 to 47 do
begin
n:='';
i:=(ComboBox1.Text);
d:=(Edit1.Text);
n:=Form2.ComboBox1.Items.Strings[j];
z:=(Edit2.Text);
z:=FloatToStr((StrToFloat(z))/48);
Query1.Close;
Query1.ParamByName('i').AsString:=i;
Query1.ParamByName('d').AsString:=d;
Query1.ParamByName('n').AsString:=n;
Query1.ParamByName('z').AsString:=z;
Query1.ExecSQL;
end;
Автор сообщения, почитай правила раздела и найди хоть одно отличие в своём посте до моей правки и после (кроме этой записи).
 

pyJIoH

Ословед
Может знает кто-нибудь?
Написал прогу для работы с БД (Oracle), использовал механизм BDE, можно ли её использовать не устанавливая Delphi (BDE).
BDE устаревшая и ненадежная система. Если ее используешь, тебе нужно устанавливать BDE на каждый компьютер, со своей программой, ставивиться она отдельно от delphi.
Лучше поищи в инете бесплатные компоненты прямого доступа к oracle.

И второй вопрос переделал эту прогу: заменил компоненты на ADO при работе выдаёт странные ошибки.
Вот код цикла который под BDE работает а в ADO нет
(пишет неправильное число)
Что и где конкретно пишет? Не в вольной интерпретации.
 

cz

Ословед
задача: известно имя компьютера в сети, нуна определить ег0 ip
помогите ламеру ушастому ))))
 
S

Serg153

Подскажите как сжать информацию в строковой переменной.... типа zlibом... или ещё как...
можно с примером - в одной переменной (500-1000) символов - в другую записывается сжатая инфа....
 

cz

Ословед
задача: известно имя компьютера в сети, нуна определить ег0 ip
помогите ламеру ушастому ))))
во как нада это делать :)
Код:
function HostToIP(Name: string; var Ip: string): Boolean; 
var 
wsdata : TWSAData;
hostName : array [0..255] of char;
hostEnt : PHostEnt;
addr : PChar; 
begin 
WSAStartup ($0101, wsdata); 
 try
   gethostname (hostName, sizeof (hostName));
   StrPCopy(hostName, Name);
   hostEnt := gethostbyname (hostName);
    if Assigned (hostEnt) then
      if Assigned (hostEnt^.h_addr_list) then
        begin
         addr := hostEnt^.h_addr_list^;
         if Assigned (addr) then
            begin
             IP := Format ('%d.%d.%d.%d', [byte (addr [0]),
             byte (addr [1]), byte (addr [2]), byte (addr [3])]);
             Result := True;
            end
         else
           Result := False;
        end
      else
       Result := False
     else
      begin
        Result := False;
      end;
  finally
 WSACleanup;
end 
end;
 
B

Boss Artem

нупский вопрос - имееца 2 файла excel, один представляет собой некую сводную таблицу, а второй - ежедневный отчет. Как средствами делфи можно автоматизировать добавление инфы из отчета в конец сводного файла (т.е. начиная с первой пустой строки). Весь день парюсь чет не получаеца никак...=(( DW особо не помог...
 

pyJIoH

Ословед
нупский вопрос - имееца 2 файла excel, один представляет собой некую сводную таблицу, а второй - ежедневный отчет. Как средствами делфи можно автоматизировать добавление инфы из отчета в конец сводного файла (т.е. начиная с первой пустой строки). Весь день парюсь чет не получаеца никак...=(( DW особо не помог...
Как делал? чего конкретно не получается?
В интернете эта трабла описана много раз.
Вот хороший faq:
http://www.sql.ru/faq/faq_topic.aspx?fid=310

Вкраце накидаю алгоритм:
Работай с excel'ем через ole, TExcelApplication.
Открываешь файл откуда берутся данные
ExcelApplication1.Workbooks.Open(...)
берешь оттуда данные ячеек
_WorkSheet(ExcelApplication1.Workbooks[0].Worksheets[0]).Cells
Коннектишься ко второму файлу, смотришь он заканчивается
ExcelApplication1.ActiveCell.Row
ExcelApplication1.ActiveCell.Column
и перекидываешь данные

P.S.
http://www.google.com/search?hs=8b7&hl=ru&client=opera&rls=ru&q=delphi+и+excel&btnG=Поиск&lr=
 
вот такая проблема, открываются так только текстовые файлы и немагу понять в чем причина:

Код:
procedure TForm1.ToolButton1Click(Sender: TObject);
var
    b:byte;
    i:integer;
    temp:string;
    F:file of byte;
    LenghtCode:Integer;
   begin
if OpenDialog1.Execute then
AssignFile(F, OpenDialog1.FileName);
Reset(F);
LenghtCode:=0;
  while not(eof(F)) do begin
    read(F,b);

    temp:='';
      for i:=1 to 8 do begin
         if (b=0) and (i<>1) then break;
         temp:=temp+inttostr(b and 1);
         b:=b shr 1;
      end;
    temp:=ReverseString(temp);
    bin_code[LenghtCode]:=temp;
    LenghtCode:=LenghtCode+1;
  end;
CloseFile(F);
for i:=0 to LenghtCode-1 do memo1.Lines.Add(Bin_code[i]);

end;

При открытии др. файлов возникает либо ошибка I/O 32 либо просто прога вылетает.
 
E

explorer

Помимо этого партака есть еще один... Если ты в диалоговом окне нажмешь "Отмена", то вылетит ошибка, т.к. попытаешься открыть файл неинициализированный переменной F
 

Bob

Ословед
2 Nex

Это Eof(F) тебе гадит. Конец файла определяй по его размеру.
 
T

tcp

y0 EveryBody :D

как в делфе скины рюсовать для приложения?
 
Сверху