Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.10.2010, 09:57   #1
barleks
 
Регистрация: 14.10.2010
Сообщений: 8
По умолчанию Нужен простой TCtrlGrid а не TDBCtrlGrid

Народ подскажите где достать простой TCtrlGrid, а не TDBCtrlGrid
barleks вне форума Ответить с цитированием
Старый 14.10.2010, 09:59   #2
Sparkman
220400
Форумчанин
 
Аватар для Sparkman
 
Регистрация: 21.05.2010
Сообщений: 726
По умолчанию

Цитата:
Сообщение от barleks Посмотреть сообщение
Народ подскажите где достать простой TCtrlGrid, а не TDBCtrlGrid
Во вкладке Standard насколько помню или Advanced
Cерьёзной помощи не ждите - помогаю в перерывах на "перекур".
Не существует ничего невозможного для человека, который не собирается ничего делать сам.
Не учите человека, если вы не его учитель.
Sparkman вне форума Ответить с цитированием
Старый 14.10.2010, 10:05   #3
barleks
 
Регистрация: 14.10.2010
Сообщений: 8
По умолчанию

Что-то в моей Delphi 7 не нахожу, build 4.453? может она покоцаная
barleks вне форума Ответить с цитированием
Старый 14.10.2010, 10:09   #4
Sparkman
220400
Форумчанин
 
Аватар для Sparkman
 
Регистрация: 21.05.2010
Сообщений: 726
По умолчанию

Цитата:
Сообщение от barleks Посмотреть сообщение
Что-то в моей Delphi 7 не нахожу, build 4.453? может она покоцаная
TStringGrid
Cерьёзной помощи не ждите - помогаю в перерывах на "перекур".
Не существует ничего невозможного для человека, который не собирается ничего делать сам.
Не учите человека, если вы не его учитель.
Sparkman вне форума Ответить с цитированием
Старый 14.10.2010, 10:23   #5
barleks
 
Регистрация: 14.10.2010
Сообщений: 8
По умолчанию

Большое спасибо за внимание к моей проблемме, но Stringgrid для моей задачи не подходит. Может ссылку на статью скинете по встраиванию в ячейки Stringgrid различных контролов и управление ими, причем они должны будут динамически добавлятся и уничтожаться

В моей задумке прога должна отображать сетку карточек с данными, интерфейс хочу сделать похожим на UninstallTOOL

Ой нет не Uninstall Tool. Др. прога - установка удаление прог штатная Win XP

Последний раз редактировалось artemavd; 14.10.2010 в 17:52.
barleks вне форума Ответить с цитированием
Старый 14.10.2010, 10:30   #6
Sparkman
220400
Форумчанин
 
Аватар для Sparkman
 
Регистрация: 21.05.2010
Сообщений: 726
По умолчанию

Цитата:
Сообщение от barleks Посмотреть сообщение
Большое спасибо за внимание к моей проблемме, но Stringgrid для моей задачи не подходит. Может ссылку на статью скинете по встраиванию в ячейки Stringgrid различных контролов и управление ими, причем они должны будут динамически добавлятся и уничтожаться
многие решения - это создавать дополнительно нужный контрол и отображать его поверх грида, но это по моему извращение
на счет ссылок - это где-то тут обсуждалось (есть поиск), это точно обсуждалось на других форумах (есть гугл, яндекс, рамблер и т.д.)
Cерьёзной помощи не ждите - помогаю в перерывах на "перекур".
Не существует ничего невозможного для человека, который не собирается ничего делать сам.
Не учите человека, если вы не его учитель.
Sparkman вне форума Ответить с цитированием
Старый 14.10.2010, 11:13   #7
barleks
 
Регистрация: 14.10.2010
Сообщений: 8
По умолчанию

Вот вариант с клонированием: на форме панель, на ней скролбокс, на нем панель с контролами, которую клонирую все работает - нажимаешь кнопку в скрол добавляется копия панели, если много добавить появляется прокрутка. Все так как и хотел НО
как теперь обратиться к нужным контролам - имени я то уже не знаю. как вариант перебор компонентов на панели. но как определить имя создавшейся панели, если конкретная панель, к примеру, привязана к конкретной персоне. ИЛИ юзать TDBCtrlgrid, да и вообще сделать как БД.
Код:
UnitDuplexpanel;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, dbcgrids, StdCtrls, DBCtrls, Mask, ExtCtrls, sPanel, sEdit,
  sSpinEdit, Buttons, sBitBtn, NxColumns, NxColumnClasses, NxScrollControl,
  NxCustomGridControl, NxCustomGrid, NxGrid, sScrollBox, IniFiles, TypInfo;

  type
  TUniqueReader = class(TReader)
    LastRead: TComponent;
    procedure ComponentRead(Component: TComponent);
    procedure SetNameUnique(
      Reader: TReader;
      Component: TComponent;
      var Name: string
      );
  end;

type
  TForm1 = class(TForm)
    spnl1: TsPanel;
    btn1: TButton;
    scrlbx1: TsScrollBox;
    spnl2: TsPanel;
    nxtgrd1: TNextGrid;
    nxtxtclmn1: TNxTextColumn;
    nxtxtclmn2: TNxTextColumn;
    nxtxtclmn3: TNxTextColumn;
    nxtxtclmn4: TNxTextColumn;
    nxtxtclmn5: TNxTextColumn;
    nxtxtclmn6: TNxTextColumn;
    nxtxtclmn7: TNxTextColumn;
    nxtxtclmn8: TNxTextColumn;
    nxtxtclmn9: TNxTextColumn;
    nxtxtclmn10: TNxTextColumn;
    nxtxtclmn11: TNxTextColumn;
    nxtxtclmn12: TNxTextColumn;
    sbtbtn1: TsBitBtn;
    edt1: TsDecimalSpinEdit;
    procedure btn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TUniqueReader.ComponentRead(Component: TComponent);
begin
  LastRead := Component;
end;

// Çàäàåì óíèêàëüíîå èìÿ ñ÷èòûâàåìîìó êîìïîíåíòó, íàïðèìåð,
// "Panel2", åñëè "Panel1" óæå ñóùåñòâóåò

procedure TUniqueReader.SetNameUnique(
  Reader: TReader;
  Component: TComponent; // Ñ÷èòûâàåìûé êîìïîíåíò
  var Name: string // Èìÿ êîìïîíåíòà äëÿ äàëüíåéøåé ìîäèôèêàöèè
  );
var
  i: Integer;
  tempname: string;
begin
  i := 0;
  tempname := Name;
  while Component.Owner.FindComponent(Name) <> nil do
  begin
    Inc(i);
    Name := Format('%s%d', [tempname, i]);
  end;
end;

function DuplicateComponents(
  AComponent: TComponent // èñõîäíûé êîìïîíåíò
  ): TComponent; // âîçâðàùàåìñÿ ê ñîçäàíèþ íîâîãî êîìïîíåíòà

  procedure RegisterComponentClasses(
    AComponent: TComponent
    );
  var
    i: integer;
  begin
    RegisterClass(TPersistentClass(AComponent.ClassType));
    if AComponent is TWinControl then
      if TWinControl(AComponent).ControlCount > 0 then
        for i := 0 to
          (TWinControl(AComponent).ControlCount - 1) do

          RegisterComponentClasses(TWinControl(AComponent).Controls[i]);
  end;

var
  Stream: TMemoryStream;
  UniqueReader: TUniqueReader;
  Writer: TWriter;
begin
  result := nil;
  UniqueReader := nil;
  Writer := nil;

  try
    Stream := TMemoryStream.Create;
    RegisterComponentClasses(AComponent);

    try
      Writer := TWriter.Create(Stream, 4096);
      Writer.Root := AComponent.Owner;
      Writer.WriteSignature;
      Writer.WriteComponent(AComponent);
      Writer.WriteListEnd;
    finally
      Writer.Free;
    end;

    Stream.Position := 0;
    try
      // ñîçäàåì ïîòîê, ïåðåìåùàþùèé äàííûå î êîìïîíåíòå â êîíñòðóêòîð
      UniqueReader := TUniqueReader.Create(Stream, 4096);
      UniqueReader.OnSetName := UniqueReader.SetNameUnique;
      UniqueReader.LastRead := nil;

      if AComponent is TWinControl then

        UniqueReader.ReadComponents(
          // ñ÷èòûâàåì êîìïîíåíòû è ñóá-êîìïîíåíòû

          TWinControl(AComponent).Owner,
          TWinControl(AComponent).Parent,
          UniqueReader.ComponentRead
          )
      else

        UniqueReader.ReadComponents(
          // ÷èòàåì êîìïîíåíòû

          AComponent.Owner,
          nil,
          UniqueReader.ComponentRead
          );
      result := UniqueReader.LastRead;
    finally
      UniqueReader.Free;
    end;
  finally
    Stream.Free;
  end;
end;

procedure TForm1.btn1Click(Sender: TObject);
var
  newpanel: TComponent;
begin
  newpanel := DuplicateComponents(spnl2);
end;

end.
Небольшая поправка: имя созданной панели я знаю:
Код:
newpanel := DuplicateComponents(spnl2);
Но перебирать все контролы муторновато, как сделать легче?
Ладно перебор так перебор компонентов. Следующая загвоздка в том, что прототип панели (которую клонирую) получается всегда видимой (простой visible в false не дает эфекта), а надо - панель отработала и освободилась(free).

Последний раз редактировалось artemavd; 14.10.2010 в 17:54.
barleks вне форума Ответить с цитированием
Старый 15.10.2010, 03:04   #8
Sparkman
220400
Форумчанин
 
Аватар для Sparkman
 
Регистрация: 21.05.2010
Сообщений: 726
По умолчанию

старайтесь не использовать клоны, а использовать один перемещаемый контрол, ведь пользователь обычно работает с одной ячейкой в основном.
А если нет, то сделайте массив компонентов, вот статейка с примером массива Edit'ов: ссылка.
Cерьёзной помощи не ждите - помогаю в перерывах на "перекур".
Не существует ничего невозможного для человека, который не собирается ничего делать сам.
Не учите человека, если вы не его учитель.
Sparkman вне форума Ответить с цитированием
Старый 15.10.2010, 09:16   #9
barleks
 
Регистрация: 14.10.2010
Сообщений: 8
По умолчанию

Ну а как создать интерфейс такого типа 2010-10-15.jpg
barleks вне форума Ответить с цитированием
Старый 15.10.2010, 10:47   #10
barleks
 
Регистрация: 14.10.2010
Сообщений: 8
По умолчанию

Все, решил проблему кодом (просто и без вкуса

procedure TForm1.btn4Click(Sender: TObject);
begin
spnl4.Height:=20;

end;

procedure TForm1.btn5Click(Sender: TObject);
begin
spnl4.Height:=113;
end;
barleks вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужен простой скрипт на ПХП (редирект). needsome Фриланс 2 22.05.2010 01:29
TDBCtrlGrid A-1_S БД в Delphi 1 04.09.2009 17:15
Работа с TDBCtrlGrid и двумя таблицами из БД kiber0net0 БД в Delphi 4 02.10.2008 00:10