亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? rxresexp.pas

?? RX Library contains a large number of components, objects and routines for Borland Delphi with full
?? PAS
?? 第 1 頁 / 共 5 頁
字號:
          TypeList := TStringList.Create;
          try
            TypeList.Sorted := True;
            TypeList.Duplicates := dupIgnore;
            RootNode := ResTree.Items.Add(nil, ExtractFileName(FResFileName));
            RootNode.ImageIndex := 9; { Delphi Project }
            RootNode.SelectedIndex := RootNode.ImageIndex;
            for I := 0 to FResourceList.Count - 1 do begin
              Entry := TResourceEntry(FResourceList.Objects[I]);
              if (Entry = nil) or (Entry.FParent <> nil) then
                Continue; { ignore cursors and icons, use groups }
              Cnt := TypeList.IndexOf(Entry.GetTypeName);
              if Cnt < 0 then begin
                TypeNode := ResTree.Items.AddChildObject(RootNode,
                  Entry.GetTypeName, nil);
                TypeNode.ImageIndex := 0; { Collapsed Folder }
                TypeNode.SelectedIndex := TypeNode.ImageIndex;
                TypeList.AddObject(Entry.GetTypeName, TypeNode);
              end
              else
                TypeNode := TTreeNode(TypeList.Objects[Cnt]);
              Entry.FEntryNode := ResTree.Items.AddChildObject(TypeNode,
                Entry.GetName, Entry);
              Entry.FEntryNode.ImageIndex := ResImages[Entry.FResType];
              Entry.FEntryNode.SelectedIndex := Entry.FEntryNode.ImageIndex;
            end;
            RootNode.Expanded := True;
          finally
            TypeList.Free;
          end;
        finally
          ResTree.Items.EndUpdate;
        end;
      end;
    end;
  finally
    ResourceFile.Free;
  end;
end;

procedure TRxProjectResExpert.ClearProjectResInfo;
var
  I: Integer;
begin
  FResFileName := '';
  if RxResourceEditor <> nil then begin
    RxResourceEditor.ResTree.Items.Clear;
    RxResourceEditor.StatusBar.Panels[0].Text := '';
  end;
  for I := 0 to FResourceList.Count - 1 do
    TResourceEntry(FResourceList.Objects[I]).Free;
  FResourceList.Clear;
end;

procedure TRxProjectResExpert.UpdateProjectResInfo;
var
  TreeState: TStringList;
  Node, ChildNode: TTreeNode;
  I: Integer;
begin
  if FLockCount > 0 then Exit;
  if RxResourceEditor <> nil then
    RxResourceEditor.ResTree.Items.BeginUpdate;
  try
    TreeState := TStringList.Create;
    try
      if RxResourceEditor <> nil then begin
        if FSelection.ResType = '' then begin
          { save selection }
          Node := RxResourceEditor.ResTree.Selected;
          if Node <> nil then begin
            if (Node.Data <> nil) then begin
              FSelection.ResName := TResourceEntry(Node.Data).GetName;
              FSelection.ResType := TResourceEntry(Node.Data).GetTypeName;
            end
            else begin
              FSelection.ResName := '';
              FSelection.ResType := Node.Text;
            end;
          end;
        end;
        { save tree state }
        Node := RxResourceEditor.ResTree.Items.GetFirstNode;
        if Node <> nil then ChildNode := Node.GetFirstChild
        else ChildNode := nil;
        while ChildNode <> nil do begin
          TreeState.AddObject(ChildNode.Text, TObject(ChildNode.Expanded));
          ChildNode := Node.GetNextChild(ChildNode);
        end;
      end;
      Inc(FLockCount);
      try
        ClearProjectResInfo;
        try
          LoadProjectResInfo;
        except
          ClearProjectResInfo;
        end;
      finally
        Dec(FLockCount);
      end;
      if (RxResourceEditor <> nil) then begin
        { restore tree state }
        Node := RxResourceEditor.ResTree.Items.GetFirstNode;
        if Node <> nil then begin
          ChildNode := Node.GetFirstChild;
          while ChildNode <> nil do begin
            I := TreeState.IndexOf(ChildNode.Text);
            if I >= 0 then
              ChildNode.Expanded := Boolean(TreeState.Objects[I]);
            ChildNode := Node.GetNextChild(ChildNode);
          end;
        end;
        if (FSelection.ResName <> '') or (FSelection.ResType <> '') then
        begin { restore selection }
          with FSelection do
            Node := FindNode(RxResourceEditor.ResTree, nil, ResName, ResType);
          if Node <> nil then begin
            if Node.Parent <> nil then Node.Parent.Expanded := True;
            Node.Selected := True;
          end;
        end;
      end;
    finally
      TreeState.Free;
      with FSelection do begin
        ResName := '';
        ResType := '';
      end;
    end;
  finally
    if RxResourceEditor <> nil then
      RxResourceEditor.ResTree.Items.EndUpdate;
  end;
end;

procedure TRxProjectResExpert.OpenProject(const FileName: string);
begin
  CloseProject;
  ProjectModule := ToolServices.GetModuleInterface(FileName);
  if ProjectModule <> nil then begin
    ProjectNotifier := TProjectNotifier.Create(Self);
    ProjectModule.AddNotifier(ProjectNotifier);
    try
      LoadProjectResInfo;
      FProjectName := FileName;
    except
      ClearProjectResInfo;
    end;
  end;
end;

procedure TRxProjectResExpert.CloseProject;
begin
  if ProjectModule <> nil then begin
    ClearProjectResInfo;
    ProjectModule.RemoveNotifier(ProjectNotifier);
    ProjectNotifier.Free;
    ProjectModule.Free;
    ProjectNotifier := nil;
    ProjectModule := nil;
    FProjectName := '';
  end;
end;

{$IFNDEF RX_D4}

procedure TRxProjectResExpert.LoadDesktop(const FileName: string);
var
  Desktop: TIniFile;
begin
  Desktop := TIniFile.Create(FileName);
  try
    if DeskTop.ReadBool(sExpertName, sVisible, False) then
      ProjectResourcesClick(nil)
    else if RxResourceEditor <> nil then RxResourceEditor.Close;
  finally
    Desktop.Free;
  end;
end;

procedure TRxProjectResExpert.SaveDesktop(const FileName: string);
var
  Desktop: TIniFile;
  Visible: Boolean;
begin
  Desktop := TIniFile.Create(FileName);
  try
    Visible := (RxResourceEditor <> nil) and RxResourceEditor.Visible;
    DeskTop.WriteBool(sExpertName, sVisible, Visible);
  finally
    Desktop.Free;
  end;
end;

{$ENDIF}

procedure TRxProjectResExpert.ProjectResourcesClick(Sender: TIMenuItemIntf);
var
  Reopen: Boolean;
  ProjectName: string;
  ResourceFile: TIResourceFile;
begin
  ResourceFile := GetResFile;
  try
    if Assigned(ResourceFile) then begin
      Reopen := RxResourceEditor = nil;
      CreateForm(TRxResourceEditor, RxResourceEditor);
      RxResourceEditor.FExpert := Self;
      ProjectName := ToolServices.GetProjectName;
      if Reopen or (FProjectName <> ProjectName) then begin
        if ProjectName <> '' then OpenProject(ProjectName);
      end;
      RxResourceEditor.Show;
    end;
  finally
    ResourceFile.Free;
  end;
end;

procedure TRxProjectResExpert.MarkModified;
var
  EditorInterface: TIEditorInterface;
begin
  if ProjectModule <> nil then begin
    EditorInterface := ProjectModule.GetEditorInterface;
    try
      EditorInterface.MarkModified;
    finally
      EditorInterface.Free;
    end;
  end;
end;

procedure TRxProjectResExpert.CheckRename(ResFile: TIResourceFile;
  ResType, NewName: PChar);
var
  Entry: TIResourceEntry;
begin
  Entry := ResFile.FindEntry(ResType, NewName);
  try
    if Entry <> nil then
      raise Exception.Create(Format(sCannotRename, [NewName]));
  finally
    Entry.Free;
  end;
end;

function TRxProjectResExpert.UniqueName(ResFile: TIResourceFile;
  ResType: PChar; var Index: Integer): string;
var
  N: Integer;
  Entry: TIResourceEntry;

  procedure CheckItemName;
  begin
    if (ResType = RT_ICON) or (ResType = RT_CURSOR) then begin
      Result := IntToStr(N);
      Entry := ResFile.FindEntry(ResType, PChar(N));
    end
    else begin
      Result := Format(ResTypeName(ResType) + '_%d', [N]);
      Entry := ResFile.FindEntry(ResType, PChar(Result));
    end;
  end;

begin
  N := 1;
  Index := 0;
  CheckItemName;
  while Entry <> nil do begin
    Entry.Free;
    Inc(N);
    CheckItemName;
  end;
  if (ResType = RT_ICON) or (ResType = RT_CURSOR) then Index := N;
end;

function TRxProjectResExpert.DeleteEntry(ResFile: TIResourceFile;
  Entry: TResourceEntry): Boolean;
var
  I: Integer;
  P: Pointer;
  Child: TResourceEntry;
  ResourceFile: TIResourceFile;
begin
  Result := False;
  if ResFile = nil then ResourceFile := GetResFile
  else ResourceFile := ResFile;
  try
    if (ResourceFile <> nil) and (Entry <> nil) then begin
      BeginUpdate;
      try
        P := Entry.FHandle;
        Result := ResourceFile.DeleteEntry(P);
        if Result then
        try
          { delete children }
          for I := 0 to Entry.FChildren.Count - 1 do begin
            Child := TResourceEntry(Entry.FChildren[I]);
            if Child <> nil then
              ResourceFile.DeleteEntry(Child.FHandle);
          end;
        finally
          MarkModified;
        end;
      finally
        EndUpdate;
      end;
    end;
  finally
    if ResFile = nil then ResourceFile.Free;
  end;
end;

procedure TRxProjectResExpert.CreateEntry(ResFile: TIResourceFile;
  ResType, ResName: PChar; ADataSize: Integer; AData: Pointer;
  SetToEntry: Boolean);
var
  I: Integer;
  S: string;
  ResourceFile: TIResourceFile;
  Entry: TIResourceEntry;
begin
  BeginUpdate;
  try
    if ResFile = nil then ResourceFile := GetResFile
    else ResourceFile := ResFile;
    try
      if ResName = nil then begin
        S := UniqueName(ResourceFile, ResType, I);
        if I > 0 then ResName := PChar(I)
        else ResName := PChar(S);
      end;
      if not IsValidIdent(StrText(ResName)) then
        raise Exception.Create(Format(sInvalidName, [StrText(ResName)]));
      CheckRename(ResourceFile, ResType, ResName);
{$IFNDEF RX_D3}
      if ResourceFile.GetEntryCount > 0 then begin
        for I := 0 to ResourceFile.GetEntryCount - 1 do
          ResourceFile.GetEntry(I).Free;
      end;
{$ENDIF}
      Entry := ResourceFile.CreateEntry(ResType, ResName,
        MOVEABLE or DISCARDABLE, LANG_NEUTRAL, 0, 0, 0);
      if (Entry = nil) then
        raise Exception.Create(Format(sCannotRename, [StrText(ResName)]));
      with Entry do
      try
        if SetToEntry then begin
          FSelection.ResName := StrText(GetResourceName);
          FSelection.ResType := ResTypeName(GetResourceType);
        end;
        SetDataSize(PadUp(ADataSize));
        FillChar(GetData^, GetDataSize, 0);
        if GetDataSize < ADataSize then ADataSize := GetDataSize;
        Move(AData^, GetData^, ADataSize);
      finally
        Free;
      end;
      MarkModified;
    finally
      if ResFile = nil then ResourceFile.Free;
    end;
  finally
    EndUpdate;
  end;
end;

procedure TRxProjectResExpert.NewCursorIconRes(ResFile: TIResourceFile;
  ResName: PChar; IsIcon: Boolean; Stream: TStream);
var
  ResType: PChar;
  Data: TIconData;
  ResData: Pointer;
  I, ResSize, NameOrd: Integer;
  ResourceFile: TIResourceFile;
  GroupName: string;
begin
  Data := TIconData.Create;
  try
    Data.LoadFromStream(Stream);
    if IsIcon then Data.FHeader.wType := rc3_Icon
    else Data.FHeader.wType := rc3_Cursor;
    if Data.GetCount > 0 then begin
      BeginUpdate;
      try
        if ResFile = nil then ResourceFile := GetResFile
        else ResourceFile := ResFile;
        try
          if IsIcon then ResType := RT_ICON
          else ResType := RT_CURSOR;
          for I := 0 to Data.GetCount - 1 do begin
            ResData := Data.BuildResourceItem(I, ResSize);
            try
              UniqueName(ResourceFile, ResType, NameOrd);
              CreateEntry(ResourceFile, ResType, PChar(NameOrd), ResSize,
                ResData, False);
              Data.SetNameOrdinal(I, NameOrd);
            finally
              FreeMem(ResData);
            end;
          end;
          if IsIcon then ResType := RT_GROUP_ICON
          else ResType := RT_GROUP_CURSOR;
          if ResName = nil then begin
            GroupName := UniqueName(ResourceFile, ResType, NameOrd);
            ResName := PChar(GroupName);
          end;
          ResData := Data.BuildResourceGroup(ResSize);
          try
            CreateEntry(ResourceFile, ResType, ResName, ResSize,
              ResData, True);
          finally
            FreeMem(ResData);
          end;
        finally
          if ResFile = nil then ResourceFile.Free;
        end;
      finally
        EndUpdate;
      end;
    end;
  finally
    Data.Free;
  end;
end;

procedure TRxProjectResExpert.EditCursorIconRes(Entry: TResourceEntry;
  IsIcon: Boolean; Stream: TStream);
var
  ResFile: TIResourceFile;
  CI: TCursorOrIcon;
begin
  BeginUpdate;
  try
    ResFile := GetResFile;
    try
      if not Entry.EnableRenameDelete { 'MAINICON' } then begin
        Stream.ReadBuffer(CI, SizeOf(CI));
        Stream.Seek(-SizeOf(CI), soFromCurrent);
        if (CI.Count < 1) or not (CI.wType in [rc3_Icon, rc3_Cursor]) then
          InvalidIcon;
      end;
      DeleteEntry(ResFile, Entry);
      NewCursorIconRes(ResFile, Entry.GetResourceName, IsIcon, Stream);
    finally
      ResFile.Free;
    end;
  finally
    EndUpdate;
  end;
end;

procedure TRxProjectResExpert.NewBitmapRes(ResFile: TIResourceFile;
  ResName: PChar; Bitmap: TBitmap);
var
  Mem: TMemoryStream;
begin
  Mem := TMemoryStream.Create;
  try

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99久久婷婷国产综合精品| 欧美丰满高潮xxxx喷水动漫| 在线影院国内精品| 精品女同一区二区| 亚洲伦理在线免费看| 国产剧情av麻豆香蕉精品| 在线成人高清不卡| 亚洲免费av网站| 成人小视频免费观看| 日韩情涩欧美日韩视频| 国产在线观看一区二区| 在线观看不卡一区| 日韩伦理av电影| 国产91露脸合集magnet| 久久综合久久综合久久综合| 天天综合日日夜夜精品| 色av一区二区| 亚洲欧洲中文日韩久久av乱码| 国产精品一区二区在线观看不卡 | 国产精品国产三级国产普通话蜜臀| 日韩 欧美一区二区三区| 色婷婷亚洲综合| 日韩一区欧美小说| 粉嫩aⅴ一区二区三区四区五区| 日韩精品专区在线| 免费欧美日韩国产三级电影| 欧美精品vⅰdeose4hd| 一区二区三区美女| 欧洲精品中文字幕| 一区二区三区日韩精品| 色激情天天射综合网| 亚洲精品中文在线观看| 色婷婷激情久久| 一区二区日韩av| 91久久精品一区二区三区| 亚洲人午夜精品天堂一二香蕉| 99在线精品视频| 日韩伦理免费电影| 欧美无砖专区一中文字| 亚洲.国产.中文慕字在线| 欧美日韩一区中文字幕| 日韩中文字幕亚洲一区二区va在线 | 欧美日韩国产123区| 亚洲成a人v欧美综合天堂下载| 欧美日韩中文国产| 日本欧美大码aⅴ在线播放| 日韩免费在线观看| 大白屁股一区二区视频| 中文字幕一区二区三区视频| 91久久线看在观草草青青 | 国产精品丝袜黑色高跟| 91欧美一区二区| 日韩精品久久久久久| 日韩欧美在线综合网| 国产成人综合亚洲网站| ...av二区三区久久精品| 欧美综合欧美视频| 久久超碰97人人做人人爱| 国产欧美精品一区二区色综合 | 国产精品乡下勾搭老头1| 亚洲国产精品ⅴa在线观看| 91成人免费网站| 麻豆精品视频在线观看免费 | 怡红院av一区二区三区| 在线播放亚洲一区| 国产91综合网| 亚洲国产另类精品专区| 久久只精品国产| 91蝌蚪国产九色| 久久精品国产**网站演员| 国产女同性恋一区二区| 欧洲精品一区二区| 国产成人免费在线视频| 亚洲午夜日本在线观看| 久久久久久亚洲综合影院红桃 | 欧美一区二区三区四区高清| 国产精品一区二区不卡| 亚洲国产成人91porn| 国产日韩欧美综合一区| 欧美日韩性生活| 9i看片成人免费高清| 蜜臀精品一区二区三区在线观看| 国产免费久久精品| 日韩免费在线观看| 欧美三级中文字| 99在线精品一区二区三区| 精品一区二区日韩| 亚洲福利视频一区| 亚洲婷婷国产精品电影人久久| 日韩精品中午字幕| 欧美日韩国产成人在线免费| 97久久人人超碰| 国模少妇一区二区三区| 日本欧美韩国一区三区| 亚洲综合免费观看高清在线观看| 国产欧美日韩精品a在线观看| 6080日韩午夜伦伦午夜伦| 日本韩国精品一区二区在线观看| 国产精品一区二区在线看| 蜜桃久久久久久| 日韩主播视频在线| 亚洲国产精品精华液网站 | 久久久久久久久久电影| 91精品国产一区二区三区蜜臀| 91麻豆国产香蕉久久精品| 成人免费视频国产在线观看| 国产精品综合av一区二区国产馆| 日韩成人av影视| 丝袜亚洲另类欧美| 亚洲va在线va天堂| 亚洲一区电影777| 亚洲自拍偷拍综合| 一区二区三区电影在线播| 亚洲精品国产无套在线观| 亚洲色图一区二区| 亚洲免费观看高清完整版在线观看熊| 国产精品美女久久久久久久| 国产精品色婷婷| 日韩一区欧美一区| 亚洲美女淫视频| 亚洲国产精品综合小说图片区| 亚洲午夜一二三区视频| 三级精品在线观看| 日韩国产欧美一区二区三区| 日本美女视频一区二区| 久久99精品久久久久久久久久久久| 麻豆精品视频在线| 国产福利精品导航| 91色乱码一区二区三区| 欧美亚日韩国产aⅴ精品中极品| 欧美日韩亚洲综合一区二区三区| 制服丝袜av成人在线看| 久久综合资源网| 一区在线中文字幕| 亚洲国产精品尤物yw在线观看| 日韩综合一区二区| 国产成人免费视频一区| 91毛片在线观看| 欧美一区二区三区四区高清| 久久精子c满五个校花| 亚洲欧美日韩中文播放| 免费在线观看成人| 懂色av一区二区三区蜜臀| 日韩美女在线视频| 久久亚洲一级片| 最近中文字幕一区二区三区| 午夜精品福利一区二区三区av| 久久精品久久久精品美女| 懂色av一区二区夜夜嗨| 欧美日韩一级视频| 国产日韩欧美精品电影三级在线| 1区2区3区国产精品| 青青草视频一区| av成人老司机| 欧美成人在线直播| 亚洲激情校园春色| 韩国女主播一区二区三区| 色爱区综合激月婷婷| 亚洲精品在线三区| 亚洲一区二区三区中文字幕| 狠狠色丁香久久婷婷综合_中| 色综合天天综合在线视频| 精品国产91乱码一区二区三区| 亚洲欧美精品午睡沙发| 国产麻豆精品在线观看| 欧美日本一道本在线视频| 中文字幕精品一区二区精品绿巨人| 五月天亚洲婷婷| 99精品国产热久久91蜜凸| 精品久久久久久综合日本欧美| 一区二区三区国产| 波多野结衣视频一区| 精品91自产拍在线观看一区| 污片在线观看一区二区| 色中色一区二区| 亚洲国产精品高清| 国产曰批免费观看久久久| 欧美高清视频在线高清观看mv色露露十八 | 久久久不卡网国产精品一区| 婷婷成人激情在线网| 色婷婷国产精品综合在线观看| 国产日韩精品久久久| 精品一区精品二区高清| 91精品国产综合久久精品性色| 亚洲特黄一级片| 99久久免费精品高清特色大片| 2019国产精品| 国内精品久久久久影院一蜜桃| 91麻豆精品国产91久久久久久久久| 亚洲男人电影天堂| 99久久婷婷国产| 亚洲婷婷综合色高清在线| 99国产麻豆精品| 国产精品伦一区| 高清shemale亚洲人妖| 国产欧美一区二区精品性| 国产福利不卡视频| 国产日产欧美一区| 波多野结衣亚洲一区| |精品福利一区二区三区|