📄 main.~pas
字号:
lExt := ExtractFileExt(lFilename);
if length(lExt) > 0 then
for lI := 1 to length(lExt) do
lExt[lI] := upcase(lExt[lI]);
if (lExt = '.BMP') or (lExt = '.JPG') then
begin
PGOpenDialog.FileName := '';
PGOpenDialog.InitialDir := extractfiledir(lFilename);
CreateMDIChild(lFilename, false, false, true, false);
exit;
end;
OpenDialog.InitialDir := extractfiledir(lFilename);
if (lExt = '.IMG') or (lExt = '.HDR') then
begin
lHdrName := ExtractFilePath(lFilename) + ParseFileName(ExtractFileName(lFilename)) + '.hdr';
if fileexists(lHdrName) then
begin
AssignFile(lf, lHdrName);
Reset(lf);
lLen := filesize(lf);
closefile(lf);
if lLen = (348) then
begin
CreateMDIChild(lHdrName, true, false, false, false);
exit;
end;
end;
end; //try analyze format
CreateMDIChild(lFilename, false, false, false, false);
end;
(*procedure Snoop;
//FileSnooper => compares bytes of two files for differences
label 767;
var I,lLen,lTag : Integer;
lF,lF2: file of byte;
lBuff,lBuff2: bytep;
lStart,lEnd,lPos,lVal,lSz: integer;
begin
lStart := 1;
lEnd := 3055;
lSz := lEnd-lStart+1;
AssignFile(lF,'C:\efilm\heart16ori.dcm');
reset(lF);
GetMem( lBuff,lSz );
Seek(lF,lStart);
BlockRead(lF, lBuff^, lSz);
CloseFile(lF);
AssignFile(lF2,'C:\efilm\heart16.dcm');
reset(lF2);
GetMem( lBuff2, lSz);
Seek(lF2,lStart);
BlockRead(lF2, lBuff2^, lSz);
CloseFile(lF2);
lPos := 0;
lVal := 0;
while lPos < lEnd do begin
inc(lPos);
if (lBuff[lPos] <> lBuff2[lPos]) then begin
showmessage(inttostr(lPos+lStart-1)+'abba:'+inttostr(lBuff[lPos]) +'/'+inttostr(lBuff2[lPos]));
inc(lVal);
if lVal > 10 then
goto 767;
//lPos := lEnd;
end;
end;
767:
FreeMem( lBuff2);
FreeMem( lBuff);
showmessage('filesnooper is done');
end; Snoop utility(* *)
procedure TMainForm.FormCreate(Sender: TObject);
var
lSearchRec: TSearchRec;
lDICOMdata: dicomdata;
lHdrOK, lIMgOK: boolean;
lDynStr, lFile: string;
begin
{convert an image to dicom at startup->
lFile := 'c:\efilm\rgb.dcm' ;
if fileexists(lFile) then deletefile(lFile);
lFile := 'c:\efilm\rgb.dc' ;
read_dicom_data(false,false,true,false,true,true,true, lDICOMdata, lHdrOK, lImgOK, lDynStr,lFile );
ConvertImg(lFile, lDICOMdata,1);}
DecimalSeparator := '.';
SchemeDrop.Items.Clear;
SchemeDrop.Items.Add('White & Black');
SchemeDrop.Items.Add('Black & White');
SchemeDrop.Items.Add('Hot Metal');
SchemeDrop.ItemIndex := 1;
Screen.OnActiveFormChange := UpdateMenuItems;
DragAcceptFiles(Handle, True);
GetRegistryData;
if BestFitItem.checked then
begin
ZoomSLider.enabled := false;
Pct100btn.enabled := false;
end
else
begin
ZoomSlider.enabled := true;
Pct100btn.enabled := true;
end;
if FindFirst(extractfilepath(paramstr(0)) + '\*.lut', faAnyFile, lSearchRec) <> 0 then
begin
FindClose(lSearchRec);
exit;
end;
SchemeDrop.Items.Add(ParseFileName(ExtractFileName(lSearchRec.Name)));
while (FindNext(lSearchRec) = 0) do
begin
SchemeDrop.Items.Add(ParseFileName(ExtractFileName(lSearchRec.Name)));
end;
FindClose(lSearchRec);
UpdateMenuItems(nil);
//处理命令行参数
//
//2004-10-12
if ParamCount>2 then
begin
ViewDICOM(ParamStr(1));
end;
end;
procedure TMainForm.CreateMDIChild(Name: string; lAnz, lECAT, l2dImage, lRaw: boolean);
var
Child: TMDIChild;
begin
LockWindowUpdate(MainForm.Handle);
Child := TMDIChild.Create(Application);
Child.Caption := Name;
if lRaw then
begin
clear_dicom_data(Child.gDicomData);
Child.gDicomData.XYZdim[1] := RawForm.WidEdit.value;
Child.gDicomData.XYZdim[2] := RawForm.HtEdit.value;
Child.gDicomData.XYZdim[3] := RawForm.SliceEdit.value;
Child.gDicomData.XYZdim[4] := 1;
Child.gDicomData.ImageStart := RawForm.OffsetEdit.value;
if RawForm.LittleEndCheck.checked then
Child.gDicomData.little_endian := 1
else
Child.gDicomData.little_endian := 0;
Child.gDicomData.Allocbits_per_pixel := RawForm.BitsEdit.value;
if Child.gDicomData.Allocbits_per_pixel = 24 then
begin
Child.gDicomData.SamplesPerPixel := 3;
Child.gDicomData.Allocbits_per_pixel := 8;
if RawForm.PlanarRGBCheck.Checked then
Child.gDicomData.PlanarConfig := 1
else
Child.gDicomData.PlanarConfig := 0;
end;
Child.gDicomData.Storedbits_per_pixel := Child.gDicomData.Allocbits_per_pixel;
end;
if not Child.LoadData(Name, lAnz, lECAT, l2dImage, lRaw) then
begin
Child.free;
exit;
end;
TMDIChild(MainForm.ActiveMDIChild).LoadFileList;
LockWindowUpdate(0);
end;
procedure TMainForm.FormDestroy(Sender: TObject);
begin
Screen.OnActiveFormChange := nil;
end;
procedure TMainForm.UpdateMenuItems(Sender: TObject);
begin
WindowCascadeItem.Enabled := MDIChildCount > 0;
WindowTileItem.Enabled := MDIChildCount > 0;
WindowArrangeItem.Enabled := MDIChildCount > 0;
WindowMinimizeItem.Enabled := MDIChildCount > 0;
Print1.enabled := MDIChildCount > 0;
Exportaspicture1.enabled := MDIChildCount > 0;
Close1.enabled := MDIChildCount > 0;
ColUpdate;
//CycleWindowItem.Enabled := MDIChildCount > 1;
end;
procedure TMainForm.FileOpenItemClick(Sender: TObject);
var
I, lLen, lTag: Integer;
lF: file of byte;
begin
lTag := (Sender as TMEnuItem).Tag;
if lTag = 1 then
OpenDialog.Filter := 'Analyze Header (*.hdr)|*.hdr'
{else
OpenDialog.Filter := 'Medical Image|*.*'};
if OpenDialog.Execute then
begin
for I := 0 to OpenDialog.Files.Count - 1 do
begin
if AddMRU(OpenDialog.Files[i]) then
begin
OpenDialog.InitialDir := extractfiledir(OpenDialog.Files[i]);
Filemode := 0;
AssignFile(lf, OpenDialog.Files[i]);
Reset(lf);
lLen := filesize(lf);
closefile(lf);
Filemode := 2;
if lTag = 2 then //ecat
CreateMDIChild(OpenDialog.Files[i], false, true, false, false)
else if (lLen = 348) and (ExtractFileExt(OpenDialog.Filename) = '.hdr') then
CreateMDIChild(OpenDialog.Files[i], true, false, false, false)
else
CreateMDIChild(OpenDialog.Files[i], false, false, false, false);
end; //fileexists
end;
end;
//OpenDialog.Filter := 'Medical Image|*.*';
OpenDialog.Filter := 'Medical Image|*.*';
ConLabelClick;
end;
procedure TMainForm.FileExitItemClick(Sender: TObject);
begin
Close;
end;
procedure TMainForm.WindowCascadeItemClick(Sender: TObject);
begin
Cascade;
//if (not BestFitItem.checked) or (MainForm.MDIChildCount = 0) then exit;
{for I := (MDIChildCount - 1) downto 0 do
MDIChildren[I].}
//AutoMaximise;
end;
procedure TMainForm.WindowTileItemClick(Sender: TObject);
begin
Tile;
end;
procedure TMainForm.WindowArrangeItemClick(Sender: TObject);
begin
ArrangeIcons;
end;
procedure TMainForm.WindowMinimizeItemClick(Sender: TObject);
var
I: Integer;
begin
if MDIChildCount = 0 then
exit;
for I := MDIChildCount - 1 downto 0 do
MDIChildren[I].WindowState := wsMinimized;
end;
procedure TMainForm.Opengraphic1Click(Sender: TObject);
var
I: integer;
begin
//PGOpenDialog1.filename := '';
//OpenDialog.Filter := 'Images (*.bmp;*.jpg)|*.bmp;*.jpg|Bitmaps (*.bmp)|*.bmp|JPEGs (*.jpg]|*.jpg';
//PGOpenDialog.Filter := GraphicFilter(TGraphic);
if PGOpenDialog.Execute then
begin
for I := 0 to PGOpenDialog.Files.Count - 1 do
begin
if AddMRU(PGOpenDialog.Files[i]) then
begin
PGOpenDialog.InitialDir := extractfilepath(PGOpenDialog.Files[i]);
PGSaveDialog.InitialDir := PGOpenDialog.InitialDir;
//PGSaveDialog.FileName := extractfilename(PGOpenDialog.FileName);
//PGOpenDialog.FileName := extractfilename(PGOpenDialog.FileName);
CreateMDIChild(PGOpenDialog.Files[i], false, false, true, false);
end;
end; //for I..nfiles
end; //if execute
//OpenDialog.Filter :='Medical Image|*.*';
end;
procedure TMainForm.SliceSliderChange(Sender: TObject);
begin
if MDIChildCount = 0 then
exit;
//LockWindowUpdate(MainForm.Handle);
TMDIChild(MainForm.ActiveMDIChild).DisplayImage(false, false, SliceSlider.position,
TMDIChild(MainForm.ActiveMDIChild).gWinWid,
TMDIChild(MainForm.ActiveMDIChild).gWinCen {WinWidEdit.value,WincenEdit.value});
conlabelclick;
//LockWindowUpdate(0);
end;
procedure TMainForm.ColUpdate;
//var lVox: integer;
begin
if MainForm.MDIChildCount = 0 then
begin
ApplyCon.enabled := false;
ApplyBright.enabled := false;
FileContrast.enabled := false;
AutoBal.enabled := false;
SchemeDrop.enabled := false;
WinWidEdit.enabled := false;
WinCenEdit.enabled := false;
VideoBtn.Enabled := false;
SliceSlider.Enabled := false;
exit;
end;
(*StatusBar.Panels[1].text := inttostr(MainForm.MDIChildCount)+'x'+inttostr(random(255));
if MainForm.MDIChildCount = 0 then begin
ApplyCon.visible := false;
ApplyBright.visible := false;
FileContrast.visible := false;
AutoBal.visible := false;
SchemeDrop.visible:= false;
WinWidEdit.visible := false;
WinCenEdit.visible := false;
exit;
end; *)
//MainForm.ZoomBox.ItemIndex := TMDIChild(MainForm.ActiveMDIChild).gZoom;
if TMDIChild(MainForm.ActiveMDIChild).Memo1.visible then
HdrBtn.Down := true
else
HdrBtn.Down := false;
//mainform.Caption := inttostr(TMDIChild(MainForm.ActiveMDIChild).gCustomPalette);
if (not TMDIChild(MainForm.ActiveMDIChild).FDICOM) then
begin
// or (TMDIChild(MainForm.ActiveMDIChild).gDICOMdata.SamplesPerPixel > 1) or (TMDIChild(MainForm.ActiveMDIChild).gCustomPalette > 0) {or ((lVox > 7) and (lVox < 17)) }then begin
ApplyCon.enabled := false;
ApplyBright.enabled := false;
FileContrast.enabled := false;
AutoBal.enabled := false;
//mainform.caption := 'NOT_DICOM'+inttostr(random(32));
SchemeDrop.enabled := false;
WinWidEdit.enabled := false;
WinCenEdit.enabled := false;
end
else
begin
//mainform.caption := 'DICOM'+inttostr(random(32));
MainForm.SchemeDrop.ItemIndex := TMDIChild(MainForm.ActiveMDIChild).gScheme;
WinCenEdit.value := TMDIChild(MainForm.ActiveMDIChild).gWinCen;
WinWidEdit.value := TMDIChild(MainForm.ActiveMDIChild).gWinWid;
FileCOntrast.enabled := true;
if (TMDIChild(MainForm.ActiveMDIChild).gDICOMdata.Allocbits_per_pixel < 9) then
begin
//fargo FileCOntrast.enabled := false;
ApplyCon.enabled := false;
ApplyBright.enabled := false;
WinWidEdit.enabled := false;
WinCenEdit.enabled := false;
end
else
begin
if TMDIChild(MainForm.ActiveMDIChild).gDicomData.WindowWidth <> 0 then
FileCOntrast.enabled := true
else
FileCOntrast.enabled := false;
ApplyCon.enabled := true;
ApplyBright.enabled := true;
WinWidEdit.enabled := true;
WinCenEdit.enabled := true;
end;
AutoBal.enabled := true;
SchemeDrop.enabled := true;
end;
ConLabelClick;
//if TMDIChild(MainForm.ActiveMDIChild).gWinWid = 0 then ConLabel.caption := '';
if (not TMDIChild(MainForm.ActiveMDIChild).FDICOM) or (TMDIChild(MainForm.ActiveMDIChild).gDicomdata.XYZdim[3] < 2)
then
begin
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -