Конференция "KOL" » Не появляются кнопки при создании формы [Delphi]
 
  • CBR919RR © (20.12.11 17:34) [0]
    Вот код
    program Test_Kol;
    {$DEFINE USE_MHTOOLTIP}

    uses
     kol,
    {  messages,}
     windows;

    const
     faY = 32;

    var
     MainForm : PControl;
     fbBut : array of PControl;
     colBut : Integer;
     IniFileName : AnsiString;

    function MyMax(const A, B: Integer): Integer;
    begin
     if A > B then Result := A
     else Result := B;
    end;

    procedure ButtonMyClick(Dummy : Pointer; Sender : PControl);
    begin
     Text2Clipboard(Sender.Caption);
     MsgOK( 'Hello! ' + Sender.Caption);
    //  Clipboard.AsText := (Sender as TButton).Hint;
    end;

    procedure MainIniWork(Write: Boolean);
    var
     Ini : PIniFile;
     sec : PStrList;
     i, tmp, fiCol, fiRow,
     ic, ir, ih, iw :Integer;
     b : Boolean;
    begin
     tmp := -1;
     fiCol := 0;
     fiRow := 0;

     Ini := OpenIniFile(IniFileName);
     Ini.Section := 'Form';
     if Write then begin
       Ini.Mode := ifmWrite;
     end;
    //  MsgBox(Int2Str(MainForm.Top) + ' ' + Int2Str(MainForm.Left), MB_OK + MB_ICONINFORMATION);
     MainForm.Top  := Ini.ValueInteger('Top',  MainForm.Top);
     MainForm.Left := Ini.ValueInteger('Left', MainForm.Left);
     ih := Ini.ValueInteger('ButHeight', 45);
     iw := Ini.ValueInteger('ButWidth', 129);

     // если не запись, то читаем массив кнопок, создаем их и все настраиваем
     if not Write then begin
       b := Ini.ValueBoolean('Hints', True);
       sec := NewStrList;
       // получаем список секций
       Ini.GetSectionNames(sec);
       // находим и удаляем секцию [Form]
       for i := 0 to sec.Count - 1 do if sec.Items[i] = 'Form' then tmp := i;
       if tmp > -1 then begin
         sec.Delete(tmp);
       end;
    //    MsgBox(sec.Text, MB_OK + MB_ICONINFORMATION);
       // запомним количнство кнопок для последующего удаления
       colBut := sec.Count;
       SetLength(fbBut, colBut);
       for i := 0 to colBut - 1 do begin
         // меняем секцию на кнопошную
         Ini.Section := sec.Items[i];
         ic := Ini.ValueInteger('Col', 0);
         ir := Ini.ValueInteger('Row', 0);
         fbBut[i] := NewButton(MainForm, Ini.ValueString('Caption', 'Отсутствует надпись'));
         fbBut[i].SetPosition(4 + (ic * iw), 4 {+ faY} + (ir * ih));
         fbBut[i].SetSize(iw, ih);
         fbBut[i].ResizeParent;
    //      fbBut[i].Hint := Ini.ValueString('Value', 'Отсутствует надпись');
    //      fbBut[i].ShowHint := b;

         fbBut[i].OnClick := TOnEvent(MakeMethod(nil, @ButtonMyClick));
         fiCol := MyMax(fiCol, ic);
         fiRow := MyMax(fiRow, ir);
       end;
       MainForm.SetClientSize(8 + ((fiCol + 1) * iw), 8 {+ faY} + ((fiRow + 1) * ih));
       sec.Free;
     end;
     Ini.Free;
    end;

    procedure MainDestroy(Dummy: Pointer; Sender: PObj);
    begin
    //  MsgBox('Destroy ' + Int2Str(MainForm.Top) + ' ' + Int2Str(MainForm.Left), MB_OK + MB_ICONINFORMATION);
     MainIniWork(True);
    end;

    begin
     IniFileName := ChangeFileExt(ParamStr(0), '.ini');
     Applet := NewApplet('Данные в буфер');
     MainForm := NewForm(Applet, 'To');
     MainForm.Visible := False;
     MainForm.CreateWindow;

     MainIniWork(False);
     MainForm.OnDestroy := TOnEvent(MakeMethod(nil, @MainDestroy));
     MainForm.Show;
     Run(Applet);
     SetLength(fbBut, 0);
     Applet.Free;
     IniFileName := '';
    end.



    В ини файле типа такого

    [Form]
    Top=575
    Left=2
    Hints=1
    ButHeight=45
    ButWidth=129
    High=0

    [b1]
    Caption=ИНН
    Value=1234567890
    Col=0
    Row=0

    [b2]
    Caption=КПП
    Value=0987654321
    Col=0
    Row=1

    [b3]
    Caption=БИК
    Value=04687921
    Col=0
    Row=2

    [b4]
    Caption=БАНК
    Value=Банк какойто
    Col=0
    Row=3

    [b5]
    Caption=Кор Счет
    Value=3654789654123654
    Col=0
    Row=4

    должны создаться пять кнопок в ряд,
    а на месте кнопок прямоугольниками с видом под формой.
    да и при закрытии формы в полях Left и Top цифры которые прочитались при создании формы из ини файла
    а если добавляю OnMove и вывожу в Caption параметры лефт и топ то при закрытии формы все ок сохраняется если он мув не обрабатываю то косячина какаято непонятная.
    так и не понял как эти лефт и топ действуют.

    так же не понял как включить туллтип говорит что нету свойства хинт

    вот решил перевести утилитку с VCL на KOL вроде все просто а грабли везде.
  • RusSun © (21.12.11 05:37) [1]
    Доброе время суток.
    У меня кнопки появляются.D7 XP SP3.
    http://zalil.ru/32332762

    > так и не понял как эти лефт и топ действуют.

    сделай поиск по форуму.

    как включить туллтип говорит что нету свойства хинт
    к примеру хинт можно добавить так
    http://zalil.ru/32332773
    А так же снова можно сделать поиск по форуму
  • RusSun © (21.12.11 05:39) [2]
    kolmck.net/Components/HintRA.zip
    kolmck.net/Components/KOLMHToolTip.rar
    kolmck.net/Components/ApiToolTipsSimple.zip
    kolmck.net/Components/ApiToolTips.zip
  • RusSun © (21.12.11 18:37) [3]
    http://zalil.ru/32336882
    размер и положение.
    Предпочитаю с реестром не связываться.
  • CBR919RR © (22.12.11 16:03) [4]
    У меня в семерке и в висте тоже появляются, а в XP SP2 почемуто нет.
    Я тоже предпочитаю с реестром не связываться, я все в Ini файлах стараюсь хранить.

    За пример спасибо, но это получается почти голый винапи, я такими темпами могу это на C++ написать без всяких библиотек.
    Зачем тогда есть Left и Top если ими не пользоваться.
  • RusSun © (22.12.11 18:38) [5]

    > У меня в семерке и в висте тоже появляются, а в XP SP2 почемуто
    > нет.

    InitCommonControls; ?


    > ... Зачем тогда есть Left и Top если ими не пользоваться.

    Думаю может кто-нибудь по опытнее меня что-нибудь вам посоветует:)
  • RusSun © (30.12.11 03:44) [6]
  • RusSun © (30.12.11 03:47) [7]
    нормальный > У меня в семерке и в висте тоже появляются
    http://s1.ipicture.ru/Gallery/Viewfull/7671682.html
    и в XP SP2
    http://s1.ipicture.ru/Gallery/Viewfull/7671691.html
  • CBR919RR © (15.02.12 21:04) [8]
    Нашел как сохранить позицию формы, не через WinApi, а средствами KOL,
    просто оказалось надо все сохранять в OnClose.
    В VCL все делал в OnDestroy. А в Kol там уже видимо ничего нет.
    Так что смысл в Left и Top все таки есть.
 
Конференция "KOL" » Не появляются кнопки при создании формы [Delphi]
Есть новые Нет новых   [119246   +9][b:0.005][p:0.003]