Окрашивание с ini файла

unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, ExtCtrls, IniFiles, Menus;
 
type
  TForm1 = class(TForm)
    ComboBox1: TComboBox;
    Button1: TButton;
    Memo1: TMemo;
    Label1: TLabel;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    FontDialog1: TFontDialog;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
 
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  Ini:TIniFile;
  sFile:string;
  s:string;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
const
  Size = 100; //Наибольшее возможное количество групп.
  D = ['0', '1'];
var
  S : String;
  ArrPos : array[1..Size] of Integer;
  ArrStr : array[1..Size] of String;
  i, Len, Cnt, CntMin, Ind : Integer;
begin
Memo1.Clear;
 S := ComboBox1.Text;
  Len := Length(S);
  CntMin := Len;
  Cnt := 0;
  Ind := 0;
  for i := 1 to Len do begin
    //Пропускаем символы, не принадлежащие множеству D.
    if not (S[i] in D) then Continue;
    //Подсчёт элементов в группе.
    Inc(Cnt);
    //Отслеживаем конец очередной группы.
    if (i = Len) or (S[i] <> S[i + 1]) then begin
      //Если найдена более короткая группа.
      if Cnt < CntMin then begin
        CntMin := Cnt;
        Ind := 1; //Начинаем записывать сначала.
        ArrPos[Ind] := i - Cnt + 1; //Позиция самой короткой группы.
        ArrStr[Ind] := Copy(S, i - Cnt + 1, Cnt); //Группа.
      //Если найдена группа, равная по размеру текущей самой короткой группы.
      end else if Cnt = CntMin then begin
        Inc(Ind); //Добавляем группу.
        ArrPos[Ind] := i - Cnt + 1; //Позиция очередной самой короткой группы.
        ArrStr[Ind] := Copy(S, i - Cnt + 1, Cnt); //Группа.
      end;
      Cnt := 0; //Сброс счётчика.
    end;
  end;
 
  //Ответ.
  if Ind > 0 then begin
    Memo1.Lines.Add('Наименьшая длина группы = ' + IntToStr(CntMin)
      + #13#10'Всего групп: ' + IntToStr(Ind));
    Memo1.Lines.Add('Список самых коротких групп:');
    for i := 1 to Ind do
      Memo1.Lines.Add('Позиция: ' + IntToStr(ArrPos[i])
        + ', группа: "' + ArrStr[i] + '".');
  end else
    Memo1.Lines.Add('В строке нет групп.');
end;
 
 
 
procedure TForm1.FormCreate(Sender: TObject);
var
  APchar: array[0..254] of Char;
begin
//Формирование имени каталога Windows
  GetWindowsDirectory(APchar, 255);
//Формирование имени ini-файла в каталоге Windows
  sFile := string(APchar) + '\My.ini';
  if FileExists(sFile) then
 
   begin
    Ini := TIniFile.Create(sFile);
    Font.Name := Ini.ReadString('Параметры','Шрифт', 'MS Sans Serif');
    Font.color := stringtocolor( Ini.ReadString('Параметры' , 'Цвет шрифта', colortostring( Font.color )));
    Font.Size := ini.ReadInteger('Параметры' , 'Размер шрифта' , font.Size);
   end;
label1.Caption :='Выберите строку:';
Memo1.Clear;
end;
 
 
procedure TForm1.Button2Click(Sender: TObject);
var f : File;
begin
  if (not FileExists(sFile)) then
  begin
    AssignFile (f, sFile);
    Rewrite(f);
    CloseFile(f);
    Ini := TIniFile.Create(sFile);
  end;
 
  Ini.WriteString('File','main', ParamStr(0));
  Ini.WriteString('Параметры', 'Шрифт', Font.Name);
  Ini.WriteString('Параметры' , 'Цвет шрифта' , colortostring(Font.color));
  Ini.Writeinteger('Параметры' , 'Размер шрифта' , font.Size);
end;
 
 
 
 
procedure TForm1.Button3Click(Sender: TObject);
var F : File;
begin
 
  if FileExists(sFile) then
  begin
    AssignFile(F, sFile);
    Erase(F);
  end
end;
 
 
procedure TForm1.Button4Click(Sender: TObject);
begin
  if (FontDialog1.Execute) then
  begin
    Font.Assign(FontDialog1.Font);
    if (Ini<>nil) and Ini.ValueExists('Параметры','Шрифт')
    then
    Ini.WriteString('Парметры','Шрифт', Font.Name);
  end;
    begin
    Font.Assign(FontDialog1.Font);
    if (Ini<>nil) and Ini.ValueExists('Параметры','Размер шрифта')
    then
    Ini.WriteInteger('Парметры','Размер шрифта', font.Size);
  end;
end;
 
 
 
procedure TForm1.FormDestroy(Sender: TObject);
begin
   if (Ini = nil) then Exit;
   Ini.UpdateFile;
   Ini.Free;
end;
 
 
end.
Прога считывает настройки с ini файла, к примеру там записано [File] main=H:\Универ\Семестр 3\Delphi\Задания\Лаба 10\Project1.exe [Параметры] Шрифт=Courier Цвет шрифта=clRed Размер шрифта=12Прогу запускаю, но окрашиваются не все кнопки, как сделать что бы и кнопки окрашивались? И еще, как сделать что бы файл записывался в текущий коталог где прога запустилась? GetWindowsDirectory(APchar, 255); Убирал данную строку не помогает всеравно в виндовс создает[IMG]http://s1.********************/uploads/images/2012/12/d5870d6713d32d8c92e82c91b6ab1013.jpg[/IMG]
14 ответов

окрашиваются не все кнопки
Кури ParentFont


а что кнопки можно окрасить? оО и цвета я бы сохранял как Integer, а не как String, так как цвет имеет тип целого числа на счет чтобы файл в текущей директории был
ExtractFilePath(ParamStr(0))+'inifile.ini'


mss, Уже везде их выкурил, но про цвет там ничего не нашел , работающего) Arcor, Ругается, [Error] Unit1.pas(103): Statement expected, but expression of type 'String' found Ну я имел в виду, окрасить текст на кнопках, мб вы что то другое подумали или так тоже нельзя с ини файла?


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


