AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Stringgrid selection Problem !

Ein Thema von richard_boderich · begonnen am 1. Jul 2004 · letzter Beitrag vom 4. Jul 2004
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
Benutzerbild von richard_boderich
richard_boderich

Registriert seit: 21. Jun 2004
Ort: Berlin
1.067 Beiträge
 
Delphi 7 Architect
 
#1

Stringgrid selection Problem !

  Alt 1. Jul 2004, 23:49
Hi leute,

hab ein großes Problem, nachdem ich beim coden so richtig
in fahrt gekommen bin, musste ich leider feststellen,das
das Stringgrid so bloede markiert, immer nur ein viereckiger
bereich, ich MUSS es aber so hinkriegen, das das stringgrid so
markiert wie ein Memo oder Richedit, sonst waren zweieinhalb
Wochen Arbeit umsonst, und ehrlich gesagt wuerde ich das
Project eher hinschmeissen als komplett von vorn anzufangen.
also bitte , sagt mir man kann den markierungsmodus vom grid umschalten

ich hoffe wirklich jemand kann mir weiterhelfen

mfG Richard

Cimmams schrieb "das einzige was an ArmA gut ist, ist die Grafik bis 100m und der Rest ist so unreal wie unsere Demokratie."
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#2

Re: Stringgrid selection Problem !

  Alt 2. Jul 2004, 09:18
Erst einmal die schlechte Nachricht

TStringGrid kann es nicht, genauso wie auch das TDrawGrid von Delphi. Die Ursache hier liegt etwas tiefer begraben. Das Delphi-Grid merkt sich ausschließlich das markierte Rechteck in der Eigenschaft Selection
Delphi-Quellcode:
type
  TGridRect = record
    case Integer of
      0: (Left, Top, Right, Bottom: Longint);
      1: (TopLeft, BottomRight: TGridCoord);
  end;

  TCustomGrid = class(TCustomControl)
    ...
    property Selection: TGridRect read GetSelection write SetSelection;
    ...
  end;
Daran lässt sich auch erkennen, daß sich dieses nicht ohne weiteres umgehen lässt. Nun gibt es zwei grundlegende Möglichkeiten. Die erste wäre die Nutzung einer anderen Komponente, was schnell zu Problemen führen kann, die zweite ist es, das Verhalten des StringGrids etwas abzuändern

Anbei mal ein ScreenShot des geänderten StringGrid. Nachteilig an dieser Lösung ist, daß das Normale Verhalten des StringGrid (auswahl über Maus, Shift+Cursor) nicht mehr geht, außer Du nimmst Dich dieses Problemes an und änderst das auch noch - mir fehlt jetzt die Zeit.

Mehr in ein paar Minuten.

......
Miniaturansicht angehängter Grafiken
dp_433.gif  
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#3

Re: Stringgrid selection Problem !

  Alt 2. Jul 2004, 09:31
So, die Lösung habe ich gleich in die CodeLib befördert. Hier: http://www.delphipraxis.net/internal...=198202#198202

Viel Erfolg. Wenn Du Fragen hast, bitte in Deinem (diesen!) Thread. Danke.

......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von richard_boderich
richard_boderich

Registriert seit: 21. Jun 2004
Ort: Berlin
1.067 Beiträge
 
Delphi 7 Architect
 
#4

Re: Stringgrid selection Problem !

  Alt 2. Jul 2004, 10:35
hallo sakura,

habe mir dein screenshot angesehen, und
ich glaube du hast mich falsch verstanden, (oder ich verstehen dein
screeshot falsch).

ich will keine multiselectionen haben, ich will nur, das wenn ich in die mitte einer zeile
mit der makierung anfange, und z.b. eine zeile runter gehe, die markierung wieder
bis zur mitte der zeile geht ->> kein rechteckiger bereich

was ich bei dir gesehen hab, waren doch multiselectierte bereiche oder ??
mfG Richard

Cimmams schrieb "das einzige was an ArmA gut ist, ist die Grafik bis 100m und der Rest ist so unreal wie unsere Demokratie."
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#5

Re: Stringgrid selection Problem !

  Alt 2. Jul 2004, 10:44
Zitat von richard_boderich:
ich will keine multiselectionen haben, ich will nur, das wenn ich in die mitte einer zeile
mit der makierung anfange, und z.b. eine zeile runter gehe, die markierung wieder
bis zur mitte der zeile geht ->> kein rechteckiger bereich
Sorry, aber Bahnhof. Zeichne doch mal ein Bild mit einem Beispiel

......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von richard_boderich
richard_boderich

Registriert seit: 21. Jun 2004
Ort: Berlin
1.067 Beiträge
 
Delphi 7 Architect
 
#6

Re: Stringgrid selection Problem !

  Alt 2. Jul 2004, 11:10
hi sakura,

also ich hab mal ein screenshot beigefügt, zu sagen waere
noch , das ich das grid manuell mit daten gefuettert habe,
die zellen sind also nicht mit irgendeiner festgelegten datenbankstruktur verknuepft,
sondern mit einem array, gibt also keinen grund, warum ich nur rechteckig markieren sollte

zum screenshoot: stelle dir einfach vor, die buchstaben seien einzelne zellen,
und ich will immer nur einen zusammenhaegenden bereich , kein multiselekt!

Die hoffnung stirbt zuletzt, danke für deine hilfe
Miniaturansicht angehängter Grafiken
markierung.gif  
mfG Richard

Cimmams schrieb "das einzige was an ArmA gut ist, ist die Grafik bis 100m und der Rest ist so unreal wie unsere Demokratie."
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#7

Re: Stringgrid selection Problem !

  Alt 2. Jul 2004, 11:30
Okay, verstanden und ... gelöst.

Das ist schon etwas einfacher. Du mußt zwei Ereignisse abfangen. Einmal das OnSelectCell, um dem StringGrid mitzuteilen, daß sich die Auswahl grundlegend geändert hat, und einmal das OnDrawCell Ereigniss, um die Auswahl darzustellen.

Außerdem habe ich noch eine Methode geschrieben, welche ermittelt, ob sich eine Zelle (Spalte, Zeile) in der erweiterten Auswahl befindet.

Hier die drei Methoden und es geht.
Delphi-Quellcode:
type
  TForm1 = class(TForm)
    [...]
  private
    { Private declarations }
    function CellInRange(aGrid: TCustomDrawGrid; aCol, aRow: Integer): Boolean;
    [...]
  end;

// testen, ob sich eine bestimmte Zelle in der erweiterten Auswahl aufhält
function TForm1.CellInRange(aGrid: TCustomDrawGrid; aCol, aRow: Integer
    ): Boolean;
begin
  Result := False;
  if aRow < aGrid.Selection.Top then
    Exit;
  if aRow = aGrid.Selection.Top then
    if aCol < aGrid.Selection.Left then
      Exit;
  if aRow > aGrid.Selection.Bottom then
    Exit;
  if aRow = aGrid.Selection.Bottom then
    if aCol > aGrid.Selection.Right then
      Exit;
  Result := True;
end;

// die Ereignisroutinen
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  if Sender = nil then
    Exit;
  if not (Sender is TStringGrid) then
    Exit;
  with Sender as TStringGrid do
  begin
    // skip fixed columns
    if (ACol < FixedCols) or (ARow < FixedRows) then
      Exit;
    // select color
    if CellInRange(Sender as TStringGrid, ACol, ARow) then
    begin
      // selected cell
      Canvas.Brush.Color := clHighlight;
      Canvas.Font.Color := clHighlightText;
    end else begin
      // cell not selected
      Canvas.Brush.Color := clWindow;
      Canvas.Font.Color := clWindowText;
    end;
    // draw cell
    Canvas.TextRect(Rect, Rect.Left, Rect.Top, Cells[ACol, ARow]);
  end;
end;

procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
begin
  if Sender = nil then
    Exit;
  if not (Sender is TStringGrid) then
    Exit;
  with Sender as TStringGrid do
  begin
    Update;
    Invalidate;
  end;
end;
......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von richard_boderich
richard_boderich

Registriert seit: 21. Jun 2004
Ort: Berlin
1.067 Beiträge
 
Delphi 7 Architect
 
#8

Re: Stringgrid selection Problem !

  Alt 2. Jul 2004, 12:21
mahlzeit,

also dein code funktioniert bei mir nich, habs mal gerade in einem
testproject getestet (neue form und nur 1 stringgrid)
macht nicht das was es soll, entweder ist der code fehlerhaft, oder
wir reden aneinander vorbei. es muss so sein:

wenn du z. b. die markierung in der mitte von zeile 1 anfaengst
, und gehst nach zeile 3. dann ist die rechte haelfte von zeile
1 markiert, die komplette zeile 2 und die linke haelfte von
zeile 3

muss so sein weil eindimensionales array(werte alle hintereinander);

aber

stringgrid stellt zu 32 col breite dar, dann gehts weiter in naechster zeile

arrayposotion berechet sich folgendermaßen: (acol)+(arow * 32)

verstehst du, ich muss sozusagen wenn ich eine zeile runter gehe beim markieren,
alle zellen die zwischen erster und letzter sind markieren koennen, um alle korrekten arraypositionen zu erhalten

ich hoffe ich habs dir jetz richtig erklaeren koennen
mfG Richard

Cimmams schrieb "das einzige was an ArmA gut ist, ist die Grafik bis 100m und der Rest ist so unreal wie unsere Demokratie."
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#9

Re: Stringgrid selection Problem !

  Alt 2. Jul 2004, 12:29
Genauso lief der Code auch bei mir. Was für eine Delphiversion hast Du denn? Hast Du das OnSelectCell Ereignis eingesetzt?

......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von richard_boderich
richard_boderich

Registriert seit: 21. Jun 2004
Ort: Berlin
1.067 Beiträge
 
Delphi 7 Architect
 
#10

Re: Stringgrid selection Problem !

  Alt 2. Jul 2004, 13:30
mahlzeit,

also habs nochmal getestet. beide ereignisse sind gesetzt, onselectcell und ondrawcell

wenn ich markiere, zeichet er ein rechteck von linksoben nach rechstunten.
ich kann zwar wenn ich rechtsunten die maus nach links bewege zellen abwaehlen, aber das is nich das was ich
brauche. er selectiert , die rows ZWISCHEN 1 markierter zeile und letzter markierter zeile nicht vollstaendig,
sondern nur ab der col position, die ich hab, wenn ich die markierung beginne.

ich glaub du hast mich doch nicht verstanden

mach dir mal ne leere form, memo drauf, ausfuehren,

bisserl text reinschreiben oder kopieren, idealerweise gleichlange zeilen,
und dann guck dir mal an wie memo markiert.


schicke dir auch mein testproject , was ich zum testen deines codes nutze, vielleicht hab ich
ja auch einen fehler drin
Angehängte Dateien
Dateityp: rar stringgrid_markierung_170.rar (188,0 KB, 46x aufgerufen)
mfG Richard

Cimmams schrieb "das einzige was an ArmA gut ist, ist die Grafik bis 100m und der Rest ist so unreal wie unsere Demokratie."
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:02 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz