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

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

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

ShIvADeSt (19-05-2010 05:14): Продолжаем тут http://forum.ru-board.com/topic.cgi?forum=33&topic=11215  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Продолжение темы Вопросы по Delphi (до версии 2009) - часть 4

Познаем сами, помогаем другим...
Обсуждаем вопросы, не связанные с юникоидными версиями Delphi - для этого есть соответствующая тема (см. ссылки ниже).

Правила топика:
    Прежде чем спрашивать:
  1. Желательно изучить вопрос, попытаться найти ответ в прилагаемых мануалах, хелпах и анализируя исходники.
  2. Выполнить поиск по топику (открыть "Версия для печати" и поискать ответ там).
  3. Применить фильтр по разделу "Прикладное программирование". Ответы на многие старые вопросы могли быть даны в отдельных темах.
  4. Продумайте вопрос. На поверхностные вопросы вы получите поверхностные ответы, или вообще ответов не получите.
  5. Желательно указывать версии используемого компилятора и операционной системы.
    Прежде чем отвечать:
  1. Если не можете помочь, не мешайте.
  2. Если уж вы отвечаете на вопрос, давайте ответ по сути.
  3. Если вы не уверены, так и говорите! Ошибочный, но авторитетно звучащий ответ хуже, чем отсутствие ответа.
  4. Задавайте дополнительные вопросы, чтобы получить больше информации.
  • Отсутствие ответа не равносильно игнорированию - иногда участники форума просто не знают ответ. Повторная посылка вопроса не приветствуется. Посты типа "неужели никто не знает ответа..." или "может мне все-таки кто-нибудь ответит" недопустимы.  
  • Все большие куски кода (более 5 строк) оформляем в тег [morе] дабы уменьшить размер поста. FAQ по тегу [morе].

  • Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 02:09 28-06-2009 | Исправлено: psa1974, 12:00 02-02-2010
    V1s1ter



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

    Цитата:
    Как сделать, чтоб код события вставлялся в конец исходного кода программы,

    Всех настроек не знаю, то вот порядок работы:
    Если методы размещены по алфавиту или  их нет, то методы вставляются в алфавитном порядке, инаже по мере обявления, то есть в конец.

    Всего записей: 948 | Зарегистр. 06-02-2007 | Отправлено: 18:52 15-10-2009
    psa1974



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    V1s1ter
    Взял в руки Дельфи 2009, создал новый проект, добавил обработчики FormCreate, Button1Click, само собой Button1Click встал перед FormCreate. Переместил Button1Click в конец, нарушив алфавитность. Добавляю  Button1Enter - и он снова встал ПЕРЕД  FormCreate.  
    Повторил то же самое с Дельфи 2007 и Дельфи 2010. Те же яйца ...
     
    Varenik
    ModelMaker CodeExplorer, вероятно, вешь могучая, сильная и мегаполезная, однако мне тут с вами еще болтать и болтать до тех пор, пока я ее смогу взять из обменника. Однако за совет спасибо

    Всего записей: 438 | Зарегистр. 08-11-2005 | Отправлено: 21:14 15-10-2009 | Исправлено: psa1974, 21:16 15-10-2009
    Frodo_Torbins

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    psa1974
    ModelMaker CodeExplorer можно и демку использовать, правда каждый месяц приходится дистилером триал сбрасывать.

    Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 21:54 15-10-2009
    Maks150988



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Приветствую. Кто знает самый простой способ отрисовки графика, подскажите как вообще организовать кодом все это дело, а то я все никак не пойму как же это сделать, хочется помудрить с отрисовкой линий как это делает диспетчер задач для отображения хронологии загрузки цп, только для своих задач требуется.
    Начитался тут в поисковиках значит что мол все советуют использовать функцию Polyline и сами координаты для отрисовки задавать в массиве TPoint. Ну вот мне надо отрисовать линию, я вот такой код сделал, но что-то не рисуется. Может я неправильно истолковал функцию или как-то надо по-другому координаты для точек задавать?

    Код:
      SetLength(pt, 2);
      pt[1].x := 0;
      pt[1].y := 0;
      pt[2].x := 10;
      pt[2].y := 10;
      Polyline(cdc, pt, 2)
     

    Просто код с помощью LineTo и MoveToEx кажется мне еще сложным для понимания, да и пока трудновато вообще представить как вырисовывать множество линий за раз, хочется как-то универсальнее и попроще.

    Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 22:03 15-10-2009
    V1s1ter



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Maks150988
    Вот написал простую демку (10 строк) - разбирайся.
    http://www.onlinedisk.ru/file/242705/
     
    Добавлено:
    psa1974
    Jonnywin


    Цитата:
    Взял в руки Дельфи 2009, создал новый проект, добавил обработчики FormCreate

    Повторил - тоже самое...  
    Но, блин, ведь писал модуль по графике в объекте методов под сотню и все добавлялись в конец. В общем модуль распух и стал я в нем путаться. Думаю дай отсортирую, чтоб вставлялось аопо алфавиту - протрахался целый день (почему и запомнил это дело) все отсортировал и стало вставляться в середину.  Может версия была другая или без апдейтов...
    В любом случае приношу извинения за дезинформацию.

    Всего записей: 948 | Зарегистр. 06-02-2007 | Отправлено: 22:55 15-10-2009
    Frodo_Torbins

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    V1s1ter
    А настройки Explorer-а не могли повлиять на порядок вставки, там ведь есть соответствующие радиобатоны?

    Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 00:37 16-10-2009 | Исправлено: Frodo_Torbins, 00:38 16-10-2009
    psa1974



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

    Цитата:
    В любом случае приношу извинения за дезинформацию

    Ничего страшного Вообще это не критично - из-за этого проект не перестанет компилироваться, только лишь неудобство в навигации (хотя кто-то со мной и не согласится). Просто тему завели интересную и была надежда, что это можно поправить малой кровью...
    Frodo_Torbins

    Цитата:
    ModelMaker CodeExplorer можно и демку использовать, правда каждый месяц приходится дистилером триал сбрасывать.

    Спасибо конечно, но такие танцы с бубном  - это уж точно чересчур только для выполнения нужного порядка создания кода
     
     
    Добавлено:
    Frodo_Torbins

    Цитата:
    А настройки Explorer-а не могли повлиять на порядок вставки

    Глянул счас - у меня стоит:
    Explorer sorting: Source
    Если бы эта настройка влияла, не было бы всего этого разговора...

    Всего записей: 438 | Зарегистр. 08-11-2005 | Отправлено: 01:10 16-10-2009
    ShIvADeSt



    Moderator
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Maks150988

    Цитата:
    Просто код с помощью LineTo и MoveToEx кажется мне еще сложным для понимания

    Набросал вот (несмотри на OnPaint - рисуется все на АПИ)

    Код:
     
    procedure TForm1.FormPaint(Sender: TObject);
     procedure Line(DC:HDC; x1,y1,x2,y2:integer);
     begin
         MoveToEx(DC, x1,y1,nil);
         LineTo(DC, x2,y2);
     end;
     
     procedure PolylineEx(DC:HDC; Points:array of TPoint);
     var
        i               :integer;
     begin
        for i := 1 to High(Points) do Line(DC,Points[i-1].x,Points[i-1].y,Points[i].x,Points[i].y)
     end;
    var
       lp           :array of TPoint;
     
    begin
         Line(Form1.Canvas.Handle,100,100,200,200);
         SetLength(lp,3);
         lp[0].x:=100;
         lp[0].y:=150;
         lp[1].x:=200;
         lp[1].y:=250;
         lp[2].x:=150;
         lp[2].y:=100;
         PolylineEx(Form1.Canvas.Handle, lp);
         SetLength(lp,0);
    end;
     

    Сделал по аналогии со старым бейсиков (там была продеру Line) ну и полилайн от нее забабахал, думаю понять не трудно, что творится.

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

    Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 03:11 16-10-2009
    JohnSilver182



    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Нашел процедуру : Пихаеш HTML строку, а тебе  все дела .
     
    Вот  только  WebBrowser1.ExecWB(OLECMDID_PRINT,0 ); срабатывает
    на WB_LoadHTML(self.WebBrowser1,'<html><body><p>суко</p></body></html>');
    А если что то большое пихать то выводит пустую страницу .

    Код:
    procedure WB_LoadHTML(WebBrowser: TWebBrowser; HTMLCode: string);
    var
      sl: TStringList;
      ms: TMemoryStream;
    begin
      WebBrowser.Navigate('about:blank');
      while WebBrowser.ReadyState < READYSTATE_INTERACTIVE do
       Application.ProcessMessages;
     
      if Assigned(WebBrowser.Document) then
      begin
        sl := TStringList.Create;
        try
          ms := TMemoryStream.Create;
          try
            sl.Text := HTMLCode;
            sl.SaveToStream(ms);
            ms.Seek(0, 0);
            (WebBrowser.Document as IPersistStreamInit).Load(TStreamAdapter.Create(ms));
          finally
            ms.Free;
          end;
        finally
          sl.Free;
        end;
      end;
    end;

    Всего записей: 829 | Зарегистр. 03-06-2009 | Отправлено: 11:25 16-10-2009 | Исправлено: JohnSilver182, 11:30 16-10-2009
    volser

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

    Код:
    (WebBrowser.Document as IHTMLDocument2).body.innerHTML := HTMLCode;

    Всего записей: 713 | Зарегистр. 31-03-2006 | Отправлено: 15:23 16-10-2009
    Maks150988



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    V1s1ter
    Спасибо, но там VCL, пробовал код подставлять для своих нужд, чего-то не получилось.
    ShIvADeSt
    Так, посмотрел, вроде какая-то фигня получилась. Только есть один вопрос. Как развернуть HDC по горизонтали. Всякая фигня попадается в интернете, а толку ноль.
    Дальше
     
    Инициализация
    Вобщем кому интересна сама идея. Я та кпонял что нужно создать переменную в которой требуется хранить число точек и по ней ориентироваться при отрисовке линий. Также хочется при каждом добавлении линии на контрол прокручивать всю отрисовку влево - ну как везде вот это все организовано впринципе для удобности и наглядности, ну или хотя бы подскажиет кто знает какими функциями это сделать. Просто пока таймер не добавил себе на диалог, посему не знаю как вообще управлять таким контролом.

    Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 00:04 17-10-2009
    V1s1ter



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

    Цитата:
    но там VCL,

    Дык, Вы вроде ограничений не давали...

    Цитата:
    Как развернуть HDC по горизонтали

    !? ... HDC это просто число, как его развернуть по горизонтали.
    Или я туплю или Вы вопросы пишите: слово написал три в уме.
    Или Вы уже давненько спрашиваете, а я пропустил мимо Ваши посты?
    В общем напиши толком, что нужно, какие ограничения (условия) и для чего.
    Тогда есть шанс получить правильный ответ.

    Всего записей: 948 | Зарегистр. 06-02-2007 | Отправлено: 01:41 17-10-2009
    Maks150988



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    V1s1ter
    Ну я просто устанавливал Delphi буз pas файлов, поэтому я без понятия что там за канвасный Polyline, да и код-то собственно похожий.
    Ну я просто не так выразился. Развернуть мне надо координаты по горизонтали для отрисовки графика. Сейчас если рисовать график, то надо слева-направо, хочется от правой границы его вырисовывать. вот, может есть способ попроще как-то корректировать Rect. Мне пока сложновато вот это все представить как коррдинаты для каждой точки оборачивать. Ну или может есть какой компонент простенький чтоб его поковырять на код.

    Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 11:16 17-10-2009
    V1s1ter



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

    Цитата:
    лева-направо, хочется от правой границы


    Цитата:
    Мне пока сложновато  

    Я посмотрел на код который Вы выкладывали и почитал Ваши вопросы. Код посложнее чем вопросы... Ну да ладно.  
    Для зеркального отображения графика горизнотали (зеркализация относительно вертикальной оси) нужно воспользоваться формулой  
    Zx := 2*W-Nx
    где
      Zx  - новая координата X зеркального графика
      W   - координата X верикальной оси зеркализации  
      Nx  - координата X нормального графика
    Пример
    нормальный график XY (1, 1) (2, 2) (3, 2) (4, 3)
    отзеркалить относительно оси X=2.5 (середины графика)
    W = 2.5
    зеркальный график XY (4, 1) (3, 2) (2, 2) (1, 3)
     
    отзеркалить относительно оси X=0  
    W = 0
    зеркальный график XY (-1, 1) (-2, 2) (-3, 2) (-4, 3)
     
    отзеркалить относительно оси X=1  
    W = 0
    зеркальный график XY (1, 1) (0, 2) (-1, 2) (-2, 3)
     
    Если не ошибся - где-то так.

    Всего записей: 948 | Зарегистр. 06-02-2007 | Отправлено: 19:06 17-10-2009
    JohnSilver182



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

    Цитата:
    JohnSilver182
    Попробуй так:
    Код:
    (WebBrowser.Document as IHTMLDocument2).body.innerHTML := HTMLCode;  

    Слався volser великий шаман !!!
     

    Всего записей: 829 | Зарегистр. 03-06-2009 | Отправлено: 16:26 18-10-2009
    JohnSilver182



    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Потоки
     
    Вот код по "убиению" простого потока

    Код:
    procedure TSuper.Execute;
    begin
      while not self.Terminated do sleep(1000);
      if self.Terminated then   FreeOnTerminate:=true;
    end;

    Вопрос , как убить поток который вызывает N-количество классов , и там  происходят глубинные процессы по обработке . Класс то ведь может и "неподозревать" кто его вызвал !

    Всего записей: 829 | Зарегистр. 03-06-2009 | Отправлено: 19:11 19-10-2009
    volser

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    JohnSilver182
    Что значит "поток который вызывает N-количество классов"? Каждый класс создает свой поток который уничтожается после окончания выполнения. Или сделайте какой то класс - менеджер потоков. Он будет создавать и уничтожать потоки.

    Всего записей: 713 | Зарегистр. 31-03-2006 | Отправлено: 20:19 19-10-2009
    JohnSilver182



    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    volser Я имел ввиду   что юзер нажал на кнопку Отмена  . В коде  потока можно написать типа   if self.Terminated then exit;  . Но если поток вызвал класс \ процеру  которая выполняется чуть больше чем дохрена времени, то тут есть над чем подумать !
     

    Всего записей: 829 | Зарегистр. 03-06-2009 | Отправлено: 21:38 19-10-2009
    psa1974



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

    Цитата:
    как убить поток который вызывает N-количество классов

    Правильнее сказать наверное так:  
    как убить поток, вызывающий N-количество (экземпляров) классов?
    Потому что в исходном варианте можно понять именно так, а можно иначе:
    как убить поток, вызываемый N-количеством (экземпляров) классов?
    Если речь о первом варианте вопроса и касается классов, то все просто: в конструкторе класса  передаешь ссылку на поток, создающий экземпляр этого класса. А в самом классе там где выполняются "глубинные процессы по обработке" проверяешь значение св-ва Terminated твоего потока. Если поток Terminated, то экземпляр класса должен все прекратить. А в обработчике OnTerminate потока ожидать пока экземпляры класса не закончат обработку и не просигналят об этом (делается элементарно через булевое поле класса - флаг), после чего разрушить эти экземпляры. Только после этого поток будет завершен.
    Аналогично с какой-либо функцией - ей ссылку на поток передаешь в качестве одного из параметров...  Вроде так.

    Всего записей: 438 | Зарегистр. 08-11-2005 | Отправлено: 23:18 19-10-2009 | Исправлено: psa1974, 23:30 19-10-2009
    Andrey128

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Если под Windows 7 в FAR'е копировать файл, то на панели задач в иконке появляется прозрачный прогрессбар.
    Как это реализовать с помощью Delphi?

    Всего записей: 408 | Зарегистр. 16-01-2003 | Отправлено: 07:28 20-10-2009
       

    Страницы: 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 (до версии 2009) - часть 5
    ShIvADeSt (19-05-2010 05:14): Продолжаем тут http://forum.ru-board.com/topic.cgi?forum=33&topic=11215


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru