Hallo zusammen,
hat jemand noch einen Tipp, wie man die Reihenfolge der
Unit-Tabs in der
IDE abfragen kann?
Ich ermittle alle offenen Units über die nachfolgende Funktion. Das funktioniert auch grundsätzlich.
Das Problem ist, dass die aktuelle
Unit immer zuerst gescannt wird.
Bei einem Wechsel der offenen
Unit wird die Reihenfolge der dargestellten Units unerwünscht geändert.
Ich hätte gern immer die gleiche Reihenfolge wie die Tabs der
IDE.
Delphi-Quellcode:
procedure GetCodeFromOpenUnits(SearchDataUnitList: ISearchDataUnitList);
const
BufferSize = 254; // Number of chars for Buffer...
var
Editor : IOTAEditor;
EditView : IOTAEditView;
M, I, J : Integer;
module : IOTAModule;
sourceEditor : IOTASourceEditor;
OTAModuleServices: IOTAModuleServices;
Reader : IOTAEditReader;
Position : Integer;
Buffer : AnsiString;
ReadedChars : Integer;
SourceCode : AnsiString;
SearchDataUnit : ISearchDataUnit;
begin
EditView := nil;
EditPos.Line := 0;
EditPos.Col := 0;
SearchDataUnitList.Clear;
BorlandIDEServices.GetService(IOTAModuleServices, OTAModuleServices);
for M := 0 to OTAModuleServices.ModuleCount - 1 do
begin
module := OTAModuleServices.Modules[M];
for I := 0 to module.ModuleFileCount - 1 do
begin
Editor := module.ModuleFileEditors[I];
if Supports(Editor, IOTASourceEditor, sourceEditor) then
begin
for J := 0 to sourceEditor.EditViewCount - 1 do
begin
EditView := sourceEditor.EditViews[J];
RegisterViewPaintNotifier(EditView);
if Assigned(EditView) then
begin
SourceCode := '';
Reader := EditView.Buffer.CreateReader;
if Assigned(Reader) then
begin
Position := 0;
SetLength(Buffer, BufferSize);
repeat
ReadedChars := Reader.GetText(Position, PAnsiChar(Buffer),
BufferSize);
Inc(Position, ReadedChars);
SourceCode := SourceCode + Copy(Buffer, 1, ReadedChars);
until ReadedChars < BufferSize;
end;
SearchDataUnit := TSearchDataUnit.Create;
SearchDataUnit.UnitFileName := module.FileName;
SearchDataUnit.Code.Text := String(SourceCode);
SearchDataUnitList.Add(SearchDataUnit);
end;
end;
end;
end;
end;
end;