Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Не определяет функцию  [new]
elimpion
Member

Откуда:
Сообщений: 153
не определяет функцию, функция прописана в том же файле, что не так?
                              if (p is TCheckedComboBox) then begin
                                if (p as TCheckedComboBox).EmptyValue <> '' then
                                  FLD.GetCheckComboBoxValue([Mask+Copy(p.Name,3,Length(p.Name))],(p as TCheckedComboBox).EmptyValue);
                            end;


[Error]  Undeclared identifier: 'GetCheckComboBoxValue'

uses
...
  function GetCheckComboBoxValue(ctrl: TCheckedComboBox): string;
...
implementation
5 июл 18, 13:02    [21545734]     Ответить | Цитировать Сообщить модератору
 Re: Не определяет функцию  [new]
elimpion
Member

Откуда:
Сообщений: 153
procedure FillFldByCompontents(aForm: TForm; FLD: TVars; Mask:string);
var
  i,j : Integer;
  p : TComponent;

begin
  with aForm do
    for i := 0 to ComponentCount-1 do begin
      p := Components[i];
      if (p is TCheckedComboBox) then begin
      if (p as TCheckedComboBox).EmptyValue <> '' then
      FLD.GetCheckComboBoxValue([Mask+Copy(p.Name,3,Length(p.Name))],(p as TCheckedComboBox).EmptyValue);
      end;
    end;
end;
5 июл 18, 13:04    [21545740]     Ответить | Цитировать Сообщить модератору
 Re: Не определяет функцию  [new]
goldmi45
Member

Откуда:
Сообщений: 1053
elimpion,

GetCheckComboBoxValue описана в модуле или у класса?
FLD.GetCheckComboBoxValue // Что за класс имеет переменная FLD? И есть ли у неё public метод GetCheckComboBoxValue
5 июл 18, 13:07    [21545751]     Ответить | Цитировать Сообщить модератору
 Re: Не определяет функцию  [new]
elimpion
Member

Откуда:
Сообщений: 153
вот её описание
unit BrsDevInfra_FUtils;

interface
uses
  {$IFDEF UNICODE}
  Variants,
  {$ENDIF}
  API_UFuncApp,
  RxLookup,
  API_uQIService,
  API_UEdAccOrClientTools,
  SYS_UVAR,
  SYS_uStr,
  SYS_UQIntAbstr,
  SYS_uCRC32,
  SYS_uMsg,
  SYSLIB_UQIServ,
  SYS_uSessMan,
  API_FDBPassword,
  CheckCombo,
  EXP_uDlgDBPick,
  Windows, Messages, SysUtils, OraScript, Ora, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, DB, mask, CurrEdit, ToolEdit, ExtCtrls, CheckLst, TB2Item,
  frxVariables,
  BrsApi_Odac,RxDBComb;

  procedure FillFldByCompontents(aForm: TForm; FLD: TVars; Mask:string);
  procedure FillCompontentsByFld(aForm: TForm; FLD: TVars; Mask:string);
  procedure Str2Params(const aStr, aSectName : string; out aParams : TVars);
  function Params2Str(const varsFld : TVars; SectName: string = ''): String;
  procedure SetupStatusModesButton(
                           App : TFuncApp;
                           tbSubModes : TTBSubmenuItem;
                           tbiModeClick : TNotifyEvent;
                           aRef : string);
  function nvl(aValue: string; aDefault: string): string;
  function CheckControl(p: TComponent; isWarning: boolean):boolean;
  procedure SetDefaultComboValues(aForm: TForm;aFormTuneKind:integer;FLD: TVars);
  function GetCheckComboBoxValue(ctrl: TCheckedComboBox): string;

implementation

function CheckControl(p: TComponent; isWarning: boolean):boolean;
5 июл 18, 13:15    [21545793]     Ответить | Цитировать Сообщить модератору
 Re: Не определяет функцию  [new]
elimpion
Member

Откуда:
Сообщений: 153
      FLD.GetCheckComboBoxValue([Mask+Copy(p.Name,3,Length(p.Name))],(p as TCheckedComboBox).EmptyValue);

если удалить FLD то функция определяется
5 июл 18, 13:16    [21545799]     Ответить | Цитировать Сообщить модератору
 Re: Не определяет функцию  [new]
DarkMaster
Member

Откуда: Donetsk,Ukraine
Сообщений: 6081
elimpion
      FLD.GetCheckComboBoxValue([Mask+Copy(p.Name,3,Length(p.Name))],(p as TCheckedComboBox).EmptyValue);

если удалить FLD то функция определяется


Логично, правда?

MyUNIT.FunctionName() - берет функцию из конкретного модуля.
MyCLASS.FunctionName() - берет функцию/метод из класса/обьекта/record
FunctionName() - берет функцию из текущего модуля, если она есть, или из модулей, которые в Uses.
5 июл 18, 13:21    [21545836]     Ответить | Цитировать Сообщить модератору
 Re: Не определяет функцию  [new]
elimpion
Member

Откуда:
Сообщений: 153
DarkMaster,
так функция в uses объявлена, но она не определяется
5 июл 18, 13:28    [21545877]     Ответить | Цитировать Сообщить модератору
 Re: Не определяет функцию  [new]
DarkMaster
Member

Откуда: Donetsk,Ukraine
Сообщений: 6081
elimpion,

Ну а зачем ты вместо того, чтобы использовать функцию, которая у тебя в модуле, пытаешься использовать функцию, которая, как ты думаешь, принадлежит какому-то классу?
5 июл 18, 13:31    [21545895]     Ответить | Цитировать Сообщить модератору
 Re: Не определяет функцию  [new]
elimpion
Member

Откуда:
Сообщений: 153
DarkMaster,

так я и хочу использовать функцию которая в модуле прописана, класс же даже нигде не объявлен
5 июл 18, 13:39    [21545919]     Ответить | Цитировать Сообщить модератору
 Re: Не определяет функцию  [new]
DarkMaster
Member

Откуда: Donetsk,Ukraine
Сообщений: 6081
elimpion,

FLD - у тебя TVars. Твой GetCheckBlaBla() принимает TCheckedComboBox. Ты же пытается вызывать у TVars метод GetCheck...., которого нет (наверное), и запихать в этот метод что-то вообще несуразное.

Наиболее логичным будет что-то вроде:
    if (p is TCheckedComboBox) then
         begin
            GetCheckComboBoxValue( p as TCheckedComboBox );
         end;

А твои попытки впихнуть невпихуемое - от лукавого в общем...
5 июл 18, 13:45    [21545945]     Ответить | Цитировать Сообщить модератору
 Re: Не определяет функцию  [new]
goldmi45
Member

Откуда:
Сообщений: 1053
elimpion
DarkMaster,
так функция в uses объявлена, но она не определяется

Функция не объявляется в uses. В Uses объявляются модули, которые использует данный модуль.
У модуля имеется две секции: интерфейсная часть (interface) и реализация (implementation).
Функции могут не быть описаны в интерфейсе, но иметь реализацию. Если функция описывается в интерфейсе модуля, то к этой функции можно обратиться из другого модуля, предварительно добавив этот модуль в список используемых (uses).

ЗЫ: С кашей в голове не удастся научиться программированию.
5 июл 18, 13:46    [21545955]     Ответить | Цитировать Сообщить модератору
 Re: Не определяет функцию  [new]
makhaon
Member

Откуда: A galaxy far far away
Сообщений: 2889
elimpion,

хочешь использовать функцию - используй, зачем ты FLD добавляешь? у класса TVars нет функции GetCheckComboBoxValue, даже компилятор в этом разобрался :)
5 июл 18, 14:33    [21546160]     Ответить | Цитировать Сообщить модератору
 Re: Не определяет функцию  [new]
elimpion
Member

Откуда:
Сообщений: 153
DarkMaster,

вот смотрите, этот код из той же процедуры что и TCheckedComboBox,
                            if (p is TComboBox) then begin
                               if (p as TComboBox).Text <> '' then
                                 FLD.PutVal([Mask+Copy(p.Name,3,Length(p.Name))],(p as TComboBox).Text);
                            end

PutVal объявлен в модуле SYS_UVar, и никаких ошибок при работе не возникает.
Я побывал объявить GetCheckComboBoxValue там же. Но у меня возникла ошибка.
5 июл 18, 14:41    [21546199]     Ответить | Цитировать Сообщить модератору
 Re: Не определяет функцию  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 3613
elimpion
если удалить FLD то функция определяется

Мне кажется, я понял, что ты хочешь.

замени
FLD.GetCheckComboBoxValue
на
BrsDevInfra_FUtils.GetCheckComboBoxValue
5 июл 18, 14:43    [21546211]     Ответить | Цитировать Сообщить модератору
 Re: Не определяет функцию  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 3613
YuRock
Мне кажется, я понял, что ты хочешь

Ааа, нет

elimpion
PutVal объявлен в модуле SYS_UVar, и никаких ошибок при работе не возникает

PutVal есть у класса TVars, вот почему тут нет ошибок.
5 июл 18, 14:46    [21546221]     Ответить | Цитировать Сообщить модератору
 Re: Не определяет функцию  [new]
goldmi45
Member

Откуда:
Сообщений: 1053
elimpion
DarkMaster,
                            if (p is TComboBox) then begin
                               if (p as TComboBox).Text <> '' then
                                 FLD.PutVal([Mask+Copy(p.Name,3,Length(p.Name))],(p as TComboBox).Text);
                            end

PutVal объявлен в модуле SYS_UVar, и никаких ошибок при работе не возникает.
Я побывал объявить GetCheckComboBoxValue там же. Но у меня возникла ошибка.

Может, PutVal и объявлен в модуле SYS_UVar, но используется метод у переменной FLD: TVars.

У класса TVars есть метод PutVal?
5 июл 18, 14:46    [21546223]     Ответить | Цитировать Сообщить модератору
 Re: Не определяет функцию  [new]
DarkMaster
Member

Откуда: Donetsk,Ukraine
Сообщений: 6081
elimpion
DarkMaster,

вот смотрите, этот код из той же процедуры что и TCheckedComboBox,
                            if (p is TComboBox) then begin
                               if (p as TComboBox).Text <> '' then
                                 FLD.PutVal([Mask+Copy(p.Name,3,Length(p.Name))],(p as TComboBox).Text);
                            end

PutVal объявлен в модуле SYS_UVar, и никаких ошибок при работе не возникает.
Я побывал объявить GetCheckComboBoxValue там же. Но у меня возникла ошибка.


Ты что-то такое хочешь получить?

            
 var StrComboValue:string;
 // .... 
 if (p is TCheckComboBox) then begin
    begin
        StrComboValue:=GetCheckComboBoxValue(p as TCheckComboBox);
        if  StrComboValue<> '' then   // 
            FLD.PutVal([Mask+Copy(p.Name,3,Length(p.Name))], StrComboValue);
    end


Бяда-бяда с безумным копипастом :(
5 июл 18, 14:46    [21546224]     Ответить | Цитировать Сообщить модератору
 Re: Не определяет функцию  [new]
elimpion
Member

Откуда:
Сообщений: 153
goldmi45
elimpion
DarkMaster,
                            if (p is TComboBox) then begin
                               if (p as TComboBox).Text <> '' then
                                 FLD.PutVal([Mask+Copy(p.Name,3,Length(p.Name))],(p as TComboBox).Text);
                            end

PutVal объявлен в модуле SYS_UVar, и никаких ошибок при работе не возникает.
Я побывал объявить GetCheckComboBoxValue там же. Но у меня возникла ошибка.

Может, PutVal и объявлен в модуле SYS_UVar, но используется метод у переменной FLD: TVars.

У класса TVars есть метод PutVal?

есть.
5 июл 18, 14:50    [21546237]     Ответить | Цитировать Сообщить модератору
 Re: Не определяет функцию  [new]
elimpion
Member

Откуда:
Сообщений: 153
DarkMaster,

достает данные из fld и отображает из на форме
5 июл 18, 14:50    [21546242]     Ответить | Цитировать Сообщить модератору
 Re: Не определяет функцию  [new]
DarkMaster
Member

Откуда: Donetsk,Ukraine
Сообщений: 6081
elimpion
DarkMaster,

достает данные из fld и отображает из на форме


Как достает, куда достает? Давай попробуем на пальцах:
   // засунем в FLD: TVars  все значения, собранные с формы
   for i:=0 to Pred(AForm.ComponentCount) do
        begin
            //........
           if (Components[i] is .....) then
               begin
                   StringForPut:= GetControlXXXXValue (Components[i] as .....);
                   FLD.PutVal( _Name_, StringForPut);
               end;
            //.... 
        end;

   // теперь нам нужно где-то отобразить то, что мы насобирали
   for i:=0 to Pred(FLD.Count) do
        Memo.Lines.Add(FLD.GetValue(_NAME_));

Так?
5 июл 18, 14:59    [21546285]     Ответить | Цитировать Сообщить модератору
 Re: Не определяет функцию  [new]
elimpion
Member

Откуда:
Сообщений: 153
DarkMaster,

procedure TfrmEditDevice.InitCheckComboBox(App: TFuncApp; ctrl: TCheckedComboBox; aSql: string; aStr: string; const ParamArr: array of const);
var s: string;
    i: integer;
    bool: boolean;
    que: TOraQuery;
begin
  que := GetQueryBySQL(aSql, ParamArr);
  try
    with ctrl do begin
      Clear;
      with que do begin
        First;
        while not Eof do begin
          s := '';
          if (que.FieldCount = 6) then
            if Fields[2].asString <> '' then
              s := '['+Fields[2].asString+'] ';
          Items.Add(Fields[0].asString+' - '+s+Fields[1].asString);
          Next;
        end;
      end;
      for i := 1 to Items.Count do begin
        s := Trim(GetWord(1,Items[i-1],['-']));
        bool := IsWordPresent(s,aStr,[',']);
        Checked[i-1] := bool;
      end;
    end;
  finally
    que.Close;
    App.QI.FreeQuery(que);
  end;
end;
...
InitCheckComboBox(aApp, ccbDEV_PAYSYSTEM, shDEV_PAYSYSTEM.SQL.Text, GetCheckComboBoxValue(ccbDEV_PAYSYSTEM), []);
...

для записи этот использую, а чтобы отобразить тот что выше
5 июл 18, 15:19    [21546356]     Ответить | Цитировать Сообщить модератору
 Re: Не определяет функцию  [new]
DarkMaster
Member

Откуда: Donetsk,Ukraine
Сообщений: 6081
elimpion,

Все, мой хрустальный шар запотел, а телепатометр - вообще взорвался от перегрева... Я окончательно перестал понимать, что и для чего используешь и что хочешь в конце-концов получить.
5 июл 18, 15:32    [21546390]     Ответить | Цитировать Сообщить модератору
 Re: Не определяет функцию  [new]
asutp2
Member

Откуда: Тюмень
Сообщений: 330
elimpion
DarkMaster,
так функция в uses объявлена, но она не определяется
Мммм, что то новое
5 июл 18, 15:40    [21546424]     Ответить | Цитировать Сообщить модератору
 Re: Не определяет функцию  [new]
goldmi45
Member

Откуда:
Сообщений: 1053
asutp2
ИдиУчиМатЧасть
...

Следующий вопрос у ТСа будет, где найти этот модуль :)
5 июл 18, 15:44    [21546447]     Ответить | Цитировать Сообщить модератору
 Re: Не определяет функцию  [new]
elimpion
Member

Откуда:
Сообщений: 153
goldmi45,

                            if (p is TCheckedComboBox) then
                            StrComboValue:=GetCheckComboBoxValue(p as TCheckedComboBox);
                            (p as TCheckedComboBox).EmptyValue := FLD.GetValDef([StrComboValue],'')



при выполнение кода возникла ошибка invalid class typecast, что не так?
5 июл 18, 15:51    [21546475]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Delphi Ответить