ппц.в этой строке
Font.color := stringtocolor( Ini.ReadString('Параметры' , 'Цвет шрифта', colortostring( Font.color )));
цвет фонта какого контрола ты устанавливаешь, спрашивается ?


Arcor, когда поменял строку записи файла на вашу)mss, цвет текста из ини файла, Ini.WriteString('Параметры' , 'Цвет шрифта' , colortostring(Font.color));


Font.color := stringtocolor( Ini.ReadString('Параметры' , 'Цвет шрифта', colortostring( Font.color )));
ничего не произойдет


цвет текста из ини файла
ппц.какие же тогда у тебя "кнопки окрашиваются", если не все ? где у тебя строка кода, которая якобы "окрашивает" какие-то там "не все кнопки" ?)


Font.color := stringtocolor( Ini.ReadString('Параметры' , 'Цвет шрифта', colortostring( Font.color ))); Данная строка, как я понимаю и окрашивает текст в программе!


Данная строка, как я понимаю и окрашивает текст
Так ведь текст !! А не кнопку)..
в программе
Не в "программе", а выводимый на форму и, в том числе, во все контролы, лежащие непосредственно на этой форме, у которых ParentFont = True.Я про ParentFont стенке тут говорил, да ?


mss, Уже везде их выкурил, но про цвет там ничего не нашел , работающего)
Везде ParentFont стоит в тру.
Ну я имел в виду, окрасить текст на кнопках, мб вы что то другое подумали или так тоже нельзя с ини файла?


Чужая цитата:
у Button цвет текста не меняется, для этого используйте BitBtn


DaMortum, спасибо, не знал.Так что по поводу директории?? не удобно как то в виндовс всегда лазить


я же написал как, вот тут Окрашивание с ini файлапокажи как ты используешь эту строку что оно не работаетвот у меня почему-то работает
Ini := TIniFile.Create(ExtractFilePath(ParamStr(0))+'inifile.ini');