IDE Search Panel

Rund um die LCL und andere Komponenten
Benutzeravatar
Ally
Beiträge: 263
Registriert: Do 11. Jun 2009, 09:25
OS, Lazarus, FPC: Win und Lazarus Stable release
CPU-Target: x64

Re: IDE Search Panel

Beitrag von Ally »

Hallo Theo,
Es gibt für mich noch eine Sache, die mich wirklich stört:
Man kann keinen Text mit CTRL-V in das Suchfeld einfügen.
Die IDE "klaut" den Fokus und fügt die Zwischenablage ins Synedit ein.
Das Problem hatte ich auch schon und habe das in etwa so gelöst:

Code: Alles auswählen

procedure TfrmX.editSuchtextKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  // Strg+V abfangen und PasteFromClipboard ausführen, weil sonst Paste im Synedit ausgeführt wird. (Obwohl es nicht den Focus hat.)
  if (ssCtrl in Shift) and (Key = VK_V) then
  begin
    editSuchtext.PasteFromClipboard;
    Key := 0;
  end;
  // Strg+C abfangen und CopyToClipboard ausführen, weil sonst Copy im Synedit ausgeführt wird. (Obwohl es nicht den Focus hat.)
  if (ssCtrl in Shift) and ((Key = VK_C)) then
  begin
    editSuchtext.CopyToClipboard;
    Key := 0;
  end;
end;
Gruß Roland

Benutzeravatar
theo
Beiträge: 10498
Registriert: Mo 11. Sep 2006, 19:01

Re: IDE Search Panel

Beitrag von theo »

Ally hat geschrieben:
Sa 3. Dez 2022, 15:35
Das Problem hatte ich auch schon und habe das in etwa so gelöst:
Ha! Doch so einfach! :D

Ich hatte viel zu kompliziert gedacht und meinte, ich müsse da mit der IDECommandList "verhandeln", weil ich sonst gar keinen Wind von dem Shortcut bekäme.
Ist schon auf Github: https://github.com/theo222/laz_idesearchpanel

Danke, das hat mir ziemlich Zeit gespart.

Benutzeravatar
theo
Beiträge: 10498
Registriert: Mo 11. Sep 2006, 19:01

Re: IDE Search Panel

Beitrag von theo »

@wp_xyz: Ich habe mir mal deinen Fork gezogen.
Das ist sicher technisch gute Arbeit und so sollten wir es auch machen.
Danke dafür!
Aber optisch komme ich damit nicht klar.
Mir ist das viel zu "autosize".
Ich habe mir schon etwas dabei gedacht, als ich die Vorwärts- und Rückwarts BitBtns grösser gemacht habe als den Options SpeedButton.
Auch füllen mir die Icons die Buttons zu sehr aus. Da ist keine "Luft".
Kann man das weniger "autosize" machen und trotzdem High-DPI tauglich?
Ich habe zu lange mit Grafikern zusammen gearbeitet, als dass mir so etwas egal wäre. :wink:

Danke für deine Arbeit!

panel_fork.png
panel_fork.png (16.9 KiB) 2603 mal betrachtet

wp_xyz
Beiträge: 4892
Registriert: Fr 8. Apr 2011, 09:01

Re: IDE Search Panel

Beitrag von wp_xyz »

Ich bin nun einen Schritt zurückgegangen und habe deinen Originalcode genommen und habe alle festen Zahlen durch die Skalierungsfunktion des Owners (fPanel) gejagt. Jetzt sieht's eher so aus wie auf deinem ersten Screenshot (aber nicht so wie auf dem letzten). Wenn jetzt irgendwas nicht passt, musst du nur die entsprechenden Zahlen anpassen.

Benutzeravatar
theo
Beiträge: 10498
Registriert: Mo 11. Sep 2006, 19:01

Re: IDE Search Panel

Beitrag von theo »

wp_xyz hat geschrieben:
Sa 3. Dez 2022, 20:36
Ich bin nun einen Schritt zurückgegangen und habe deinen Originalcode genommen und habe alle festen Zahlen durch die Skalierungsfunktion des Owners (fPanel) gejagt. Jetzt sieht's eher so aus wie auf deinem ersten Screenshot (aber nicht so wie auf dem letzten). Wenn jetzt irgendwas nicht passt, musst du nur die entsprechenden Zahlen anpassen.
Ja, so "schmeckt" mir das viel besser! :D
Danke!
Legst du Wert darauf, dass ich deinen Pull Request formal merge (Das habe ich noch nie gemacht), oder darf ich den Code auch herunterladen, meine zwischenzeitliche Änderung noch einbauen und dann einfach so "pushen" wie bisher?

P.S. Habe noch die Close Button Icons etwas verkleinert. Die PNG Dimensionen sind aber gleich geblieben.

Kannst du noch kurz erklären oder einen Links angeben, was es mit
IDEImages.Images_16 etc. auf sich hat und warum 16?

Benutzeravatar
theo
Beiträge: 10498
Registriert: Mo 11. Sep 2006, 19:01

Re: IDE Search Panel

Beitrag von theo »

@wp_xyz: Hab's dann mal "gemerged" mit Ach und Krach.
Tausend komplizierte Fragen, "Konflikte" und Weigerungen, die man ohne GIT nicht hätte.
Ich hasse GIT. :lol:

Wie gesagt, das CTRL-V Problem sollte dank Ally auch behoben sein.
Die Close Buttons sind jetzt weniger mopsig. Ich hoffe, die sehen auch auf High-DPI vernünftig aus.

Danke für deine Arbeit und deinen schnellen Einsatz. Sehr gut.
Ich denke, das Tool wird so langsam. :D

wp_xyz
Beiträge: 4892
Registriert: Fr 8. Apr 2011, 09:01

Re: IDE Search Panel

Beitrag von wp_xyz »

Gut zu hören, dass nicht nur ich ins Schwimmen komme, wenn mehr von git verlangt wird als clone, push, pull und commit.

Dokumentation über IDEImages wirst du wahrscheinlich nicht finden. Ich hatte weiter oben schon drüber geschrieben. Nochmal: In dieser Klasse, die Ondrej im Zusammenhang mit den Änderungen an der skalierten TImagelist geschrieben hat, hat man Zugriff auf drei ImageListen mit Bildern, die in res-Dateien eingebunden sind. Die IDE verwendet drei verschiedene Icon-Typen: 12x12 für das Meldungsfenster, 16x16 für Menü/Toolbar, 24x24 für die Komponentenpalette. Diese sind in den ImageListen IDEImages.Images_12, IDEImages.Images_16 und IDEImages.Images_24 zusammengefasst. Jede dieser Image-Listen enthält wiederum jedes Bild in drei Größen für 96ppi, 144ppi und 192ppi. Je nach aktueller Auflösung werden die Icons in der passenden Größe zurückgegeben, so dass man sich um die Skalierung nicht mehr kümmern muss.

All diese Bilder findet man im Images-Ordner der Lazarus-Installation (außer general_purpose, dessen Bilder zur freien Verwendung gedacht sind). Der Namensstamm der Bilddatei ist gleich dem Resourcenamen, den man in dem Aufruf von GetImageIndex der IDEImages.Images_XX einsetzen muss. Darüber hinaus kann natürlich jedes Designtime-Package seine eigenen Icons auf dem gleichen Weg zur Verfügung stellen.

ImageListen haben damals einen gewaltigen Umbau erfahren. Dadurch dass sie jedes Bild in verschiedenen Größen speichern können, muss man sich um High-DPI von Bildern auf der Anwendungsseite nicht mehr groß kümmern, zumals nun alle Komponenten, die die Bilder früher über separate Eigenschaften verwaltet haben (TBitBtn mit Glyph, TSpeedButton mit Glyph, sogar TImage (aber erst in Laz/main)), Properties "Images" und "ImageIndex" für die Bild-Zuweisung erhalten haben. Würde man versuchen, das Icon eines TBitBtns bei Verwendung von Glyph zu skalieren, hätte man ganz schön zu tun.

Mathias
Beiträge: 6204
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: IDE Search Panel

Beitrag von Mathias »

Ich habe gerade eine interessante Deklaration in deinem Code gesehen:

Code: Alles auswählen

class operator TSrchResult. = (Left, Right: TSrchResult): boolean;       
Ich habe auch schon Operatoren überladem, aber das sieht ganz anders aus:

Code: Alles auswählen

operator / (const v: TVector2f; const f: GLfloat) Res: TVector2f; inline;
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
Ally
Beiträge: 263
Registriert: Do 11. Jun 2009, 09:25
OS, Lazarus, FPC: Win und Lazarus Stable release
CPU-Target: x64

Re: IDE Search Panel

Beitrag von Ally »

Hallo Theo,
Auch füllen mir die Icons die Buttons zu sehr aus. Da ist keine "Luft".
Für diesen Zweck gibt es im general_purpose-Ordner noch ein identisches Iconset, bei dem die Pfeile etwas kleiner sind.
Probier doch mal Arrow_42.png und Arrow_43.png, ich denke die würden besser passen.

Gruß Roland

Benutzeravatar
theo
Beiträge: 10498
Registriert: Mo 11. Sep 2006, 19:01

Re: IDE Search Panel

Beitrag von theo »

@wp_xyz; Danke für die Erklärung und Alles.

@Ally: Danke für den Tipp, aber ich denke es passt jetzt so.

@Mathias:

Das Problem ergibt sich, wenn du TFpgList mit einem Record-Typen spezialisieren willst.
Wenn du es nur so machst wie du es eigentlich "brauchst", bekommst du eine Fehlermeldung

Code: Alles auswählen

  TSrchResult = record
    Start: TPoint;
    Ende: TPoint;
  end;

  TSrchResultList = specialize TFpgList<TSrchResult>;    
fgl.pp(988,50) Error: Operator is not overloaded: "TSrchResult" = "TSrchResult"
Offenbar kann er Records auf diese Weise sonst nicht vergleichen.
Also muss man diesen Code einfügen, damit es kompiliert, auch wenn man kein "IndexOf" benötigt.

https://gitlab.com/freepascal.org/fpc/s ... sues/15480

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1436
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: IDE Search Panel

Beitrag von fliegermichl »

Ich hab es mal installiert. Funktioniert einwandfrei.
Eins ist mir aber aufgefallen.

Wenn das Suchpanel sichtbar ist und ich auf "Suchen" -> "Inkrementelle Suche" klicke, wird das Eingabefeld fokussiert.
Jetzt habe ich Ctrl+I als Shortcut definiert. Wenn ich den drücke, wird zwar die Inkrementelle Suche aktiviert aber das Eingabefeld erhält nicht den Fokus und der eingegebene Begriff wird auch nicht da hinein geschrieben.

Aber damit kann man locker leben.
Tolle Arbeit. Danke.

Benutzeravatar
theo
Beiträge: 10498
Registriert: Mo 11. Sep 2006, 19:01

Re: IDE Search Panel

Beitrag von theo »

fliegermichl hat geschrieben:
So 4. Dez 2022, 11:34
Ich hab es mal installiert. Funktioniert einwandfrei.
Eins ist mir aber aufgefallen.

Wenn das Suchpanel sichtbar ist und ich auf "Suchen" -> "Inkrementelle Suche" klicke, wird das Eingabefeld fokussiert.
Jetzt habe ich Ctrl+I als Shortcut definiert. Wenn ich den drücke, wird zwar die Inkrementelle Suche aktiviert aber das Eingabefeld erhält nicht den Fokus und der eingegebene Begriff wird auch nicht da hinein geschrieben.

Aber damit kann man locker leben.
Tolle Arbeit. Danke.
Hallo fliegermichl.
Freut mich, dass es dir gefällt. :D

"Suchen" -> "Inkrementelle Suche" hat mit dem Suchpanel an sich nichts zu tun.
Ich sehe eigentlich keinen Grund, dies zu benutzen, wenn das Suchpanel sichtbar ist.

Dies gesagt: Wenn der Cursor zu Beginn auf dem Synedit steht, sehe ich eigentlich kein Problem mit "Suchen" -> "Inkrementelle Suche".
Auf GTK2 und Qt koexistieren die beiden jedenfalls ohne Probleme.

Welchen Vorteil siehst du denn in "Suchen" -> "Inkrementelle Suche" gegenüber dem Suchpanel?

wp_xyz
Beiträge: 4892
Registriert: Fr 8. Apr 2011, 09:01

Re: IDE Search Panel

Beitrag von wp_xyz »

Jetzt habe ich schon wieder einen Absturz, der mit der Deinstallation des SearchPanels behoben ist, nun aber auf allen meiner Laz-Installationen auf Windows, bei denen das Panel verwendet wird. Auch meine Linux-VM meldet eine Access-Violation.

Zum Nachvollziehen öffne das beigefügte einfache Projekt in der IDE. Dann erzeuge einfach ein neues Projekt (File > New > Project > Application). Dann werden das Editor- und das Designer-Fenster weiß, und nach ein paar Sekunden kommt eine Fehlermeldung mit "Privileged instruction". Ich muss die IDE mit dem Taskmanager beenden. Wenn ich das SearchPanel im Menü "Search" deaktiviere oder gleich deinstalliere, tritt der Fehler nicht mehr auf.

Noch etwas: Um den Fehler einzukreisen habe ich deinen Debug-Modus aktiviert ({$DEFINE DebugSayt}
). Nach Neukompilieren der IDE wurde Laz nicht wieder neu gestartet. Ich fand dann, dass dein Debug-Modus per Writeln Meldungen auf den Bildschirm schreibt. Unter Windows ist das tödlich... Besser: Packe LazLoggerBase mit in die uses-Liste und nimm DebugLn statt WriteLn:

Code: Alles auswählen

...
implementation

{$R searchpanel_images.res}

uses
  {$IFDEF DebugSayt}LazLoggerBase,{$ENDIF}
  Math;

{$IFDEF DebugSayt}
procedure DebugSayt(Sendr: string; Msg: string);
begin
  debugln(['SAYT: ', Sendr, ': ', Msg]);
end;
{$ENDIF}
... 
Hier das Log-File:
SAYT: Create:
SAYT: LoadStates:
SAYT: LoadState:
SAYT: Destroy: -1
SAYT: Exception LoadStates:
Hint: (lazarus) [TBuildManager.SetBuildTarget] Old=x86_64-win64-win32 New=x86_64-win64-win32 Changed: OS/CPU=True LCL=False
SAYT: SourceWindowCreated:
SAYT: OnProjectOpen: -1
SAYT: DoChangeDocking: -1
SAYT: AllocControls:
----------------
Hint: (lazarus) [TMainIDE.DoOpenProjectFile] "D:\Prog_Lazarus\bug_tracker\39911 - canvas.clear\wp-test--\project1.lpi"
SAYT: SourceWindowDestroyed:
SAYT: SourceWindowCreated:
InitOpenedProjectFile select form in designer: Form1:TForm1 TDesigner
SAYT: OnProjectOpen: -1
SAYT: DoChangeDocking: -1
SAYT: SourceWindowDestroyed:
SAYT: SourceWindowCreated:
SAYT: OnProjectOpen: -1
SAYT: DoChangeDocking: -1
TApplication.HandleException: EAccessViolation
Access violation
Stack trace:
$0000000101198A91 DOCHANGEPANELVISIBILITY, line 462 of idesearchpanel.pas
$0000000101198F0E ONPROJECTOPEN, line 531 of idesearchpanel.pas
$000000010053AD08 DoCallProjectChangedHandler, line 725 of lazideintf.pas
$0000000100982B7C $fin$000000F3, line 3690 of sourcefilemanager.pas
$0000000100982FF1 InitNewProject, line 3632 of sourcefilemanager.pas
$00000001000856E7 DoNewProject, line 6407 of main.pp
$000000010097C9E1 NewOther, line 2346 of sourcefilemanager.pas
$0000000100075846 mnuNewOtherClicked, line 3223 of main.pp
$000000010053522F MenuItemClick, line 556 of menuintf.pas
$0000000100539810 MenuItemClick, line 1714 of menuintf.pas
$00000001002600AB Click, line 83 of include/menuitem.inc
$0000000100260C5C DoClicked, line 296 of include/menuitem.inc
$0000000100011B41
$00000001001DDFF4 DoWindowProc, line 2155 of win32/win32callback.inc
$00000001001DFD47 WindowProc, line 2786 of win32/win32callback.inc
$00000001003C6AF0 CustomFormWndProc, line 412 of win32/win32wsforms.pp
$00007FFE17A88161
FreeFormEditor: FormEditor1=TFormEditor
[TJITComponentList.DestroyJITComponent] ERROR destroying component Error: Object reference is Nil
Stack trace:
$000000010060C5B7 SetCustomForm, line 1168 of ../designer/controlselection.pp
$0000000100611708 Delete, line 2291 of ../designer/controlselection.pp
$000000010061161F Remove, line 2272 of ../designer/controlselection.pp
$000000010060DBBD Notification, line 1456 of ../designer/controlselection.pp
$00000001000DF197
$00000001002CC17B Destroy, line 152 of lclclasses.pp
$00000001002248D9 Destroy, line 5201 of include/control.inc
$000000010020D5B3 Destroy, line 6651 of include/wincontrol.inc
$0000
Dateianhänge
wp-test.zip
(1.76 KiB) 38-mal heruntergeladen

Benutzeravatar
theo
Beiträge: 10498
Registriert: Mo 11. Sep 2006, 19:01

Re: IDE Search Panel

Beitrag von theo »

Ich kann das einfach nicht nachstellen.
Habe es eben auf Leap mit GTK2 probiert und dann noch auf Tumbleweed mit Qt6.
Ich sehe kein Problem.
Ich bin ja jetzt auch schon ein paar Tage an diesem Projekt und mir ist die IDE noch nie abgeschmiert.

Da wird schon etwas faul sein, aber wenn der Fehler bei mir nicht auftaucht, was soll ich da machen?

Hast du vielleicht auf deinen Installationen etwas Spezielles installiert, was im Zusammenspiel Probleme macht?
Hast du AnchorDockDesign drin? (Ich ja.)
Oder ähnliches?

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1436
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: IDE Search Panel

Beitrag von fliegermichl »

theo hat geschrieben:
So 4. Dez 2022, 11:56
...
Welchen Vorteil siehst du denn in "Suchen" -> "Inkrementelle Suche" gegenüber dem Suchpanel?
Ich hatte gedacht, daß würde zusammenhängen. Es wäre schön, wenn ich das Eingabefeld per Tastatur Shortcut fokussieren könnte.
Dann muss man nicht immer erst nach der Maus greifen.

Die Abstürze kann ich auch nicht nachvollziehen. Windows 10 64 Bit.
Lazarus 2.2.0 (rev lazarus_2_2_0-80-g2187550) FPC 3.2.2 x86_64-win64-win32/win64

Antworten