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

    +103

    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
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    var
      resStream: TResourceStream;
      memStream: TMemoryStream;
      DLL: THandle;
      tempFile: string;
    
      excel: variant;
      wbook: OLEVariant;
    begin
      if not IsOLEObjectInstalled('Excel.Application') then
        begin
          MessageBox(Handle, PChar('Для открытия фаблонов форм необходимо установить'+#13+
                                   'Microsoft Excel'), 'Ошибка загрузки формы.', MB_ICONINFORMATION);
          exit
        end;
      tempFile := extractFilePath(paramStr(0))+'DATA\PLUGINS\$temp$.xxx';
      if ListView1.Selected = nil then exit;
      if not FileExists(ListView1.Selected.SubItems.Strings[2]) then exit;
      DLL := loadLibrary(PChar(ListView1.Selected.SubItems.Strings[2]));
      if DLL = INVALID_HANDLE_VALUE then begin
                                           freeLibrary(DLL);
                                           exit
                                         end;
      resStream := TResourceStream.Create(DLL, 'FORMA', MakeIntResource(10));
      memStream := TMemoryStream.Create;
      memStream.LoadFromStream(resStream);
      if fileExists(tempFile) then deleteFile(tempFile);
      memStream.SaveToFile(tempFile);
      setFileAttributes(PChar(tempFile), FILE_ATTRIBUTE_HIDDEN or
                                         FILE_ATTRIBUTE_TEMPORARY);
      memStream.Free;
      resStream.Free;
      freeLibrary(DLL);
    
      excel := createOLEObject('Excel.Application');
      excel.Visible := TRUE;
      wbook := excel.Workbooks.Open(tempFile)
    end;

    когда-то кому-то в дипломнике вот такое написал. с понтом - подключаем плагины и они в эксель выводят программно новые виды форм. хотя экселевский файл тупо вкомпилен в ресурс библиотеки

    Запостил: ganja_boy, 24 Мая 2010

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

    • MessageBox(Handle, PChar(...), ...)
      ListView1.Selected
      Автору надо или трусы надеть или крест снять.
      Ответить
      • Мне так приходилось делать. Чтобы в процедуру передавать компонент, в заголовок которого выводится какая-то информация о процессе обработки. В общем, передавать TCaption нельзя, передавать обобщённый TComponent не вышло, так как у одних текст - это Caption, у других - Text, у третьих такого свойтства нет (хотя у самого окна есть). Ничего лучше передачи хэндла не подошло.
        Ответить
        • а как в дельфи с ретроспекцией (отражением)? что бы определить, у кого Caption у кого Text

          а вообще за такую неоднородность делал бы с разрабами что нибудь плохое, пока бы не взялись за ум
          Ответить
          • >>>ретроспекцией

            facepalm.php
            хоть бы не позорился банальнейшим незнанием терминологии
            Ответить
    • MessageBox(Handle, PChar(...), ...) - че не так-то?
      Handle - глобальный хендл окна формы. мессаджбокс будет от него. PChar(...) какбэ приведение типов. коряво, ну а че такого-то?
      Ответить
      • >фаблонов форм

        КО - правильно, коровы...
        Ответить
      • Ибо в VCL есть Application.MessageBox, который сам разбирается с Handle'ом и PChar'ами.
        Ответить
        • дорогой друк, Application хендл-то знает, а вот с анси-чарами сам не разбирается. так-то
          Ответить

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