Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (все версии) - часть 4

Модерирует : ShIvADeSt

ShIvADeSt (28-06-2009 02:10): Продолжение в http://forum.ru-board.com/topic.cgi?forum=33&topic=10477  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101

   

Mandor Sawall

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
delover
А ето подходит?
Код:
tv.Select(TreeViewItem, []);

Всего записей: 119 | Зарегистр. 20-03-2003 | Отправлено: 09:47 18-04-2008
delover

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mandor Sawall

Цитата:
А ето подходит?

Думаю нет ). А в качестве чего оно может подойти? Я сохраняю хэш (adler32+crc32) или id из базы всех нодов которые экспандед (развёрнуты) и тех которые имеют тот же хэш, сохраняю верхний узел и сохраняю выбранный. Когда я востанавливаю состояние дерева, то сначала востанавливаю развёрнутость, потом устанавливаю верхний, потом востанавливаю выбранный. Так например в случае если скопом добавилась куча файлов отчётов между верхним узлом и выбранным, то выбранный узел виден не будет. По этому важно делать node.makevisible, а он сдвигает скролл. tv.Select(... после MakeVisible не востановил скролл, а когда я верхний элемент назначил первым нодом, то выбранный узел не был виден.  
 
А чем tv.Select(N, []) отличается от
 
if Assigned(N) then begin
     N.Focused:=True;
     N.Selected:=True;
     //N.MakeVisible;
     end;
 
я так и не понял. Надо как то запретить для MakeVisible горизонтальный скролл, либо скроллировать на начало после MakeVisible.

Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 15:04 18-04-2008
Mandor Sawall

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
delover
Я тоже не понимаю... У меня
N.Selected := True
двигает (только вертикально) скрол так, что бы нод был виден. MakeVisible делает хоризонтальной скрол так, что бы нод был всегда виден (например если хоризонтальное смещение нода больше чем ширина TreeView).
 
Иначе N.Selected работает прямо через TreeView_SelectItem, а tv.Select() делает еще немножко...

Всего записей: 119 | Зарегистр. 20-03-2003 | Отправлено: 16:05 18-04-2008
Czechoslovak



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
delover
Попробуй отключить горизонтальный скролл, потом включить

Всего записей: 175 | Зарегистр. 27-06-2007 | Отправлено: 16:35 18-04-2008
delover

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mandor Sawall

Цитата:
Я тоже не понимаю... У меня  
N.Selected := True  
двигает (только вертикально) скрол так, что бы нод был виден.  

Ну если у Вас не стандартный компонент или comctl32.dll, то может быть такое поведение. Это не стандартно для деревьев. По умолчанию select ничего не двигает тем более если он обёрнут в BeginUpdate/EndUpdate и не установлена обция AutoExpand. Я раскопал всё таки как эти скролы двигать, но конечный код вышел ещё лучше. Я делаю MakeVisible только если его действительно не видно. В большинстве случаев это не так. Вот нормальный код со скролами и т.д.
 

Код:
 
        if Assigned(T) then tv.TopItem:=T;
        if Assigned(N) then begin
            N.Focused:=True;
            N.Selected:=True;
            R1:=N.DisplayRect(False);
            R2:=tv.ClientRect;
            if (R1.Top < R2.Top) or (R1.Bottom > R2.Bottom) then
                N.MakeVisible;
            end;
        J := GetScrollPos(tv.Handle, SB_HORZ);
        if J <> 0 then begin
            SetScrollPos(tv.Handle, SB_HORZ, 0, True);
            SendMessage(tv.Handle, WM_HSCROLL, SB_ENDSCROLL, 0);
            end;
    finally
        tv.Items.EndUpdate;
        end;

 
Добавлено:
Czechoslovak

Цитата:
Попробуй отключить горизонтальный скролл

Его всё равно не оключить. Сама полоса может быть запрещена как элемент управления, но сдвиг в окне дерева всё равно будет происходить, я пробовал

Код:
 
EnableScrollBar(tv.Handle, SB_HORZ, ESB_DISABLE_BOTH
 

Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 13:49 21-04-2008
AdminOrLooser



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Привет, великие программеры!!! Подскажите пожалуйста, диплом горит!
 
В общем мне нужно сделать анимацию (Движение воды в песке с нефтью)
 
ДОПУСТИМ СЛЕВА НА ПРАВО Я СДЕЛАЛ
 
а еще нужно сделать с центра, т.е. нужно нарисовать случайные точки внитри круга (радиус будет расти), и круг ограничится прямоугольником...
 
procedure TForm1.Button6Click(Sender: TObject);
 
  var sknn, skm:integer;
       sknns:string;
    begin
    if m<-200 then form1.Timer1.Enabled:=false else begin
    randomize;
    for n:=1 to nn do begin
      xx:=random(form1.Image1.ClientWidth-m) ;
      yy:=random(form1.Image1.ClientHeight);
      form1.Image1.Canvas.Pixels[xx,yy]:=clwhite;
    end;
 end;
     nn:=(nn+5)+sknn;
     m:=(m-4)-skm;
  end;

Всего записей: 32 | Зарегистр. 14-03-2008 | Отправлено: 21:58 21-04-2008
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AdminOrLooser
Принадлежность точке кругу определяется по формуле
x^2+y^2<r^2 проверяй условие и рисуй точку. Какие проблемы

----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 02:36 22-04-2008
AdminOrLooser



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Да нет! Мне нужно что-то типа:
 
 
xx:=random(  ...КРУГ(ЦЕНТР,РАДИУС)...  );
yy:=random(  ...КРУГ(ЦЕНТР,РАДИУС)...  );
 
 
Есть что-нить такое?
 
Добавлено:
кстати, такая штука прокатит?  где хх и уу у меня координаты, а с - это шаг.
.....
x1:=array[form1.image1.clienWidth div 2 - c .. form1.image1.clienWidth div 2 + c] of integer;
y1:=array[form1.image1.ClientHeight div 2 - c .. form1.image1.ClientHeight div 2 + c] of integer;
 
....
 
xx:=random(x1);
yy:=random(y1);
form1.image1.canvas.pixels[xx,yy]:=clwhite;

Всего записей: 32 | Зарегистр. 14-03-2008 | Отправлено: 08:09 22-04-2008
MrZeRo



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AdminOrLooser
прокатит так:

Цитата:
 
var
  x1 : array of Integer;
  ...
begin
  ...
  SetLength(x1, my_size)
 ...
   
 

А по поводу случайных точек внутри круга, можно брать отдельно
xx := ЦЕНТР(x)-radius+random(2*(radius-delta))
yy := ЦЕНТР(y)-radius+random(2*(radius-delta))
delta - это чтобы внутренний круг не выходил за рамки большого.

----------
... не это главное ...

Всего записей: 831 | Зарегистр. 30-01-2002 | Отправлено: 10:40 22-04-2008
megamozg13



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Приветствую. Наша бух.программа не поддерживает использование глоб.переменных. посему мне нужно написать ддл'ку для хранения массивов данных.
 
Подробнее...
 
косячит во время выполнения, посдкажите в чем я туту неправ...

Всего записей: 313 | Зарегистр. 27-07-2004 | Отправлено: 12:58 22-04-2008
MrZeRo



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
megamozg13
Что-то нигде не видно выделения памяти под массивы.
Почитай внимательно в хелпе раздел "Dynamic Arrays", раз ты их хочешь использовать.
Можно посоветоватьдля начала протестировать без Dll, для простоты, чтобы можно было отлаживать.
Странный какой-то код.

----------
... не это главное ...

Всего записей: 831 | Зарегистр. 30-01-2002 | Отправлено: 13:19 22-04-2008
Maks150988



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здраствуйте. Есть компонет для спектрума для басс.длл. Так вот он через VCL на канвасе рисует. Но инициализируется в примере на пэйнтбоксе. Так вот можно ли заставить рисоваться его на статике в обычном диалоге? И если да, то кто может помочь? А то я быстренько бросил эту затею, потому как с первого раза не получилось. И непонятно еще что через таймер обновляется, а надо ли в WM_PAINT что-нибудь указывать. Вообщем, кто может помочь? Код напишу сюда если что.

Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 13:32 22-04-2008
megamozg13



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
MrZeRo
перекрутил вот так, но все равно косячит при выполнении:
 
Подробнее...
 
а код конечно странный будет, я дельфи поставил час назад =) до этого не писав на дельфях ниразу

Всего записей: 313 | Зарегистр. 27-07-2004 | Отправлено: 13:53 22-04-2008 | Исправлено: megamozg13, 13:55 22-04-2008
MrZeRo



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
megamozg13
Ну так принципиально ничего не поменялось.
Еще раз: где выделение памяти под массивы?
StrCopy память не выделяет:

Цитата:
 
Use StrCopy to copy Source to Dest. StrCopy returns Dest.  
StrCpy does not perform any length checking. The destination buffer must have room for at least StrLen (Source)+1 characters.
 

Посмотри все-таки хоть какие-нибудь примеры работы с динамическими массивами, раз справку читать не хочешь.
Методом тыка тут не пройдет, имхо.
Вот загляни сюда: hггp : // www. drkb. ru/, гуглом пошарь на тему "delphi dynamic arrays"

----------
... не это главное ...

Всего записей: 831 | Зарегистр. 30-01-2002 | Отправлено: 14:10 22-04-2008
megamozg13



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
MrZeRo
поправил, теперь косячит на методе "чтение" ("сброс" и "запись" проходят вроде как без ошибок)
Подробнее...
думаю тут последняя блоха осталась, вот где тока.
drkb.ru - ща буду лопатить
обана, 30 мегов статей это мощно, качаю... спасибо за ссылку на ресурс.

Всего записей: 313 | Зарегистр. 27-07-2004 | Отправлено: 14:23 22-04-2008 | Исправлено: megamozg13, 14:26 22-04-2008
MrZeRo



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
megamozg13
А зачем при считывании-то выделять память?
По идее считывание предполагает, что где-то в памяти записаны нужные данные и их оттуда надо извлечь.
И куда-то исчезли операторы освобождения памяти. Т.е. память всё выделяется и выделяется, а освобождаться не будет никогда?
Присвоение указателю значения nil память не освобождает.
Кроме того, в коде есть еще кое-какие ошибки, сам увидишь потом.
Например, ты не стесняешься писать

Цитата:
 
for i:=0 to
ar_kolvo do  
  if StrComp(ar_indx[i],var_index)=0 then ar_tek:=i;
 

несмотря на то, что у тебя выше стоит

Цитата:
 
ar_indx: array[1..500] of PChar;
 

Как ты думаешь, что оно у тебя прочитает при i=0?
Кроме того, когда ты нашел нужный ar_tek, цикл ты продолжаешь зачем-то, а не прерываешь.
И вообще, мне кажется, что форумчанам не сильно интересно тут эту всю бодягу читать, пиши если что в ПМ.

----------
... не это главное ...

Всего записей: 831 | Зарегистр. 30-01-2002 | Отправлено: 15:12 22-04-2008 | Исправлено: MrZeRo, 15:16 22-04-2008
AdminOrLooser



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Приветствую всех программеров!  
 
Такой вопрос: реально ли такая вещь:
 
case combobox1.ItemIndex of
  0:begin
       .....
      begin
       .........
      end;
     end;
 
  1:begin
       .....
      begin
       .........
      end;
     end;
   2: аналогично...
 
 
end;
 
Добавлено:
.....или такая..
 
 
case combobox1.ItemIndex of
  0:form1.Timer1.Enabled:=true;
  1:form1.Timer2.Enabled:=true;
  2:form1.Timer3.Enabled:=true;
end;

Всего записей: 32 | Зарегистр. 14-03-2008 | Отправлено: 09:19 23-04-2008
ymg2000



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AdminOrLooser
Реальна.

Всего записей: 2391 | Зарегистр. 24-08-2007 | Отправлено: 09:38 23-04-2008
Kandus

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
всем привет! Кто поможет? короче в Delphi какой компонент использовать, чтоб типа в mеmо или edit ввел скажем y=Cos(x)+x*x или y=1/х, короче любая фунуция, потом нажимаешь на button, типа ОК и внизу в таблице по заданным значениям Х выдает соответствующие результаты У в виде таблицы. Короче не используя Unit. Эта задача для чайников, чтоб было им понятно.  слышал, что есть готовый компонент, не дадите ссылку на скачку.

Всего записей: 1 | Зарегистр. 23-04-2008 | Отправлено: 10:58 23-04-2008
AdminOrLooser



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здрасте еще разок!
 
Все предыдущее мне помогло, спасибо!  
 
Есть следующая проблемка: почему когда идет прорисовка (анимация)
 
procedure TForm1.Button6Click(Sender: TObject);
 
  var sknn, skm:integer;
       sknns:string;
    begin
      skm:=strtoint(edit5.Text);
      sknn:= strtoint(edit3.Text);
      form1.Label5.Caption:=sknns;
      if m<-200 then form1.Timer1.Enabled:=false else begin
    randomize;
    for n:=1 to nn do begin
      xx:=random(form1.Image1.ClientWidth-m) ;
      yy:=random(form1.Image1.ClientHeight);
      form1.Image1.Canvas.Pixels[xx,yy]:=clwhite;
    end;
    end;
     nn:=(nn+5)+sknn;
     m:=(m-4)-skm;
     label3.Caption:=timetostr(time-t) ;
    end;
 
Область image1 начинает мерцать. Почему?

Всего записей: 32 | Зарегистр. 14-03-2008 | Отправлено: 11:32 23-04-2008
   

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (все версии) - часть 4
ShIvADeSt (28-06-2009 02:10): Продолжение в http://forum.ru-board.com/topic.cgi?forum=33&topic=10477


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru