1. Уважаемые гости и пользователи форума.
    Администрация настоятельно рекомендует не регистрировать несколько аккаунтов для одного пользователя. При выявлении наличия мультиаккаунтов будут заблокированы все учетные записи данного пользователя.
    Аккаунты, зарегистрированные на временную почту будут также заблокированы.

Вопросы и решения

Тема в разделе "Архив", создана пользователем LexBell, 3 авг 2011.

Статус темы:
Закрыта.
  1. Он где то тут Администратор

    Регистрация:
    15 июн 2011
    Сообщения:
    729
    Симпатии:
    455
    Вроде нету. Но 50% что есть либо аналог, либо самописная функция. Последнее можно либо найти на просторах интернета, либо самому написать.
     
  2. Ветеран Проверенный

    Регистрация:
    28 июн 2011
    Сообщения:
    169
    Симпатии:
    226
    Пол:
    Мужской
    она там не нужна. для вызыва функции ставь stdcall и все.
    например
    Код (Text):
    function EnumWindowsProc (Wd: HWnd; Param: LongInt): Boolean; stdcall;
    begin
    ...
    end;
    ..
    EnumChildWindows(handle, @EnumWindowsProc, 0);
     
    Snoopak96 нравится это.
  3. Ветеран Проверенный

    Регистрация:
    1 июл 2011
    Сообщения:
    351
    Симпатии:
    188
    Krinkels,
    David.D.Rocco, Спасибо за ответы
     
  4. Ветеран

    Регистрация:
    26 дек 2011
    Сообщения:
    144
    Симпатии:
    29
    Можно ли получить имя компонента чужого окна, зная его handle? Именно имя, не класс.
     
    Hachapury нравится это.
  5. Борода Модератор

    Регистрация:
    15 июн 2011
    Сообщения:
    723
    Симпатии:
    540
    Пол:
    Мужской
    Добрый день. Заранее прошу прощения за нубскую просьбу, но вот не делал никогда, и примеров не нашел.
    Нужно сделать компоненту, производную от TPageControl, которая на своих TTabSheet содержит TRichEdit с включеным свойством align := alclient;.
    То-есть, создаешь TTabSheet а там уже свой TRichEdit во весь TTabSheet. Может кто-нибудь сделать и откоментировать, пожалуйста?
     
  6. Ветеран Проверенный

    Регистрация:
    1 июл 2011
    Сообщения:
    351
    Симпатии:
    188
    Gnom, Пример
    ЗЫ: Скомпилешь и нажмешь на кнопку и увидишь свой нужный результат!
     
  7. Ветеран Проверенный

    Регистрация:
    1 июл 2011
    Сообщения:
    351
    Симпатии:
    188
    Парни, такой вопрос, у меня в проекте используются две формы: Form1 и Form2
    Теперь к вопросу: как сделать, чтобы Form2 была позади Form1, чтобы она не перекрывала Form1 при клике на нее (Form2)?
    Я конечно делал по другому, но у меня происходили мерцания так как я не давал возможно Form2 сделаться активной, заметил что в Inno Setup MainForm находится позади WizardForm и при клики на MainForm она не становится активной.
     
  8. Борода Модератор

    Регистрация:
    15 июн 2011
    Сообщения:
    723
    Симпатии:
    540
    Пол:
    Мужской
    AVMan, во первых - в Inno MainForm является родителем WizardForm, посмотри в исходниках - там должен быть ответ на твой вопрос. Можно попробовать стиль noactivate (не ручаюсь за орфографию :) ) для заднего окна. Переназначать родителя для окна WizardForm не советую - будет очень криво.
     
    GVS276 нравится это.
  9. Ветеран Проверенный

    Регистрация:
    1 июл 2011
    Сообщения:
    351
    Симпатии:
    188
    Gnom, Ага, блин забыл про обработчик OnActivate, теперь нет мерцаний, спс
    Код выглядет как то так:
    [SOURCE="iss"]procedure TForm1.Button4Click(Sender: TObject);
    begin
    Form2.OnActivate:= FormActivate;
    end;

    procedure TForm1.FormActivate(Sender: TObject);
    begin
    Form1.Show;
    end;[/SOURCE]
     
  10. Ветеран

    Регистрация:
    3 сен 2011
    Сообщения:
    128
    Симпатии:
    149
    появился у меня один вопрос. пишу простенькую программку для хранения паролей, логинов и дополнительной информации для сайтов и тут столкнулся с проблемой. вся информация сохраняется путем добавления строк в listview в стиле vsReport. сохранять пароли то сохраняет в текстовый файлик, а вот обратно загрузить не хочет.

    код сохранения
    Код (Text):
    procedure TForm2.N5Click(Sender: TObject);
    var
    S : TStringList;
    i: integer;
    begin
    if SaveDialog1.Execute then
    S := TStringList.Create;
      for i := 0 to ListView1.Items.Count-1 do
      S.Add('"'+ ListView1.Items[i].Caption +'",'+ ListView1.Items[i].SubItems.CommaText);
      S.SaveToFile(SaveDialog1.FileName);
      S.Free;
    end;
    и код загрузки, который не работает:
    Код (Text):
    procedure TForm2.N3Click(Sender: TObject);
    var
    S: TStringList;
    I: integer;
    begin
    if OpenDialog1.Execute then
    S := TStringList.Create;
      for i := 0 to ListView1.Items.Count-1 do
      S.Add('"'+ ListView1.Items[i].Caption +'",'+ ListView1.Items[i].SubItems.CommaText);
      S.LoadFromFile(OpenDialog1.FileName);
      S.Free;
    end;
    скрин программы
    [​IMG]
    может кто сможет помочь.
    PS: знаю что код корявый, но что поделать, только учусь :)
     
  11. Безумный Лорд Администратор

    Регистрация:
    15 июн 2011
    Сообщения:
    720
    Симпатии:
    1.042
    Пол:
    Мужской
    А почему он должен работать? Ведь ты не заполняешь свой ListView1.
    Вот примерный код, писал на коленке и не проверял, но основная мысль думаю будет понятна.
    Код (Text):
    procedure TForm2.N3Click(Sender: TObject);
    var
    S: TStringList;
    I, k: integer;
    li: TListItem;
    tmp, cmtext: string;
    begin
      if OpenDialog1.Execute then begin
        S := TStringList.Create;
        S.LoadFromFile(OpenDialog1.FileName);    
        for i := 0 to ListView1.Items.Count-1 do begin
          tmp:= S.Strings[i];
          k:= Pos(',', tmp);
          cmtext:= RemoveQuotes(Trim(Copy(tmp, 1, k-1)));
          Delete(tmp, 1, k);
          li:= ListView1.Items.Add;
          li.Caption:= cmtext;
          li.SubItems.CommaText:= Trim(tmp);
        end;
        S.Free;
      end;  
    end;
     
    Hachapury нравится это.
  12. Ветеран

    Регистрация:
    3 сен 2011
    Сообщения:
    128
    Симпатии:
    149
    Shegorat, ну работает, но у меня ругается на эту строку
    Код (Text):
    cmtext:= [COLOR="Red"][B][U]RemoveQuotes[/U][/B][/COLOR](Trim(Copy(tmp, 1, k-1)));
    но если убрать RemoveQuotes оно открывает, хоть и с офыбкой
     
  13. Новичок

    Регистрация:
    5 апр 2012
    Сообщения:
    20
    Симпатии:
    19
    Hachapury, Вот так попробуй:
    Код (Text):

    procedure TForm2.N3Click(Sender: TObject);
    var
    S: TStringList;
    I, k: integer;
    li: TListItem;
    tmp, cmtext: string;
    begin
    try
      if OpenDialog1.Execute then begin
        S := TStringList.Create;
        S.LoadFromFile(OpenDialog1.FileName);
        for i:= 0 to S.Count do begin
          tmp:= S.Strings[i];
          k:= Pos(',', tmp);
          cmtext:= Trim(Copy(tmp, 1, k - 1));
          cmtext:= StringReplace(cmtext, '"', '', [rfReplaceAll, rfIgnoreCase]);
          Delete(tmp, 1, k);
          li:= ListView1.Items.Add;
          li.Caption:= cmtext;
          li.SubItems.CommaText:= Trim(tmp);
        end;
        S.Free;
      end;
    except end;
    end;
     
    Код (Text):

    procedure TForm2.N5Click(Sender: TObject);
    var
    S : TStringList;
    i: integer;
    begin
    if (SaveDialog1.Execute) and (Length(SaveDialog1.FileName) > 0) then begin
    S := TStringList.Create;
      for i := 0 to ListView1.Items.Count-1 do
      S.Add('"'+ ListView1.Items[i].Caption +'",'+ ListView1.Items[i].SubItems.CommaText);
      S.SaveToFile(SaveDialog1.FileName);
      S.Free;
    end;
    end;
     
     
  14. Новичок

    Регистрация:
    5 апр 2012
    Сообщения:
    20
    Симпатии:
    19
    Столкнулся с одной проблемой при парсинге сайтов. Если кодировка у страницы сайта UTF-8, то в исходнике, вместо русских букв, появляются знаки вопросов. Вот код:
    Код (Text):

    function GetSourceHtml(URL: AnsiString): AnsiString;
    var
      idHttp1: TIdHttp;
    begin
      idHttp1:= TIdHttp.Create(Form1);
      if Pos('http://', URL) = 0 then URL:= 'http://' + URL;
      Result:= idHttp1.Get(URL);
    end;

    procedure Parse(URL: AnsiString);
    begin
      Form1.Memo1.Clear;
      Source:= GetSourceHtml(URL);
      Form1.Memo1.Lines.Add(Source);
    end;

    procedure TForm1.Button1Click(Sender: TObject);
    begin
      Parse(Edit1.Text);
    end;
     
    Пытался кодировать исходник из UTF-8 в Ansi (ф-я cp1251ToAnsi), знаки вопросов не исчезают. Компилятор Delphi XE2 Upd4. Выручайте :-[

    UPD: Разобрался
     
    Последнее редактирование: 11 май 2012
  15. Борода Модератор

    Регистрация:
    15 июн 2011
    Сообщения:
    723
    Симпатии:
    540
    Пол:
    Мужской
    На семерке при нажатии сочетания Ctrl-Alt-Del появляется окно - сменить пользователя, диспечер задач, еще какие-то пункты.
    Вопрос - какое сообщение проходит, при появлении этого окна? Как его поймать?
    P.S. сообщения WM_QUERYENDSESSION, WM_ENDSESSION, WM_USERCHANGED - не то, полноценного выхода пользователя не происходит, соответственно этих сообщений еще нет.
     
  16. Новичок

    Регистрация:
    15 янв 2012
    Сообщения:
    32
    Симпатии:
    2
    Ребят недавно написал библиотеку для программного управления вордом
    Использовал неявную загрузку модуля...В принципе всё работает однако после закрытия,прога выдает ошибки типа
    Runtime error 216 at 00BE24C6E
    Код (Text):

    unit Unit1;

    interface

    uses
      Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
      Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

    type
      TForm1 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);

         private
        { Private declarations }
      public
        { Public declarations }
      end;

    var
      Form1: TForm1;

    implementation

    {$R *.dfm}
    Function CreateWord:boolean;stdcall;
        external 'Project1.dll' name 'CreateWord';

    procedure TForm1.Button1Click(Sender: TObject);
    begin
    CreateWord;
    end;

    procedure TForm1.Button2Click(Sender: TObject);
    begin
    CreateWord;
    end;

    end.
     
    [​IMG]
     
    Последнее редактирование: 24 май 2012
  17. Борода Модератор

    Регистрация:
    15 июн 2011
    Сообщения:
    723
    Симпатии:
    540
    Пол:
    Мужской
    Нужен код длл. Навскидку - забываешь что-то выгрузить при выходе. Точнее - вообще не выгружаешь - в длл создай процедуру деинициализации и там аккуратно разрушай все, что создаешь в CreateWord.
     
    deaddima нравится это.
  18. Новичок

    Регистрация:
    15 янв 2012
    Сообщения:
    32
    Симпатии:
    2
    Вот dll
    Код (Text):

    library Project1;

    { Important note about DLL memory management: ShareMem must be the
      first unit in your library's USES clause AND your project's (select
      Project-View Source) USES clause if your DLL exports any procedures or
      functions that pass strings as parameters or function results. This
      applies to all strings passed to and from your DLL--even those that
      are nested in records and classes. ShareMem is the interface unit to
      the BORLNDMM.DLL shared memory manager, which must be deployed along
      with your DLL. To avoid using BORLNDMM.DLL, pass string information
      using PChar or ShortString parameters. }

    uses
      System.SysUtils,
      System.Classes,
      comObj,Windows;

    {$R *.res}
    var W:variant;
        CreatedWord:boolean;
    Function CreateWord:boolean;stdcall;
    begin
    CreateWord:=true;
    CreatedWord:=true;
    try
    W:=CreateOleObject('Word.Application');
    except
    CreateWord:=false;
    CreatedWord:=false;
    end;

    end;
    exports CreateWord;
    begin
    end.
     
    Ты говоришь создать процедуру деинициализации....а чего dll?
    Я знаю была у меня где-то процедура для закрытия dll но она для явной загрузки и то в главном юните
    На счёт закрытия word'a нет проблем...
     
  19. Борода Модератор

    Регистрация:
    15 июн 2011
    Сообщения:
    723
    Симпатии:
    540
    Пол:
    Мужской
    Ты создаешь Объект и нигде его не разрушаешь. а исходя из того, что он подключается к твоему приложению, а твое приложение подключается к третьему приложению... в общем при выходе начинаются попытки закрыть объекты, которые уже не существуют... если грубо - напиши в дллку процедуру такого содержания :
    Код (Text):
    W:= nil;
    и вызывай ее при выходе из приложения. запросто может помочь.
     
    Последнее редактирование: 24 май 2012
    deaddima нравится это.
  20. Новичок

    Регистрация:
    15 янв 2012
    Сообщения:
    32
    Симпатии:
    2
    Gnom, Вобщем начал я писать процедуру на закрытия ворда
    состоит из 2 строк
    W.Quit;
    W:=UnAssigned;
    [HR][/HR]
    При компеляции бьет ошибку [DCC Error] Unit2.pas(28): E2003 Undeclared identifier: 'UnAssigned'
    Если писать без dll т.е. в главном юните то ошибка изчезает
    у автора тоже идет эта ошибка однако он как-то откомпелировал dll
     
Статус темы:
Закрыта.

Поделиться этой страницей