Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.06.06;
Скачать: [xml.tar.bz2];

Вниз

Как удобнее оформит передачу массива записей в функцию   Найти похожие ветки 

 
ANB ©   (2005-05-19 10:37) [0]

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


 
Думкин ©   (2005-05-19 10:38) [1]

передавать открытый массив. Или динамический.
А что передавать хотим и как? Критерий простоты?


 
Ega23 ©   (2005-05-19 10:41) [2]

TList ?


 
ANB ©   (2005-05-19 10:47) [3]


> Думкин ©   (19.05.05 10:38) [1]
- желательно иметь возможность не создавать лишних переменных для того, чтобы передать список (например, описаний кнопок) в функцию. TList не пойдет. Его придется креатить и потом удалять. Некрасиво. В принципе, дурью маюсь. Решил в свой проект свой универсальный диалог запихать. Просьба не возмущаться, зачем мне это нужно. Повыеживаться решил, пока время есть. А то у апишных и делфовых, чуть чуть, да чего нибудь не хватает.


 
Думкин ©   (2005-05-19 10:49) [4]

> [3] ANB ©   (19.05.05 10:47)

Я не буду возмущаться. :)
Подробнее бы. Я считаю, что подробное расписывание проблемы первый и единственно первый шаг к решению задачи.


 
Ega23 ©   (2005-05-19 10:53) [5]

Его придется креатить и потом удалять. Некрасиво.

????

А GetMem c FreeMem - красиво?
А ДИНАМИЧЕСКИЙ список ты по-другому не передашь


 
ANB ©   (2005-05-19 10:55) [6]

Хочу нарисовать функцию, которая примет слудующие параметры :
Заголовок, текст, номер иконки, список кнопок.
Затем, по этим параметрам, она должна создать модальное окно и показать его.
Как все это делать - я знаю. Хочу функцию определить попроще, чтобы можно ее было за один оператор вызвать. Есть вариант, как у стандартного диалога - через set, тогда список кнопок можно будет задать просто [mbYes, mbNo], но тогда это список будет фиксированным и если кнопки не хватит, то придется опять править модуль. Описание кнопки можно задать записью иконка, текст. Список иконок можно фиксировать.


 
basken   (2005-05-19 10:55) [7]

procedure YouMethod(AYouArrayRecord: array of TYouArrayRecord);


 
ANB ©   (2005-05-19 10:55) [8]


> А GetMem c FreeMem - красиво?
- фи, а SetLength тогда зачем ?


 
ANB ©   (2005-05-19 10:57) [9]


> basken   (19.05.05 10:55) [7]
- я так и сделал. Но в этом варианте приходится создавать переменную типа array of TYouArrayRecord, инициализировать ее, и только потом передавать. У меня есть пример определиния статического массива записей прямо в коде, но у меня не получается запихать его, как параметр.


 
Ega23 ©   (2005-05-19 10:58) [10]

- фи, а SetLength тогда зачем ?

Вот и я о том - зачем?
Ты дескриптор формы (Заголовок, текст, номер иконки, список кнопок) можешь в класс запихнуть. Работать будет гораздо проще.


 
Думкин ©   (2005-05-19 10:58) [11]

>  [8] ANB ©   (19.05.05 10:55)

Опиши передаваемую структуру. Подробно и аккуратно - там и ответ.


 
Ega23 ©   (2005-05-19 11:00) [12]

У меня есть пример определиния статического массива записей прямо в коде, но у меня не получается запихать его, как параметр.

type
TMyArray = array of TYouArrayRecord;

procedure YouMethod(AYouArrayRecord: TMyArray);

?


 
Danilka ©   (2005-05-19 11:01) [13]

Что есть "список кнопок"? Просто, названия кнопок? Если да, то, как вариант, передавай одной строкой, используя какой-нибудь символ-разделитель.

А вообще - все это изврат. :)


 
ANB ©   (2005-05-19 11:01) [14]


> Ega23 ©   (19.05.05 10:58) [10]
- не кошерно. Придется объект креатить, настраивать, потом запускать. Много кода. И можно забыть его удалить. Тогда уж проще по стандартному пути пойти, через set.


 
ANB ©   (2005-05-19 11:03) [15]


> А вообще - все это изврат. :)
- а кто бы спорил :))) Но, согласись, когда нужно быстро вывести мессагу пользователю, то обычно ShowMessage юзаем. Потому что писать проще.


 
Ega23 ©   (2005-05-19 11:04) [16]

2 ANB ©   (19.05.05 11:01) [14]
- не кошерно. Придется объект креатить, настраивать, потом запускать. Много кода. И можно забыть его удалить. Тогда уж проще по стандартному пути пойти, через set.

Было бы предложено...


 
Ega23 ©   (2005-05-19 11:05) [17]

Но, согласись, когда нужно быстро вывести мессагу пользователю, то обычно ShowMessage юзаем.

Только для Debug Information. Для юзера стандартный MessageBox существует.


 
Думкин ©   (2005-05-19 11:05) [18]

> [14] ANB ©   (19.05.05 11:01)

Стоп. Ты про открытые таки прочитал? Или ты их с динамическими путаешь?


 
Думкин ©   (2005-05-19 11:06) [19]

Или как в открытых передавать сложные структуры вопрос теперь?


 
Ega23 ©   (2005-05-19 11:09) [20]

2 Думкин ©   (19.05.05 11:06) [19]
Или как в открытых передавать сложные структуры вопрос теперь?

Ты прям как Мастер Йода выражаешься!  :о)


 
Думкин ©   (2005-05-19 11:11) [21]

> [20] Ega23 ©   (19.05.05 11:09)

#ifdef offtop
В субботу идти намерение с сыном имеем и билеты уж взяты
#endif


 
Danilka ©   (2005-05-19 11:12) [22]

[20] Ega23 ©   (19.05.05 11:09)
> Мастер Йода

Йод, это шото типа зеленки, им болячки мажут, а хто такой мастер йоду - это мастер по замазыванию болячек? :)


 
Ega23 ©   (2005-05-19 11:13) [23]

В субботу идти намерение с сыном имеем и билеты уж взяты

Класс!!!  :-))))))))


 
ANB ©   (2005-05-19 11:14) [24]

RDlgButton = record
IconInd : Integer;
Caption : String;
end;

function ShowDialog (sTitle, sMessage : String; const Buttons : array of RDlgButton) : Integer;

procedure TForm2.Button1Click(Sender: TObject);
const Buttons : array [1..1] of RDlgButton = ((IconInd : 0; Caption : "OK"));
begin
ShowDialog("Заголовок","Мессага", Buttons);
end;

Вот так компиляется. Еще бы сделать без const, и было бы счастье.
Типа :
ShowDialog("Заголовок","Мессага", ((IconInd : 0; Caption : "OK")));


 
Ega23 ©   (2005-05-19 11:17) [25]

Ну тогда ещё нужно ссылку на метод передавать, который кнопке будешь присваивать.


 
Ega23 ©   (2005-05-19 11:18) [26]

function ShowTexLogFile(const aFileName:String):Boolean;
           procedure BtnClearClick(Sender:TObject);
           var
            i:Integer;
            _memo:TMemo;
           begin
            if (Sender is TForm) then
             begin
              With TForm(Sender) do
               begin
                for i:=0 to ComponentCount-1 do
                 if (Components[i] is TMemo) then
                  if UpperCase(TMemo(Components[i]).Name)=UpperCase("memSQLLogMonitor") then
                   begin
                    _memo:=TMemo(Components[i]);
                    _memo.Lines.Clear;
                    _memo.Lines.Add(" ");
                    _memo.Lines.SaveToFile(_memo.Hint);
                    Break;
                   end;
               end;//With TForm(Sender) do
             end;//if (Sender is TForm) then
           end;//procedure BtnClearClick(
var
aForm:TForm;
aPanel:TPanel;
OnClearClick:TMethod;
List:TStringList;
i:Integer;
begin
Result:=False;
//if not FileExists(aFileName) then Exit;
try
 Application.CreateForm(TForm, aForm);
 try
  With aForm do
   begin
    Caption:=aFileName;
    BorderStyle:=bsSingle;
    Height:=500;
    Width:=750;
    Position:=poScreenCenter;
   end;
  With TMemo.Create(aForm) do
   begin
    Parent:=aForm;
    Name:="memSQLLogMonitor";
    Align:=alClient;
    ScrollBars:=ssBoth;
    //Height:=440;
    Clear;
    Hint:=aFileName;
    List:=TStringList.Create;
    if FileExists(aFileName) then
     begin
      List.LoadFromFile(aFileName);
      for i:=List.Count-1 downto 0 do Lines.Add(List.Strings[i]);
     end;
    List.Free;
   end;
  aPanel:=TPanel.Create(aForm);
  With aPanel do
   begin
    Parent:=aForm;
    Height:=45;
    Align:=alBottom;
   end;
  With TButton.Create(aPanel) do
   begin
    Parent:=aPanel;
    Cancel:=True;
    Height:=25;
    Width:=100;
    Font.Size:=10;
    Top:=10; //aPanel.ClientHeight-10;
    Left:=aPanel.Width-110;
    Anchors:=[akTop, akRight];
    Caption:="Закрыть";
    ModalResult:=mrOK;
   end;
  With TButton.Create(aPanel) do
   begin
    Parent:=aPanel;
    Height:=25;
    Width:=100;
    Font.Size:=10;
    Top:=10; //aPanel.ClientHeight-30;
    Left:=aPanel.Width-220;
    Anchors:=[akTop, akRight];
    Caption:="Очистить";
    OnClearClick.Code:=@BtnClearClick;
    OnClearClick.Data:=aForm;
    OnClick:=TNotifyEvent(OnClearClick);
   end;
  aForm.ShowModal;
 finally
  aForm.Free;
 end;
except on E:Exception do
 raise Exception.Create("ShowTexLogFile "+E.Message);
end;
end;


 
ANB ©   (2005-05-19 11:20) [27]


> Ну тогда ещё нужно ссылку на метод передавать, который кнопке
> будешь присваивать.
- это, а зачем ? Номер кнопки я могу определить и вернуть.
А чего этот код у тебя делает ?


 
basken   (2005-05-19 11:22) [28]


> ANB ©   (19.05.05 11:01) [14]


Напиши классовый метод для своего диалогового окна с нужными тебе параметрами, и вызывай его как обычную процедуру...


 
ANB ©   (2005-05-19 11:23) [29]


> basken   (19.05.05 11:22) [28]
- да вот в описании параметров и все проблемы. Сабж читал ?


 
ANB ©   (2005-05-19 11:24) [30]


> Напиши классовый метод
- да и не нужен тут классовый. Потом придется имя класса постоянно прикручивать.


 
Ega23 ©   (2005-05-19 11:24) [31]

А чего этот код у тебя делает ?
Выводит на экран содержимое текстового файла в мемо. Также есть 2 кнопки - "Очистить" и "Закрыть".

- это, а зачем ? Номер кнопки я могу определить и вернуть.
Ну и что? А где "реакция" на кнопку?


 
basken   (2005-05-19 11:26) [32]


> ANB ©   (19.05.05 11:24) [30]

Что значить прикручивать...?


 
Думкин ©   (2005-05-19 11:26) [33]

Хм. Навскидку пока не вижу. А гемор вижу. :)


 
ANB ©   (2005-05-19 11:30) [34]


> Также есть 2 кнопки - "Очистить" и "Закрыть".
- хе, этто слишком просто. 2 кнопки. А если мне нужна одна ? Кнопки на панельку динамически накидать я и сам умею. Мнеж надо передать - какие. Минимумом кода. Кстати, помнится была такая фича - открытый список аргументов, кажись в TP. Delphi это ест ?


 
Ega23 ©   (2005-05-19 11:31) [35]

2 ANB ©   (19.05.05 11:30) [34]

Короче, заведи Set и не мучайся, если с классами возиться неохота (или не умеешь)


 
ANB ©   (2005-05-19 11:33) [36]


> (или не умеешь)
- не, скорее не люблю. Ну не торчу я от ООП. Хотя в реализации все равно придется с ними возится.


 
Думкин ©   (2005-05-19 11:36) [37]

> [34] ANB ©   (19.05.05 11:30)

Пипец. Я же тебе пишу - открытые массивы. А просто открытого - ничего и в ТП не было.


 
Ega23 ©   (2005-05-19 11:36) [38]

- не, скорее не люблю. Ну не торчу я от ООП. Хотя в реализации все равно придется с ними возится.

А как же тогда Form1.Button1 ?  :о)


 
Думкин ©   (2005-05-19 11:37) [39]

Variant open array parameters - то?


 
ANB ©   (2005-05-19 11:38) [40]


> А как же тогда Form1.Button1 ?  :о)
- вот и грю же, не люблю, а приходится.


> А просто открытого - ничего и в ТП не было.
, млин, может я с TC перепутал . . . Давненько не нужно было.



Страницы: 1 2 вся ветка

Форум: "Основная";
Текущий архив: 2005.06.06;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.55 MB
Время: 0.018 c
4-1113556755
312Kbps
2005-04-15 13:19
2005.06.06
Одинаковые GUID ????


1-1116484642
ANB
2005-05-19 10:37
2005.06.06
Как удобнее оформит передачу массива записей в функцию


3-1114701922
Alex77777
2005-04-28 19:25
2005.06.06
Как организовать загрузку в Stringgrid из текстового файла


14-1116490509
*Pavel
2005-05-19 12:15
2005.06.06
Все пионеры поздравляются


1-1116923548
Phoenix
2005-05-24 12:32
2005.06.06
Субменю в PopupMenu





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский