1. Pascal / Говнокод #26325

    −3

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    1)
    const
      OUT_OF_BOUNDS:TPoint=(X:-1; Y:-1);
    var
      INT_OUT_OF_BOUNDS:Integer absolute OUT_OF_BOUNDS;
    
    TargetForm.Perform(WM_LBUTTONUP,0,INT_OUT_OF_BOUNDS);
    
    2)
    const
      ZERO_ZERO:TPoint=(X:0; Y:0);
    var
      INT_ZERO_ZERO:Integer absolute ZERO_ZERO;
    
    TargetForm.Perform(WM_LBUTTONUP,0,INT_ZERO_ZERO);
    
    3)
    TargetForm.Perform(WM_LBUTTONUP,0,0);

    Болею. Стояла задача воспроизвести системное меню. Но оказалось, что при клике на элемент фейкового системного меню, форме не посылается WM_LBUTTONUP и кнопка-иконка не перекрашивается в ненажатый вид. Решил перформить WM_LBUTTONUP прямо при клике, но туда нужно передавать координаты мышки куда был совершён клик в High(lParam) и Low(lParam). Сначала хотел передавать -1;-1 но подумал что передавать туда $FFFFFFFF как-то некрасиво, а прямое приведение типов а-ля Integer(Point(-1,-1)) оно у меня хавать не захотело, и поэтому красоты ради наговнокодил первый вариант кода. Потом подумал, а что если там только положительные значения, будет же 65535;65535 непорядок, лучше буду передавать нули. Впихнуть туда просто 0 сразу в голову не пришло (болею же, башка квадратная) и наговнокодил второй вариант.

    Потом, конечно же, написал всё по нормальному.

    Запостил: KOTOM, 07 Января 2020

    Комментарии (67) RSS

    • иди нахуй отсюда
      Ответить
    • Это каким же надо быть додиком, чтобы кастовать структуру в Integer и передавать как указатель?.. Выйдет за пределы процедуры - будет AV. Нужно было запилить PPoint c выделением памяти ручками.
      Ответить
      • Сам додик, это не указатель. Там передавать нужно DWORD, я его и передавал. И оно в любом случае никуда не выйдет, там можно что угодно писать, оно воспринимается как два ворда.
        Ответить
        • показать все, что скрытоvanished
          Ответить
          • от тебя не ожидал
            Ответить
            • показать все, что скрытоvanished
              Ответить
              • «КОТОМ» и «Fike» - файки стертора, косящие под нормального.
                Ответить
                • показать все, что скрытоvanished
                  Ответить
                  • Как это поможет, питушок?
                    Ответить
                    • показать все, что скрытоvanished
                      Ответить
                      • Ты утомишься их банить... Я могу долго создавать впечатление адекватного, а потом внезапно серануть.
                        Ответить
                        • https://youtu.be/zL1PnA698Zc?t=162
                          Ответить
                          • Профессор в данный момент занят обсуждениями на Дзене и ему похуй на вас.

                            https://local.yandex.ru/vladikavkaz/iristonsky
                            Ответить
                            • Меня коробит гипертрофированное лицемерие, на котором базируются все межличностные отношения в Осетии...
                              Отчасти это навеяно переходящими из уст в уста рассказами о том, как коротали время пастухи и колхозники, в эпоху славного СССР: ножки животного помещались за голенища сапог - таким образом, оно было лишено возможности убежать или сопротивляться. С трудом верится, что оскорблённые таким образом начала были с корнем вырваны; нет, этого не было. Они дали жизнь новым поколениям, среди которых, быть может, и вы. Меньше пафоса, господа.
                              Ответить
                              • Меня угнетает, что старших принято... нет, не принято, а они сами настаивают на этом - уважать только за то, что они старше; ещё один наглядный пример демагогии. Я считаю, что аппеляция к возрасту уместна лишь в общественном транспорте (чтобы уступили место). Это вполне объективно: в силу возрастных изменений опорно-связочный аппарат пожилого человека слабее, чем молодого. Они лгут Вам, подстраивая Ваше сознание так, чтобы Вами было удобнее манипулировать.

                                Просто задумайтесь: если человек всю жизнь был негодяем - спишет старость его пригрешения?

                                Посмотрите только, во что превратились наши национальные праздники, где зачастую пожилые, уважаемые люди перебрав с алкоголем демонстрируют недостойное поведение. Особенно я ненавижу праздник Уастырджи. В эти дни я ухожу из дома, чтобы не слышать пьяных криков.
                                Наверняка среди читателей моего поста найдутся "огнедышашие драконы", возмущенные моими словами, в силу инерции не могущие сразу признать мою правоту. Для них отдельный вопрос, ответив на который они смогут оценить уровень своей образованности: господа, как по-Вашему, откуда в нашем родном языке взялось сочетание "джи"? Почему не Уас Георги, а Уастырджи?

                                Суровый Уас Георги вряд ли одобряет, что к нему обращается нетрезвый человек. Не потому ли дела в республике идут из рук вон плохо? И при всём этом у них ещё поворачивается язык обвинять молодежь. Даже Гастан Агнаев бессовестно лжёт, указывая, что в рощу святого Хетага (никакой он не святой, ну да Господь с ним) можно брать с собой алкоголь.

                                Можно написать ещё много-много слов, но это излишне.

                                Давайте отбросим лживые традиции и начнем строить новое общество - объективное, в котором нет места заплесневелым стереотипам.



                                ?
                                Ответить
                          • Хрюкни.
                            Ответить
                  • Я завязал с пхп
                    Ответить
                • Предлагаю не превращаться в параноиков и отвечать только на адекватные сообщения (неважно чьи), а неадекватные игнорировать. Тогда у стерторов сработает рефлекс собаки Павлова и они перевоспитаются.
                  Ответить
                  • показать все, что скрытоvanished
                    Ответить
                    • Но ведь нам похуй.
                      Ответить
                    • Это же фишечка ГК - что каждый несмотря на расу, пол, вероисповедание, уровень знаний C++ и русского языка может поднасрать на этом сайте.
                      Ответить
                      • Где-то описывали схему, где все дружно объединяются в группы по интересам за счёт продвинутой системы фильтрации.
                        Правда, немного жаль, что в отличие от систем с баном тут никак нельзя узнать, забанили ли тебя, читают ли, отвечают/плюсуют/минусуют вручную или скриптами. С другой стороны, если человек с адблоком в голове и профессиональным пофигизмом твои сообщения тупо пролистываешь, ты тоже ничего не узнаешь.
                        Ответить
                  • скажу честно, я не перестану спамить и срать, что бы вы не сделали.
                    Блокировать файки бесполезно - я могу каждый день регать по десятку новых.
                    Ответить
                • > «КОТОМ» и «Fike» - файки стертора, косящие под нормального.
                  как же я сейчас зоорал!
                  Ответить
        • Додик как раз таки ты.
          Мало того, что путаешься в типах так ещё и про разделение памяти не слыхал.

          Слово absolute служит для приведения типов. Итак, ты кастанул структуру в Pointer затем в Integer и скормил полученное значение функции... Отлично.
          Структуры как и строки, имеют счетчик ссылок, который обнуляется, как только переменная выйдет за пределы видимости; после этого объект убивается. Можешь сам представить, что будет, если вариабле INT_OUT_OF_BOUNDS выйдет за приделы процедурыыыыыыыыыыыыыыыыыыыыыыыыыыыыыыыы ыыыыыыы
          Ответить
          • Слово absolute служит для того, чтобы две переменные занимали одну и ту же память. INT_OUT_OF_BOUNDS в данном случае будет равен $FFFFFFFF, так как память занимаемая TPoint будет FFFFFFFFFFFFFFFF. Во втором случае ZERO_ZERO будет забит нулями.
            Ответить
            • Насколько я понимаю, профессор имеет в виду примерно следующее:

              function govno:Integer;
              var
                 P:TPoint;
              begin
                 {что-то делаем...}
                 Result:=lparam(Pointer(P));
              end;


              А теперь вопрос на засыпку:

              1. что случится с памятью на которую ссылается P, когда инструкция выйдет из метода?

              Поскольку клок кода выдран из контекста, я верю, что всё работает как-то так:

              procedure navoz;
              var
              P:TPoint;
              begin
              {что-то делаем...}
              SendMessage(TargetForm.Handle, WM_LBUTTONUP, 0, lparam(Pointer(P)));
              end;
              Ответить
              • У меня TPoint был глобальной константой, а Integer который absolute глобальной переменной.

                Но вообще в делфи абсолютно все константы, даже локальные, находятся в памяти всегда (именно константы). Так что указатель на константу в любом случае тухлым быть не может.
                Ответить
                • @@У меня TPoint был глобальной константой, а Integer который absolute глобальной переменной.

                  Ох, лучше бы ты этого не говорил... Тебя говном закидают, ступай отсюда.


                  Вообще, я люблю делфи не только за интерфейсность, а и за то, что на нем кодят многие подростки. Появляется общая тема сперва для общения, потом... Ну, короче пару раз соснуть не пидорство.
                  Ответить
                • Типизированная константа вообще не константа, а беременная.
                  Ответить
    • В первом и втором варианте, походу, только X попал в результат? У поинта же поля по 4 байта?
      Ответить
      • Хрюкни.
        Ответить
      • Может там по 16 бит на координату? Всё-таки для точки на экране 32 будет многовато. Я вроде бы даже в каком-то бейсике встречал как координаты клика возвращались в виде 32 битного инта, 16 бит на x и 16 на y, чтобы получить сами координаты приходилось заниматься байтоёбством.
        Ответить
        • Так точно. Координаты приходят в «lParam», который нужно разбить по 2 байта. Нужно использовать специальные мокросы, чтобы избежать багра, когда более 1 монитора.
          Ответить
        • В lparam'е то они по 2 байта, это понятно. А в point'е?
          Ответить
          • Хз, это у автора надо спрашивать, я бы сделал как в lparam для удобства.
            Ответить
        • 65536 пикселей хватит на всех? Ну, пока даже с разговорами о 8K запас есть, но когда-нибудь вопрос встанет...

          И кстати, вы уверены, что координаты не могут быть отрицательные? Если два монитора, и вторичный расположен слева. Бывают программы, которые от этого глючат.
          Ответить
          • Интересно, что будет, если винде подсунуть 10 8К моников, или один большой?
            Ответить
          • Координаты и без двух монитором могут быть отрицательные, если например это координаты относительно окна или кусок окна за экраном. А так же все свёрнутые окна на самом деле выпиннываются в -32536,-32535.
            Ответить
      • А вообще, рекомендую не помогать стертору, а слать его нахуй.
        Ответить
        • Профессор далёк от коммерческого кодинга да и сама задача - эмулирование меню, скажем так, плохо пахнет.

          Это не стертор.
          Ответить
      • Да. Там X разделился и на X и на Y. Но по факту и там и там оно делилось либо на FFFF и FFFF или на 0000 и 0000. Надо было в SmallPoint тогда уж) Но я с температурой был, вообще плохо думалось.
        Ответить
    • показать все, что скрытоvanished
      Ответить
    • бельМес
      циМес
      заМес
      гудерМес
      говноМес
      Ответить
    • "Привет! я помогу тебе найти жилье, или найти арендаторов.",
      Ответить

    Добавить комментарий