IMHO.WS

IMHO.WS (https://www.imho.ws/index.php)
-   Программирование (https://www.imho.ws/forumdisplay.php?f=40)
-   -   Delphi (помогите разобраться) (https://www.imho.ws/showthread.php?t=58509)

steelik 12.05.2004 17:32

Delphi (помогите разобраться)
 
Создаю событие OnMouseDown, создаю переменную Btn типа TButton . В ответ получаю Undeclared identifier: 'TButton'

Код:

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
Btn : TButton;
begin

end;

В чём дело? Delphi 6.

eXtreeme 12.05.2004 17:41

Должно работать... у меня работает..
TButton находиться в модуле StdCtrls. Он у тебя в uses задекларирован?

someone312002 13.05.2004 09:25

создал пустой проект, на свойствах формы попытался сделать анаологичное вышеописанному, ктрл + ф9 - ошибка...
потом, кинул на форму кнопку, снова откомпилировал - ошибки нет...
так что проверяй юзес...

steelik 13.05.2004 17:32

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

Код:

TMyClass1 = class
procedure Show;
procedure Hide;
procedure MyProc(IsShow : Boolean); virtual;
end;

TMyClass2 = class(TMyClass1)
procedure MyProc(IsShow : Boolean); override;
end;

procedure TMyClass1.Show;
begin
MyProc(True);
end;

procedure TMyClass1.Hide;
begin
MyProc(False);
end;

Ошибка [Error] Project1.dpr(17): Unsatisfied forward or external declaration: 'TMyClass2.MyProc'

steelik 15.05.2004 16:00

Если мне необходимо скопировать в переменную типа string содержимое текстового файла. Как это сделать?

f00rd 15.05.2004 23:38

steelik

Либо в TStringList загрузить (LoadFromFile) и после параметр Text взять, либо:

Код:

var
 f:System.Text;
 s,buf:string;
begin
 AssingFile(f,'file.txt');
 Reset(F);
 s:='';
 while not eof(f) do
  begin
  readln(f,buf);
  s:=s+buf;
  end;
end;

в s - текст....

/7y3uK 16.05.2004 03:20

расшифровываю и упрощаю понимание :):
var
f:TStringList; //Переменная типа объект TStringList.
begin
f:= TStringList.Create();
f.LoadFromFile(‘c:\filename.txt’);// Загружаю текстовый файл
f.Strings[0]; // Здесь находиться первая строчка файла
f.Strings[1]; // Здесь находиться вторая строчка файла
//и т.д.
f.Free; //не забываем чистьть за собой память
end;

f00rd 16.05.2004 16:52

/7y3uK

ну, практически... в f.Text весь текст находится, и не надо перебирать все строки...

/7y3uK 16.05.2004 20:11

2 f00rd
Впринципе если в тексте нужно что-то искать, то по f.Text искать действительно быстрее. Но также возможна ситуация - допустим, каждая строка - фамилия. В случае TStringList достаточно читать по нескольку символов из начала каждой строки, а при нахождении сразу же по индексу вытаскивать всю строку.

f00rd 17.05.2004 15:58

/7y3uK
Заметь:
Цитата:

скопировать в переменную типа string содержимое текстового файла.
всё, фвать флудить :)

steelik 19.05.2004 09:34

Пишу следующую, так сказать утилитку.
Загружаю текстовый файл, вот допустим его содержимое:

Код:

321948
953295
531295
359895

Необходимо, чтобы файл открывался, редактировался следующим образом:

Код:

example;321948;example;
example;953295;example;
example;531295;example;
example;359895;example;

Возможно, кто-то предложет более разумное решение:

Код:

var
st : TStringList;
..
st := TStringList.Create;
if OpenDialog1.Execute then
st.LoadFromFile(OpenDialog1.FileName);
astring := Format('%s%s%s',['General;',st.[i],';name;']);

ЗЫ: Как узнать, сколько строк находится в st ?

someone312002 19.05.2004 11:05

count тебе в этом поможет...

steelik 19.05.2004 18:58

Спасибо!
Как сделать в ToolBar-е кнопку не активной, до какого-то определённого действия.

/7y3uK 19.05.2004 20:44

Алё... в делфе почти у всех компонентов есть свойство Enable... например: Button1.Enable:=False - выключить, True - включить... Ты конкретнее рассказывай, зачем тебе кнопку выключать и когда включать, тебе народ расскажет как можно хитрее все сделать, раз ты дельфю только начал рюхать... :)

someone312002 20.05.2004 09:22

Располагай кнопки на тулбарах в соответствии с их назначением и активиру/деактивируй не по-кнопочно, а тулбар целиком. Так будет проще...

steelik 20.05.2004 11:46

Всем респект!
Ещё вопрос! Как отличить цифру от текстового символа.
Например, в переменной st[0] у меня находится вот такая строчка: 610177 , как определить, что в этой сроке записано? Цифра али текст?
Задача состоит в том, чтобы проверять отрываемый файл, если в нём имеется текст, то он автоматом закрывается, т.к. для работы нам необходим файл с целочисленными с строками не более 10 символов в длину.

f00rd 20.05.2004 15:23

steelik

Код:

var
 i:integer;
 s:string;
begin
try
 i:=StrToInt(s);
except
 exit;
 //s- не число
end;

или

Код:

var
 i:integer;
 s:string;
begin
 i:=StrToIntDef(s,-12345);
 if i=-12345 then exit;//s- не число
end;


steelik 20.05.2004 17:04

Не понимаю, почему билды такие огромные получаются, пару диалоговых окон с примитивными процедурами, всего 600кб. Капался в опциях проекта, нашёл Build with runtime packages, после того, как поставил галку в этом чекбоксе, билд стал весить 70кб, однако проект библиотеки требует, которые весят по 700кб 8)))) Вот значит, почему все так не любят дельфи?

steelik 20.05.2004 18:40

Значит есть у меня переменная st типа TStringList, мне необходимо изменить каждую строчку следующим способом, формат такой [i]str1+st+str2, всё это можно было бы записать следующим образом, что я вообщем-то и сделал
Код:

for i := 0 to st.count-1
begin
st[ i ] := Format('%s%s%s',[str1,st[ i ],str2])
end

, пользователю предоставляется возможность редактировать переменные str1, str2, то есть он может несколько раз переписать значения этих переменных.
Всё работает, но, когда я ввожу следующие значения, хочу например изменить значения str1, str2, то получается такого типа строчка:
str1 str1 st[i] str2 str2

То есть, к чему я это всё, функция Format не изменяет мне значения str1,str2, а просто их добавляет в строку - постоянно, может быть посоветуете что-нибудь? Нехотелось бы мне при каждом разе заполнять переменную st (у меня это происходит при открытии файла) исходной информацией.

/7y3uK 20.05.2004 20:00

Во-первых я Делфи люблю и уважаю, т.к. я ей балуюсь уже лет 5, но склоняюсь все больше и больше к любым С, т.к. там есть много чего полезного, чем дельфя обделена... а весят они так немеряно, т.к. дельфя за тебя делает всю рутинную работу: ресурсы делает, процедуру окна создает и много чего другого разного, что впринципе можно было бы сделать ручками, но так получается быстрее... на голом асме пустое окно с кнопкой без кода у меня весит 3 КБ, но выглядит все мрачно и не красиво :)
По поводу форматирования: самое простое и не изящное - это сделать еще один StringList такого же сайза как первый, например st2, и делать в цикле вот так st2[i]:=str1+st[i]+str2;

steelik 20.05.2004 21:22

:rolleyes: не получается ничего скопировать в st2... даже просто если делаю вот так:
Код:

var
str1 : TStringList;
begin
str1 := TStringList.Create;
str1[0] := 'test';

Вызывает ошибку.

ЕЖ 21.05.2004 14:24

Цитата:

Сообщение от steelik
:rolleyes: не получается ничего скопировать в st2... даже просто если делаю вот так:
Код:

var
str1 : TStringList;
begin
str1 := TStringList.Create;
str1[0] := 'test';

Вызывает ошибку.

У TStringList есть метод Add...

Hrudnel 21.05.2004 21:29

Цитата:

Сообщение от steelik
:rolleyes: не получается ничего скопировать в st2... даже просто если делаю вот так:
Код:

var
str1 : TStringList;
begin
str1 := TStringList.Create;
str1[0] := 'test';

Вызывает ошибку.

Дело в том что TStringsList это не массив, а список. Поэтому элемент сначала нужно добавить и только после этого к нему можно обращаться по индексу.
Поэтому как правильно сказали сначала TStringList.Add('test');

steelik 22.05.2004 17:55

Не понимаю, как работает таймер. Покажите, пожалуйста, на примере его работу. Например, мне нужно выполнять каждые 5 минут процедуру SendMail.

Hrudnel 22.05.2004 19:06

Код:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls;

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    procedure Timer1Timer(Sender: TObject);
    procedure MyProc;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    count: integer;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Inc(count);

  if Timer1.Enabled then
    Timer1.Enabled := FALSE;

  MyProc;

  Timer1.Enabled := TRUE;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  count:=0;
end;

procedure TForm1.MyProc;
begin
  showmessage(IntToStr(count));
end;

end.

размести на форме компонент TTimer, задай интервал времени в свойстве TTimer.Interval (в милисекундах);

код выводит количество вызовов метода MyProc

f00rd 22.05.2004 20:08

Объясняю работу TTimer'a : он через каждые Interval милисекунд вызывает процедуру OnTimer (Events). Отрубить его можно сделав его свойство Enabled равным False, врубить - True

steelik 22.05.2004 21:47

Подскажите, где, какие модули, библиотеки нужны, для работы с DirectX в D6 ?

f00rd 22.05.2004 22:07

посмотри на hxxp://delphimaster.ru/

steelik 23.05.2004 19:51

А чем отличается Vcl от Clx ? То, что Vcl видимые? Clx нет?

steelik 23.05.2004 20:03

Ещё вопросик, что называют шелухой?

Hrudnel 23.05.2004 21:53

Цитата:

Сообщение от steelik
А чем отличается Vcl от Clx ? То, что Vcl видимые? Clx нет?

Нет, CLX бывают и визуальные, и нет. Отличие от VCL в том, что обладают межплатоформенной совместимостью, т.е. будут работать и под Win32 (Delphi) и под *nix (Kylix)

Библиотека CLX:

VisualCLX — основные кроссплатформенные компоненты

DataCLX — компоненты, которые позволяют работать с базами данных.

NetCLX — Содержит Internet компоненты, в частности набор компонентов Indy

steelik 23.05.2004 22:33

Есть такой компонент NMSMTP, например, когда он не находит хост - Host, вываливается ShowMessage с ошибкой, о том, мол что не найдет хост, это всё хорошо, но как отрубить это предупреждение? у nmsmtp есть такое событие и я хочу выводить всё это в Memo...

steelik 24.05.2004 19:28

Неужели никто не знает как от этого избавиться?
Где найти DelphiX?

steelik 25.05.2004 22:56

Какие библиотеки нужны для работы с базой данных Access ?

steelik 25.05.2004 23:12

В какой книги вообще можно почиттать про разработку БД на delphi? в частности под access

steelik 25.05.2004 23:50

******************** прошу прощение, вышла грубейшая ошибка!

Hrudnel 26.05.2004 07:24

Цитата:

Сообщение от steelik
Какие библиотеки нужны для работы с базой данных Access ?

в Delphi уже все есть, это компоненты на закладке ADO.
подробнее о работе c ADO см.
_http://www.delphikingdom.ru
_http://delphi.mastak.ru

steelik 26.05.2004 21:39

Мне нужно написать программу-оболочку (для тестирования обучающихся) и организовать её работу с базой данных типа MS Access. В базе данных будут храниться вопросы и ответы на них. В Delphi с базами данных не работал, но имею представление, как оно должно работать. Возможно, есть уже какие-нибудь готовые алгоритмы или книги по работе в Delphi с базами данных.

Hrudnel 26.05.2004 22:37

У меня валяется книжка "Delphi 5 - руководство разработчика БД", Шумаков П.В. Фаронов В.В.,
знакомство с БД я начинал с нее и она тогда сильно понравилась. Сейчас вроде где то виде переизданное нечто подобное, но уже для Delphi 6, может есть и для 7.
Так что могу посоветовать поискать

bloodman 26.05.2004 23:04

Цитата:

steelik
Где найти DelphiX?
_http://delphigfx.mastak.ru/links_gphics.htm


Часовой пояс GMT +4, время: 04:16.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.