mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-05 10:38:14 +02:00
* Example from Margers from merge request !953
This commit is contained in:
parent
300d4f2617
commit
0ce9845809
172
packages/fv/examples/colorselonly.pp
Normal file
172
packages/fv/examples/colorselonly.pp
Normal file
@ -0,0 +1,172 @@
|
||||
program onlycolorsel;
|
||||
uses
|
||||
Objects, Drivers, Views, Menus, Dialogs, App, ColorSel;
|
||||
|
||||
const cmColors =12828;
|
||||
cmCreateSave = 31991;
|
||||
cmLoadColors =23467;
|
||||
|
||||
type
|
||||
PColorApp = ^TColorApp;
|
||||
TColorApp = object(TApplication)
|
||||
constructor Init;
|
||||
function GetPalette: PPalette; virtual;
|
||||
procedure HandleEvent(var Event: TEvent); virtual;
|
||||
procedure InitMenuBar; virtual;
|
||||
end;
|
||||
|
||||
procedure TutorStreamError(var S: TStream);
|
||||
var ErrorMessage: String;
|
||||
begin
|
||||
case S.Status of
|
||||
stError: ErrorMessage := 'Stream access error';
|
||||
stInitError: ErrorMessage := 'Cannot initialize stream';
|
||||
stReadError: ErrorMessage := 'Read beyond end of stream';
|
||||
stWriteError: ErrorMessage := 'Cannot expand stream';
|
||||
stGetError: ErrorMessage := 'Unregistered type read from stream';
|
||||
stPutError: ErrorMessage :='Unregistered type written to stream';
|
||||
end;
|
||||
ClearScreen;
|
||||
|
||||
PrintStr('Error: ' + ErrorMessage);
|
||||
readln;
|
||||
Halt(Abs(S.Status));
|
||||
end;
|
||||
|
||||
constructor TColorApp.Init;
|
||||
begin
|
||||
StreamError := @TutorStreamError;
|
||||
RegisterObjects;
|
||||
RegisterViews;
|
||||
RegisterDialogs;
|
||||
RegisterApp;
|
||||
RegisterColorsel;
|
||||
inherited Init;
|
||||
end;
|
||||
|
||||
function TColorApp.GetPalette: PPalette;
|
||||
const
|
||||
CNewColor = CAppColor ;
|
||||
CNewBlackWhite = CAppBlackWhite ;
|
||||
CNewMonochrome = CAppMonochrome ;
|
||||
P: array[apColor..apMonochrome] of string[Length(CNewColor)] =
|
||||
(CNewColor, CNewBlackWhite, CNewMonochrome);
|
||||
begin
|
||||
GetPalette := @P[AppPalette];
|
||||
end;
|
||||
|
||||
procedure TColorApp.InitMenuBar;
|
||||
var
|
||||
R: TRect;
|
||||
begin
|
||||
GetExtent(R);
|
||||
R.B.Y := R.A.Y + 1;
|
||||
MenuBar := New(PMenubar, Init(R, NewMenu(NewSubMenu('~M~enu', hcNoContext,
|
||||
NewMenu(
|
||||
NewItem('Color ~T~est', 'F2', kbF2, cmColors, hcNoContext,
|
||||
NewItem('Color ~S~ave', 'F4', kbF4, cmCreateSave, hcNoContext,
|
||||
NewItem('Color ~L~oad', 'F6', kbF6, cmLoadColors, hcNoContext,
|
||||
nil)))),
|
||||
nil))));
|
||||
end;
|
||||
|
||||
procedure TColorApp.HandleEvent(var Event: TEvent);
|
||||
|
||||
procedure Colors;
|
||||
var
|
||||
R: TRect;
|
||||
D: PDialog;
|
||||
begin
|
||||
D := New(PColorDialog, Init('',
|
||||
ColorGroup('Desktop', DesktopColorItems(nil),
|
||||
ColorGroup('Menus', MenuColorItems(nil),
|
||||
ColorGroup('Dialogs', DialogColorItems(dpGrayDialog, nil),
|
||||
ColorGroup('Editor', WindowColorItems(wpBlueWindow, nil),
|
||||
ColorGroup('Ascii table', WindowColorItems(wpGrayWindow, nil),
|
||||
ColorGroup('Calendar',
|
||||
WindowColorItems(wpCyanWindow,
|
||||
ColorItem('Current day', 22, nil)),
|
||||
nil))))))));
|
||||
|
||||
if ExecuteDialog(D, Application^.GetPalette) <> cmCancel then
|
||||
begin
|
||||
ReDraw;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure ColorsSave;
|
||||
var
|
||||
R: TRect;
|
||||
D: PDialog;
|
||||
var DesktopFile: TBufStream;
|
||||
begin
|
||||
D := New(PColorDialog, Init('',
|
||||
ColorGroup('Desktop', DesktopColorItems(nil),
|
||||
ColorGroup('Menus', MenuColorItems(nil),
|
||||
ColorGroup('Dialogs', DialogColorItems(dpGrayDialog, nil),
|
||||
ColorGroup('Editor', WindowColorItems(wpBlueWindow, nil),
|
||||
ColorGroup('Ascii table', WindowColorItems(wpGrayWindow, nil),
|
||||
ColorGroup('Calendar',
|
||||
WindowColorItems(wpCyanWindow,
|
||||
ColorItem('Current day', 22, nil)),
|
||||
nil))))))));
|
||||
|
||||
DesktopFile.Init('DESKTOP.TUT', stCreate, 1024);
|
||||
DesktopFile.Put(D);
|
||||
DesktopFile.Done;
|
||||
|
||||
Dispose(D,Done);
|
||||
end;
|
||||
|
||||
procedure ColorsLoad;
|
||||
var
|
||||
R: TRect;
|
||||
D: PDialog;
|
||||
p1, p2, p3 ,p4 : pointer;
|
||||
var DesktopFile: TBufStream;
|
||||
begin
|
||||
getmem(p1,50); {make some memory offset so load is in different pointers}
|
||||
getMem(p2,100);
|
||||
getMem(p3,30);
|
||||
getMem(p4,150);
|
||||
DesktopFile.Init('DESKTOP.TUT', stOpenRead, 1024);
|
||||
D:=PDialog(DesktopFile.Get);
|
||||
DesktopFile.Done;
|
||||
|
||||
freemem(p1,50);
|
||||
freeMem(p2,100);
|
||||
freeMem(p3,30);
|
||||
freeMem(p4,150);
|
||||
|
||||
if assigned(D) then
|
||||
if ExecuteDialog(D, Application^.GetPalette) <> cmCancel then
|
||||
begin
|
||||
ReDraw;
|
||||
end;
|
||||
end;
|
||||
|
||||
begin
|
||||
inherited HandleEvent(Event);
|
||||
case Event.What of
|
||||
evCommand:
|
||||
begin
|
||||
case Event.Command of
|
||||
cmColors: Colors;
|
||||
cmCreateSave:ColorsSave;
|
||||
cmLoadColors:ColorsLoad;
|
||||
else
|
||||
Exit;
|
||||
end;
|
||||
ClearEvent(Event);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
var
|
||||
ColorApp: TColorApp;
|
||||
begin
|
||||
ColorApp.Init;
|
||||
ColorApp.Run;
|
||||
ColorApp.Done;
|
||||
end.
|
||||
|
Loading…
Reference in New Issue
Block a user