Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Delphi |
![]() ![]() |
Топик располагается на нескольких страницах: [1] 2 вперед Ctrl→ все |
elimpion Member Откуда: Сообщений: 200 |
не определяет функцию, функция прописана в том же файле, что не так? 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] Ответить | Цитировать Сообщить модератору |
elimpion Member Откуда: Сообщений: 200 |
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] Ответить | Цитировать Сообщить модератору |
goldmi45 Member Откуда: Сообщений: 1087 |
elimpion, GetCheckComboBoxValue описана в модуле или у класса? FLD.GetCheckComboBoxValue // Что за класс имеет переменная FLD? И есть ли у неё public метод GetCheckComboBoxValue |
5 июл 18, 13:07 [21545751] Ответить | Цитировать Сообщить модератору |
elimpion Member Откуда: Сообщений: 200 |
вот её описание 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] Ответить | Цитировать Сообщить модератору |
elimpion Member Откуда: Сообщений: 200 |
FLD.GetCheckComboBoxValue([Mask+Copy(p.Name,3,Length(p.Name))],(p as TCheckedComboBox).EmptyValue);
если удалить FLD то функция определяется |
5 июл 18, 13:16 [21545799] Ответить | Цитировать Сообщить модератору |
DarkMaster Member Откуда: Donetsk,Ukraine Сообщений: 6153 |
Логично, правда? MyUNIT.FunctionName() - берет функцию из конкретного модуля. MyCLASS.FunctionName() - берет функцию/метод из класса/обьекта/record FunctionName() - берет функцию из текущего модуля, если она есть, или из модулей, которые в Uses. |
||
5 июл 18, 13:21 [21545836] Ответить | Цитировать Сообщить модератору |
elimpion Member Откуда: Сообщений: 200 |
DarkMaster, так функция в uses объявлена, но она не определяется |
5 июл 18, 13:28 [21545877] Ответить | Цитировать Сообщить модератору |
DarkMaster Member Откуда: Donetsk,Ukraine Сообщений: 6153 |
elimpion, Ну а зачем ты вместо того, чтобы использовать функцию, которая у тебя в модуле, пытаешься использовать функцию, которая, как ты думаешь, принадлежит какому-то классу? |
5 июл 18, 13:31 [21545895] Ответить | Цитировать Сообщить модератору |
elimpion Member Откуда: Сообщений: 200 |
DarkMaster, так я и хочу использовать функцию которая в модуле прописана, класс же даже нигде не объявлен |
5 июл 18, 13:39 [21545919] Ответить | Цитировать Сообщить модератору |
DarkMaster Member Откуда: Donetsk,Ukraine Сообщений: 6153 |
elimpion, FLD - у тебя TVars. Твой GetCheckBlaBla() принимает TCheckedComboBox. Ты же пытается вызывать у TVars метод GetCheck...., которого нет (наверное), и запихать в этот метод что-то вообще несуразное. Наиболее логичным будет что-то вроде: if (p is TCheckedComboBox) then begin GetCheckComboBoxValue( p as TCheckedComboBox ); end; А твои попытки впихнуть невпихуемое - от лукавого в общем... |
5 июл 18, 13:45 [21545945] Ответить | Цитировать Сообщить модератору |
goldmi45 Member Откуда: Сообщений: 1087 |
Функция не объявляется в uses. В Uses объявляются модули, которые использует данный модуль. У модуля имеется две секции: интерфейсная часть (interface) и реализация (implementation). Функции могут не быть описаны в интерфейсе, но иметь реализацию. Если функция описывается в интерфейсе модуля, то к этой функции можно обратиться из другого модуля, предварительно добавив этот модуль в список используемых (uses). ЗЫ: С кашей в голове не удастся научиться программированию. |
||
5 июл 18, 13:46 [21545955] Ответить | Цитировать Сообщить модератору |
makhaon Member Откуда: A galaxy far far away Сообщений: 3036 |
elimpion, хочешь использовать функцию - используй, зачем ты FLD добавляешь? у класса TVars нет функции GetCheckComboBoxValue, даже компилятор в этом разобрался :) |
5 июл 18, 14:33 [21546160] Ответить | Цитировать Сообщить модератору |
elimpion Member Откуда: Сообщений: 200 |
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] Ответить | Цитировать Сообщить модератору |
YuRock Member Откуда: Донецк Сообщений: 3760 |
Мне кажется, я понял, что ты хочешь. замени FLD.GetCheckComboBoxValueна BrsDevInfra_FUtils.GetCheckComboBoxValue |
||
5 июл 18, 14:43 [21546211] Ответить | Цитировать Сообщить модератору |
YuRock Member Откуда: Донецк Сообщений: 3760 |
Ааа, нет ![]()
PutVal есть у класса TVars, вот почему тут нет ошибок. |
||||
5 июл 18, 14:46 [21546221] Ответить | Цитировать Сообщить модератору |
goldmi45 Member Откуда: Сообщений: 1087 |
Может, PutVal и объявлен в модуле SYS_UVar, но используется метод у переменной FLD: TVars. У класса TVars есть метод PutVal? |
||
5 июл 18, 14:46 [21546223] Ответить | Цитировать Сообщить модератору |
DarkMaster Member Откуда: Donetsk,Ukraine Сообщений: 6153 |
Ты что-то такое хочешь получить? 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] Ответить | Цитировать Сообщить модератору |
elimpion Member Откуда: Сообщений: 200 |
есть. |
||||
5 июл 18, 14:50 [21546237] Ответить | Цитировать Сообщить модератору |
elimpion Member Откуда: Сообщений: 200 |
DarkMaster, достает данные из fld и отображает из на форме |
5 июл 18, 14:50 [21546242] Ответить | Цитировать Сообщить модератору |
DarkMaster Member Откуда: Donetsk,Ukraine Сообщений: 6153 |
Как достает, куда достает? Давай попробуем на пальцах: // засунем в 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] Ответить | Цитировать Сообщить модератору |
elimpion Member Откуда: Сообщений: 200 |
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] Ответить | Цитировать Сообщить модератору |
DarkMaster Member Откуда: Donetsk,Ukraine Сообщений: 6153 |
elimpion, Все, мой хрустальный шар запотел, а телепатометр - вообще взорвался от перегрева... Я окончательно перестал понимать, что и для чего используешь и что хочешь в конце-концов получить. |
5 июл 18, 15:32 [21546390] Ответить | Цитировать Сообщить модератору |
asutp2 Member Откуда: Тюмень Сообщений: 394 |
|
||
5 июл 18, 15:40 [21546424] Ответить | Цитировать Сообщить модератору |
goldmi45 Member Откуда: Сообщений: 1087 |
Следующий вопрос у ТСа будет, где найти этот модуль :) |
||||
5 июл 18, 15:44 [21546447] Ответить | Цитировать Сообщить модератору |
elimpion Member Откуда: Сообщений: 200 |
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 | ![]() |