Aplikace
uc_heb1.pas:
unit Uc_heb1;
interface
uses
WinTypes, WinProcs, Messages, ExtCtrls, Dialogs,
StdCtrls, Controls, Graphics, Gauges, Classes,
Forms, Menus, SysUtils,
Uc_obr2,vyslheb, jmeno, book, Buttons,
uspech,testfnt, Napoveda,antiwin,otviram,
functions, konstanty,
FileCtrl;
type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
....
allBigger1: TMenuItem;
...
end.
implementation ...
testy.pas:
unit Testy;
interface
uses
WinTypes, WinProcs, Messages, ExtCtrls, Dialogs,
StdCtrls, Controls, Classes, // Graphics, Gauges,
Forms, Menus, SysUtils,
Uc_obr2,vyslheb, jmeno, book, Buttons,
// uspech,testfnt, Napoveda,antiwin,otviram,
functions, konstanty,
FileCtrl;
type
TTesty = class(TForm)
private
dir : string;
i: integer;
Nic: TMenuItem;
N1: TMenuItem;
langMenuItems : array of TMenuItem;
SubMenuItems : Array of TMenuItem;
SubMenuItemsLoaded : Array [0..maxTestItems-1] of boolean;
TestyDirs, SubDirs : TStringList; // for folders search
procedure readINI;
procedure writeINI;
procedure JazykyInitiate;
procedure DynMenu;
procedure upravmenu;
public
allBigger, skipFontTest, fontSizeSmall, fontSizeNormal, fontSizeLarge,
difficultyEasy, difficultyNormal, difficultyHarder, difficultyHard,
testyDirFound : Boolean;
TestyDir : string;
fileMenu: array [0..maxRecentFiles-1] of string;
JazykyIndexy : TStrings;
Jazyky : Array [0..maxTestItems-1] of string; // Language names ... associated with JazykyFolders
JazykyFolders : Array [0..maxTestItems-1] of string; // Folder names associated with Jazyky menu items
JazykySelected : Array [0..maxTestItems-1] of string; // Jazyky sub-folder folder specification
end;
implementation
procedure TTesty.upravmenu;
var curFile: TMenuItem;
i : integer;
begin
for i:=1 to maxRecentFiles do
begin
if i=1 then
begin
if fileMenu[0]<>'' then N1.visible:=true
else N1.visible:=false;
end;
curFile := FindComponent('file'+IntToStr(i*10 + 1)) as TMenuItem;
if fileMenu[i-1]<>'' then
begin
curFile.visible := true;
curFile.caption:=extractfilename(fileMenu[i-1]);
end
else
curFile.visible := false;
end; // end for
end;
procedure TTesty.readINI;
var line: String;
f:textfile;
i, c, size: integer;
TestFolderInfo: TStrings;
begin
if not fileexists(dir+'uc_heb.ini') then exit;
try
assignfile(f,dir+'uc_heb.ini');
reset(f);
except
showmessage('Nelze otevrit soubor .ini s nastavenim.');
end;
if filesize(f)<1 then
begin
showmessage('Soubor .ini neobsahuje text.' );
exit;
end;
allBigger := false;
skipFontTest := false;
repeat
readln(f,line);
if line[1]='[' then
begin;
if line='[allBigger]' then allBigger:=true;
if line='[skipFontTest]' then skipFontTest:=true;
if line='[fontSmall]' then fontSizeSmall := true
else if line='[fontNormal]' then fontSizeNormal := true
else if line='[fontLarge]' then fontSizeLarge := true;
if line='[difficultyEasy]' then difficultyEasy := true
else if line='[difficultyNormal]' then difficultyNormal := true
else if line='[difficultyHarder]' then difficultyHarder := true
else if line='[difficultyHard]' then difficultyHard := true;
end;
until (line='[TestyDir]') or (line='[TestyFolders]') or eof(f);
testyDirFound := false;
if line='[TestyDir]' then
begin
readln(f,TestyDir);
if DirectoryExists(TestyDir) then
testyDirFound := true;
readln(f,line);
end;
c := maxTestItems-1;
if (line='[TestyFolders]') and (testyDirFound=true) then
begin
TestFolderInfo := TStringList.Create;
for i:=0 to maxTestFolders-1 do
begin;
readln(f,line);
TestFolderInfo.clear;
try
// ExtractStrings([';'],[],PChar(Str),Line)
ExtractStrings([';'],[],PChar(line), TestFolderInfo);
if (line='') or ( (line[1]='0') and (trim(line)='0;' ) ) then
begin
SubMenuItemsLoaded[i] := false;
JazykyFolders[i] := '';
JazykySelected[i] := '';
continue;
end;
{
JazykyIndexy - byly iniciovány v
JazykyInitiate. Seznam obsahuje jen prázdné řetězce.
}
{
NESMYSL! JazykyIndexy JEŠTĚ NENÍ PŘIPRAVENO!
if ( TestFolderInfo.count > 0 ) then
pos := JazykyIndexy.IndexOf(TestFolderInfo.Strings[0])
else
pos := -1;
}
begin
if (TestFolderInfo.Strings[0][1] = '[') or
( length(trim(TestFolderInfo.Strings[0])) = 0 ) then
break; // ukončit smyčku přidávání jazyků
Jazyky[i] := TestFolderInfo.Strings[0];
SubMenuItemsLoaded[i] := true;
JazykyFolders[i] := TestFolderInfo.Strings[0];
if not (DirectoryExists(TestyDir+'\'+JazykyFolders[i])) then
begin
CreateDir(TestyDir+'\'+JazykyFolders[i]);
showmessage(TestyDir);
showmessage('Adresář jsem zkusil vytvořit automaticky: '+TestyDir+'\'+JazykyFolders[i]);
; JazykyFolders[i] := '';
SubMenuItemsLoaded[i] := false;
end
else
try
c := c-1; // potvrdit, že složka s jazykem byla asociována
// Jazyky sub-folder folder specification
// nemá být číslo, ale název adresáře
if TestFolderInfo.count>2 then
JazykySelected[i] := TestFolderInfo.Strings[2]
else
JazykySelected[i] := 'textbook';
if not (DirectoryExists(TestyDir+'\'+JazykyFolders[i]+'\'+JazykySelected[i])) then
begin
CreateDir(TestyDir+'\'+JazykyFolders[i]+'\'+JazykySelected[i]);
showmessage('Adresar ucebnice jsem musel vytvorit: '+TestyDir+'\'+JazykyFolders[i]+'\'+JazykySelected[i]);
end;
finally
end;
end;
SubMenuItemsLoaded[i] := false
finally
end;
end; // end of for ... begin
// setlength( Jazyky, i+1 );
TestFolderInfo.Free;
end;
// prevent crash: initiate arrays for DynMenu
for i:=0 to maxTestItems-c-1 do
begin
JazykyFolders[i] := '';
SubMenuItemsLoaded[i] := false;
end;
// end of else
repeat
readln(f,line);
until ( line='[poslední testy]') or eof(f);
if line='[poslední testy]' then
begin
for i:=0 to maxRecentFiles-1 do
fileMenu[i]:='';
i:=0;
repeat
readln(f,fileMenu[i]);
inc(i);
until ((fileMenu[i]<>'') or (i=maxRecentFiles-1)) or eof(f);
end;
upravmenu;
closefile(f); {**************************************** to jsem tam dal ja!!!!}
end;
procedure TTesty.writeINI;
var f:textfile;
b:boolean;
begin
try
b:=false;
assignfile(f,dir+'uc_heb.ini');
try
rewrite(f);
b:=true;
if allBigger1.checked then writeln(f,'[allBigger]');
if skipFontTest1.checked then writeln(f,'[skipFontTest]');
if fontSizeSmall1.checked then writeln(f,'[fontSmall]')
else if fontSizeNormal1.checked then writeln(f,'[fontNormal]')
else if fontSizeLarge1.checked then writeln(f,'[fontLarge]');
if difficultyEasy1.checked then writeln(f,'[difficultyEasy]')
else if difficultyNormal1.checked then writeln(f,'[difficultyNormal]')
else if difficultyHarder1.checked then writeln(f,'[difficultyHarder]')
else if difficultyHard1.checked then writeln(f,'[difficultyHard]');
writeln(f,'[TestyDir]');
writeln(f,TestyDir);
writeln(f,'[TestyFolders]');
for i:=0 to maxTestFolders-1 do
begin
if (Jazyky[i][1]=' ') or (Jazyky[i][1]='-') then
continue; // skip Test menu Groups or Select
if JazykySelected[i]='' then
begin
writeln(f,Jazyky[i]+';0');
continue; // submenu not selected - done
end
else
if (JazykySelected[i][1]=' ') or (JazykySelected[i][1]='-') then
continue; // skip Test sub-menu Groups or Select
if SubMenuItemsLoaded[i]=true then
begin
writeln(f,submenuItems[i].name+';'+JazykyFolders[i]+';'+JazykySelected[i])
end
else
writeln(f,Jazyky[i]+';0');
end;
writeln(f,'[poslední testy]');
for i:=0 to maxRecentFiles-1 do
if fileMenu[i]<>'' then
writeln(f,fileMenu[i]);
except
showmessage('Nastavení se nepovedlo zapsat.');
end;
closefile(f);
except
end;
end;
end.
Chyba: na řádku 234 v souboru testy.pas není známý identifikátor
allBigger1
v souboru uc_heb1.pas je tato definice:
allBigger1: TMenuItem;
je to tedy součást TForm1 ...
A teď mi řekněte jak v té třídě TTesty mám tedy zpřístupnit nebo odkázat na menu, které se používá v té třídě TForm1?
Navíc TTesty má být použito v TForm1.